diff --git a/frontend/src/app/ui/description/listing/description-listing.component.ts b/frontend/src/app/ui/description/listing/description-listing.component.ts index e36fc0789..4547ba18a 100644 --- a/frontend/src/app/ui/description/listing/description-listing.component.ts +++ b/frontend/src/app/ui/description/listing/description-listing.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; +import { FormBuilder, UntypedFormBuilder, Validators } from '@angular/forms'; import { MatDialog, MatDialogRef } from '@angular/material/dialog'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; @@ -281,16 +281,17 @@ export class DescriptionListingComponent extends BaseListingComponent { - if (result) { - this.updateDataFn(result); - } + if (!result) return; + + this.updateDataFn(result); }); } updateDataFn(filters: DescriptionListingFilters): void { this.referenceFilters = this._patchReferenceFilters(filters); - this.lookup = this._patchLookupFromFilters(filters); + this._patchLookupFromFilters(filters); this.filtersCount = this._countFilters(this.lookup); + this.isLoading = false; this.filterChanged(this.lookup) } @@ -412,12 +413,10 @@ export class DescriptionListingComponent extends BaseListingComponent t.code && t.code?.toString() == this.authService.selectedTenant()); if (tenant && tenant?.code) { @@ -428,35 +427,33 @@ export class DescriptionListingComponent extends BaseListingComponent 0) { this.lookup.descriptionTemplateSubQuery = DescriptionFilterService.initializeDescriptionTemplateLookup(); this.lookup.descriptionTemplateSubQuery.ids = descriptionTemplates; } else this.lookup.descriptionTemplateSubQuery = null; // Plans - let plans = filters.associatedPlanIds ?? null; let addPlans = plans && plans?.length > 0; - let roles = filters.role !== null ? [filters.role] : null; let addRoles = roles && roles?.length > 0; - if (addPlans || addRoles) { + if (filters?.role || filters?.associatedPlanIds?.length) { this.lookup.planSubQuery = DescriptionFilterService.initializePlanLookup(); - if (addPlans) this.lookup.planSubQuery.ids = plans?.length > 0 ? plans : null; + if (filters?.associatedPlanIds?.length) this.lookup.planSubQuery.ids = filters?.associatedPlanIds ?? null; - if (addRoles) { + if (filters?.role) { this.lookup.planSubQuery.planUserSubQuery = DescriptionFilterService.initializePlanUserLookup(); - this.lookup.planSubQuery.planUserSubQuery.userRoles = roles; + this.lookup.planSubQuery.planUserSubQuery.userRoles = [filters?.role]; } } else this.lookup.planSubQuery = null; // Tags - let tags = filters.tags ?? null; + let tags = filters?.tags ?? null; if (tags && tags?.length > 0) { this.lookup.descriptionTagSubQuery = DescriptionFilterService.initializeTagLookup(); this.lookup.descriptionTagSubQuery.tagIds = tags; } else this.lookup.descriptionTagSubQuery = null; // References - let references: Guid[] = filters.references + let references: Guid[] = filters?.references ?.filter((reference: ReferencesWithType) => reference.referenceTypeId != null && reference.referenceIds?.length > 0) ?.flatMap((referencesWithType: ReferencesWithType) => referencesWithType.referenceIds) as Guid[]; @@ -469,7 +466,7 @@ export class DescriptionListingComponent extends BaseListingComponent referencesWithType.referenceTypeId != null && referencesWithType.referenceIds?.length > 0) ?? null; + return filters?.references?.filter(( referencesWithType: ReferencesWithType ) => referencesWithType.referenceTypeId != null && referencesWithType.referenceIds?.length > 0) ?? null; } private _countFilters(lookup: DescriptionLookup): number { diff --git a/frontend/src/app/ui/description/listing/filtering/description-filter-dialogue/description-filter-dialog.component.html b/frontend/src/app/ui/description/listing/filtering/description-filter-dialogue/description-filter-dialog.component.html index cd9acab2f..fbd22f964 100644 --- a/frontend/src/app/ui/description/listing/filtering/description-filter-dialogue/description-filter-dialog.component.html +++ b/frontend/src/app/ui/description/listing/filtering/description-filter-dialogue/description-filter-dialog.component.html @@ -1,8 +1,7 @@ clear ; + filters: DescriptionListingFilters; constructor( public dialogRef: MatDialogRef, @@ -27,7 +26,7 @@ export class DescriptionFilterDialogComponent implements OnInit { referencesWithTypeItems: ReferencesWithType[], } ) { - this.formGroup = this._buildFormFromLookup(data?.lookup); + this.filters = this._buildDescriptionFilters(data?.lookup, data?.referencesWithTypeItems); } ngOnInit() { @@ -42,18 +41,19 @@ export class DescriptionFilterDialogComponent implements OnInit { this.dialogRef.close(); } - onFilterChanged(formGroup: UntypedFormGroup) { - this.dialogRef.close(formGroup.value as DescriptionListingFilters); + onFilterChanged(filters: DescriptionListingFilters) { + this.dialogRef.close(filters); } - private _buildFormFromLookup(lookup: DescriptionLookup): FormGroup { - return (new UntypedFormBuilder()).group({ - status: [lookup.statuses?.length > 0 ? lookup.statuses[0] : null], - viewOnlyTenant: [lookup.tenantSubQuery?.codes?.length > 0 ? true : false], - role: lookup.planSubQuery?.planUserSubQuery?.userRoles ? lookup.planSubQuery?.planUserSubQuery?.userRoles[0] : [], - descriptionTemplates: lookup.descriptionTemplateSubQuery?.ids ? [lookup.descriptionTemplateSubQuery?.ids] : [], - associatedPlanIds: lookup.planSubQuery?.ids ? [lookup.planSubQuery?.ids] : [], - tags: lookup.descriptionTagSubQuery?.tagIds ? [lookup.descriptionTagSubQuery?.tagIds] : [], - }); + private _buildDescriptionFilters(lookup: DescriptionLookup, references: ReferencesWithType[]): DescriptionListingFilters { + return { + status: lookup.statuses?.[0] ?? null, + viewOnlyTenant: lookup.tenantSubQuery?.codes?.length > 0, + role: lookup.planSubQuery?.planUserSubQuery?.userRoles?.[0] ?? null, + descriptionTemplates: lookup.descriptionTemplateSubQuery?.ids ?? [], + associatedPlanIds: lookup.planSubQuery?.ids ?? [], + tags: lookup.descriptionTagSubQuery?.tagIds ?? [], + references: references ?? [] + }; } } diff --git a/frontend/src/app/ui/description/listing/filtering/description-filter.component.html b/frontend/src/app/ui/description/listing/filtering/description-filter.component.html index febaa97ee..abef5fa26 100644 --- a/frontend/src/app/ui/description/listing/filtering/description-filter.component.html +++ b/frontend/src/app/ui/description/listing/filtering/description-filter.component.html @@ -88,7 +88,7 @@
{{'DESCRIPTION-LISTING.FILTERS.REFERENCE-TYPES.NAME' | translate }}
- +
@@ -98,7 +98,7 @@
-
+
{{'DESCRIPTION-LISTING.FILTERS.REFERENCE-TYPES.REFERENCE' | translate}} @@ -126,7 +126,11 @@
-
+
+ + diff --git a/frontend/src/app/ui/description/listing/filtering/description-filter.component.ts b/frontend/src/app/ui/description/listing/filtering/description-filter.component.ts index 04596f99b..e5d49e44c 100644 --- a/frontend/src/app/ui/description/listing/filtering/description-filter.component.ts +++ b/frontend/src/app/ui/description/listing/filtering/description-filter.component.ts @@ -1,6 +1,6 @@ -import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core'; -import { AbstractControl, FormArray, FormBuilder, FormControl, UntypedFormArray, UntypedFormGroup } from '@angular/forms'; +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { FormArray, FormControl, FormGroup, UntypedFormGroup } from '@angular/forms'; import { DescriptionStatusEnum } from '@app/core/common/enum/description-status'; import { PlanUserRole } from '@app/core/common/enum/plan-user-role'; import { ReferenceType } from '@app/core/model/reference-type/reference-type'; @@ -18,10 +18,9 @@ import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/mu import { SingleAutoCompleteConfiguration } from '@app/library/auto-complete/single/single-auto-complete-configuration'; import { BaseCriteriaComponent } from '@app/ui/misc/criteria/base-criteria.component'; import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model'; -import { QueryResult } from '@common/model/query-result'; import { Guid } from '@common/types/guid'; import { IsActive } from '@notification-service/core/enum/is-active.enum'; -import { takeUntil } from 'rxjs/operators'; +import { map, takeUntil } from 'rxjs/operators'; import { nameof } from 'ts-simple-nameof'; @Component({ @@ -29,13 +28,22 @@ import { nameof } from 'ts-simple-nameof'; templateUrl: './description-filter.component.html', styleUrls: ['./description-filter.component.scss'] }) -export class DescriptionFilterComponent extends BaseCriteriaComponent implements OnInit, OnChanges { +export class DescriptionFilterComponent extends BaseCriteriaComponent implements OnInit { - @Input() status; @Input() isPublic: boolean; @Input() hasSelectedTenant: boolean; - @Input() referencesWithTypeItems: ReferencesWithType[]; - @Input() filterFormGroup: UntypedFormGroup; + + private _filters: DescriptionListingFilters; + @Input() set filters(v: DescriptionListingFilters) { + if (v) { + this._filters = v; + this.buildForm(v); + } + } + get filters(): DescriptionListingFilters { + return this._filters; + } + @Output() filterChanged: EventEmitter = new EventEmitter(); public criteria: any; @@ -45,11 +53,11 @@ export class DescriptionFilterComponent extends BaseCriteriaComponent imple planRole = PlanUserRole; options: UntypedFormGroup; - descriptionTemplateAutoCompleteConfiguration: MultipleAutoCompleteConfiguration; - planAutoCompleteConfiguration: MultipleAutoCompleteConfiguration; - tagAutoCompleteConfiguration: MultipleAutoCompleteConfiguration; - referenceTypeAutocompleteConfiguration: SingleAutoCompleteConfiguration; - referenceAutocompleteConfiguration: Map; + descriptionTemplateAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = this.descriptionTemplateService.buildMultipleAutocompleteConfiguration(); + planAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = this.planService.multipleAutocompleteConfiguration; + tagAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = this.tagService.multipleAutocompleteConfiguration; + referenceTypeAutocompleteConfiguration: SingleAutoCompleteConfiguration = this.getReferenceTypeAutocompleteConfiguration(); + referenceAutocompleteConfiguration: Map; constructor( public enumUtils: EnumUtils, @@ -59,7 +67,6 @@ export class DescriptionFilterComponent extends BaseCriteriaComponent imple private tagService: TagService, private referenceService: ReferenceService, private referenceTypeService: ReferenceTypeService, - private formBuilder: FormBuilder, ) { super(new ValidationErrorModel()); } @@ -68,78 +75,78 @@ export class DescriptionFilterComponent extends BaseCriteriaComponent imple super.ngOnInit(); } - ngOnChanges(changes: SimpleChanges): void { - if (changes['filterFormGroup']) { - - this.descriptionTemplateAutoCompleteConfiguration = this.descriptionTemplateService.buildMultipleAutocompleteConfiguration(); - this.planAutoCompleteConfiguration = this.planService.multipleAutocompleteConfiguration; - this.tagAutoCompleteConfiguration = this.tagService.multipleAutocompleteConfiguration; - this.referenceTypeAutocompleteConfiguration = this.getReferenceTypeAutocompleteConfiguration(); - this.referenceAutocompleteConfiguration = new Map(); - - this.formGroup = this.filterFormGroup; - - this.referencesWithTypeItems.forEach((referencesWithType: ReferencesWithType) => { - - if (referencesWithType.referenceTypeId) { - this.addReferenceType(referencesWithType.referenceTypeId.toString(), referencesWithType.referenceIds.map(x => x.toString())); - } - else if (referencesWithType.referenceIds && referencesWithType.referenceIds?.length > 0) { - this.referenceService.query(this._referenceLookup(referencesWithType.referenceIds)).pipe(takeUntil(this._destroyed)) - .subscribe((result: QueryResult) => { - const references: Reference[] = result.items; - - const groupedReferencesByTypeIds = new Map(); - references.forEach(reference => { - if (!groupedReferencesByTypeIds.has(reference.type.id.toString())) groupedReferencesByTypeIds.set(reference.type.id.toString(), []); - - groupedReferencesByTypeIds.get(reference.type.id.toString()).push(reference.id.toString()); - }); - - groupedReferencesByTypeIds.forEach((referenceIds: string[], referenceId: string) => { - this.addReferenceType(referenceId, referenceIds); - }); - }); - } - }); - } - } - - addReferenceType(referenceTypeId: string = null, referenceIds: string[] = null): void { - if (!this.formGroup.get('references')) this.formGroup.addControl('references', this.formBuilder.array([])); - - const formArray = this.formGroup.get('references') as UntypedFormArray; - - const referenceForm = this.formBuilder.group({ - referenceTypeId: referenceTypeId, - referenceIds: referenceIds ? [referenceIds] : null, + buildForm(filters: DescriptionListingFilters) { + this.formGroup = new FormGroup({ + status: new FormControl(filters?.status), + viewOnlyTenant: new FormControl(filters.viewOnlyTenant), + role: new FormControl(filters.role), + descriptionTemplates: new FormControl(filters.descriptionTemplates), + associatedPlanIds: new FormControl(filters.associatedPlanIds), + tags: new FormControl(filters.tags), + references: new FormArray([]) }); - if (referenceTypeId && referenceTypeId != '' && referenceIds && referenceIds.length > 0) { - let referenceAutocomplete = this.getReferenceAutocompleteConfiguration(Guid.parse(referenceTypeId)); + this.referenceAutocompleteConfiguration = new Map(); + + filters?.references?.forEach((item: ReferencesWithType) => { + + if (item.referenceTypeId) { + this.addReferenceType(item.referenceTypeId, item.referenceIds); + } + else if (item.referenceIds && item.referenceIds?.length > 0) { + this.referenceService.query(this._referenceLookup(item.referenceIds)).pipe(takeUntil(this._destroyed), map((x) => x.items)) + .subscribe((references: Reference[]) => { + const types = new Set(references.map((x) => x.type.id)); + + types.forEach((typeId) => { + const referenceIds = references.filter((x) => x.type.id === typeId).map(x => x.id); + this.addReferenceType(typeId, referenceIds); + }); + }); + } + }); + } + + resetFilters() { + this.formGroup.reset(); + this.formGroup.patchValue({ + status: null, + viewOnlyTenant: null, + role: null, + descriptionTemplates: null, + associatedPlanIds: null, + tags: null, + references: null + }); + this.referenceAutocompleteConfiguration.clear(); + } + + addReferenceType(referenceTypeId: Guid = null, referenceIds: Guid[] = null): void { + const referenceForm = new FormGroup({ + referenceTypeId: new FormControl(referenceTypeId), + referenceIds: new FormControl(referenceIds ? referenceIds : []), + }); + + if (referenceTypeId && referenceIds?.length) { + let referenceAutocomplete = this.getReferenceAutocompleteConfiguration(referenceTypeId); this.referenceAutocompleteConfiguration.set(referenceTypeId, referenceAutocomplete); - } + } this._registerReferenceTypeListener(referenceForm); this._registerReferencesListener(referenceForm); - formArray.push(referenceForm); + this.formGroup.controls.references.push(referenceForm); } deleteRow(index: number): void { - const formArray = this.formGroup.get('references') as UntypedFormArray; + const formArray = this.formGroup.controls.references; formArray.removeAt(index); } controlModified(): void { this.clearErrorModel(); - this.filterChanged.emit(this.formGroup); - if (this.refreshCallback != null && - (this.formGroup.get('like')?.value == null || this.formGroup.get('like')?.value.length === 0 || this.formGroup.get('like')?.value.length > 2) - ) { - setTimeout(() => this.refreshCallback(true)); - } + this.filterChanged.emit(this.formGroup.value as DescriptionListingFilters); } isAuthenticated(): boolean { @@ -150,7 +157,7 @@ export class DescriptionFilterComponent extends BaseCriteriaComponent imple return this.referenceTypeService.getSingleAutocompleteConfiguration(); }; - selectReferenceAutocompleteConfiguration(referenceTypeId: string): MultipleAutoCompleteConfiguration { + selectReferenceAutocompleteConfiguration(referenceTypeId: Guid): MultipleAutoCompleteConfiguration { return this.referenceAutocompleteConfiguration.get(referenceTypeId); }; @@ -176,26 +183,26 @@ export class DescriptionFilterComponent extends BaseCriteriaComponent imple return lookup; } - private _registerReferenceTypeListener(control: AbstractControl) { - control.get('referenceTypeId')?.valueChanges.pipe(takeUntil(this._destroyed)) - .subscribe((referenceTypeId: string) => { + private _registerReferenceTypeListener(formGroup: FormGroup) { + formGroup.controls.referenceTypeId?.valueChanges.pipe(takeUntil(this._destroyed)) + .subscribe((referenceTypeId: Guid) => { this.referenceTypeAutocompleteConfiguration = this.getReferenceTypeAutocompleteConfiguration(); - control.get('referenceIds')?.reset(); + formGroup.controls.referenceIds?.reset(); - if (referenceTypeId && referenceTypeId != '') { - let referenceAutocomplete = this.getReferenceAutocompleteConfiguration(Guid.parse(referenceTypeId)); + if (referenceTypeId) { + let referenceAutocomplete = this.getReferenceAutocompleteConfiguration(referenceTypeId); this.referenceAutocompleteConfiguration.set(referenceTypeId, referenceAutocomplete); } }); } - private _registerReferencesListener(control: AbstractControl) { - control.get('referenceIds')?.valueChanges.pipe(takeUntil(this._destroyed)) + private _registerReferencesListener(formGroup: FormGroup) { + formGroup.controls.referenceIds?.valueChanges.pipe(takeUntil(this._destroyed)) .subscribe(references => { - let referenceTypeId = control.get('referenceTypeId').value; + let referenceTypeId = formGroup.controls.referenceTypeId.value; if (!referenceTypeId) return; - let referenceAutocomplete = this.getReferenceAutocompleteConfiguration(Guid.parse(referenceTypeId)); + let referenceAutocomplete = this.getReferenceAutocompleteConfiguration(referenceTypeId); this.referenceAutocompleteConfiguration.set(referenceTypeId, referenceAutocomplete); }); } @@ -211,12 +218,17 @@ export interface DescriptionListingFilters { references: ReferencesWithType[] } -export interface DescriptionListingFilterForm { +interface DescriptionListingFilterForm { status: FormControl, viewOnlyTenant: FormControl, role: FormControl, descriptionTemplates: FormControl, associatedPlanIds: FormControl, tags: FormControl, - references: FormArray + references: FormArray> +} + +interface DescriptionListingFilterReferencesForm { + referenceTypeId: FormControl, + referenceIds: FormControl } diff --git a/frontend/src/app/ui/plan/listing/plan-listing.component.ts b/frontend/src/app/ui/plan/listing/plan-listing.component.ts index 6981f4388..21578822e 100644 --- a/frontend/src/app/ui/plan/listing/plan-listing.component.ts +++ b/frontend/src/app/ui/plan/listing/plan-listing.component.ts @@ -316,6 +316,8 @@ export class PlanListingComponent extends BaseListingComponent { + if (!result) return; + this.updateDataFn(result); }); } @@ -408,7 +410,7 @@ export class PlanListingComponent extends BaseListingComponent 0) { this.lookup.planUserSubQuery = PlanFilterService.initializePlanUserLookup(); this.lookup.planUserSubQuery.userRoles = roles; diff --git a/frontend/src/assets/i18n/baq.json b/frontend/src/assets/i18n/baq.json index 1d2aecf00..17d7dfbda 100644 --- a/frontend/src/assets/i18n/baq.json +++ b/frontend/src/assets/i18n/baq.json @@ -758,6 +758,7 @@ "FILTERS": { "NAME": "Filters", "APPLY-FILTERS": "Apply filters", + "RESET-FILTERS": "Reset", "NO-ITEMS-FOUND": "Your search didn't match any items.", "STATUS": { "NAME": "Status", @@ -1045,6 +1046,7 @@ "FILTERS": { "NAME": "Filters", "APPLY-FILTERS": "Apply filters", + "RESET-FILTERS": "Reset", "STATUS": { "NAME": "Status", "TYPES": { diff --git a/frontend/src/assets/i18n/de.json b/frontend/src/assets/i18n/de.json index 3033326db..693969df2 100644 --- a/frontend/src/assets/i18n/de.json +++ b/frontend/src/assets/i18n/de.json @@ -758,6 +758,7 @@ "FILTERS": { "NAME": "Filters", "APPLY-FILTERS": "Apply filters", + "RESET-FILTERS": "Reset", "NO-ITEMS-FOUND": "Your search didn't match any items.", "STATUS": { "NAME": "Status", @@ -1045,6 +1046,7 @@ "FILTERS": { "NAME": "Filters", "APPLY-FILTERS": "Apply filters", + "RESET-FILTERS": "Reset", "STATUS": { "NAME": "Status", "TYPES": { diff --git a/frontend/src/assets/i18n/en.json b/frontend/src/assets/i18n/en.json index 140d69785..26e5f8394 100644 --- a/frontend/src/assets/i18n/en.json +++ b/frontend/src/assets/i18n/en.json @@ -1044,6 +1044,7 @@ "FILTERS": { "NAME": "Filters", "APPLY-FILTERS": "Apply filters", + "RESET-FILTERS": "Reset", "STATUS": { "NAME": "Status", "TYPES": { diff --git a/frontend/src/assets/i18n/es.json b/frontend/src/assets/i18n/es.json index 04bd1bac2..fb60a9e74 100644 --- a/frontend/src/assets/i18n/es.json +++ b/frontend/src/assets/i18n/es.json @@ -1046,6 +1046,7 @@ "FILTERS": { "NAME": "Filters", "APPLY-FILTERS": "Apply filters", + "RESET-FILTERS": "Reset", "STATUS": { "NAME": "Status", "TYPES": { diff --git a/frontend/src/assets/i18n/gr.json b/frontend/src/assets/i18n/gr.json index afc6096e3..445a5afd4 100644 --- a/frontend/src/assets/i18n/gr.json +++ b/frontend/src/assets/i18n/gr.json @@ -1046,6 +1046,7 @@ "FILTERS": { "NAME": "Filters", "APPLY-FILTERS": "Apply filters", + "RESET-FILTERS": "Reset", "STATUS": { "NAME": "Status", "TYPES": { diff --git a/frontend/src/assets/i18n/hr.json b/frontend/src/assets/i18n/hr.json index f85c9bb83..641d02eda 100644 --- a/frontend/src/assets/i18n/hr.json +++ b/frontend/src/assets/i18n/hr.json @@ -1046,6 +1046,7 @@ "FILTERS": { "NAME": "Filters", "APPLY-FILTERS": "Apply filters", + "RESET-FILTERS": "Reset", "STATUS": { "NAME": "Status", "TYPES": { diff --git a/frontend/src/assets/i18n/pl.json b/frontend/src/assets/i18n/pl.json index fb9a00d7e..bcce68e83 100644 --- a/frontend/src/assets/i18n/pl.json +++ b/frontend/src/assets/i18n/pl.json @@ -1046,6 +1046,7 @@ "FILTERS": { "NAME": "Filters", "APPLY-FILTERS": "Apply filters", + "RESET-FILTERS": "Reset", "STATUS": { "NAME": "Status", "TYPES": { diff --git a/frontend/src/assets/i18n/pt.json b/frontend/src/assets/i18n/pt.json index 82e9638d0..dc173a1bf 100644 --- a/frontend/src/assets/i18n/pt.json +++ b/frontend/src/assets/i18n/pt.json @@ -1046,6 +1046,7 @@ "FILTERS": { "NAME": "Filters", "APPLY-FILTERS": "Apply filters", + "RESET-FILTERS": "Reset", "STATUS": { "NAME": "Status", "TYPES": { diff --git a/frontend/src/assets/i18n/sk.json b/frontend/src/assets/i18n/sk.json index 1de4087f6..de9636753 100644 --- a/frontend/src/assets/i18n/sk.json +++ b/frontend/src/assets/i18n/sk.json @@ -1046,6 +1046,7 @@ "FILTERS": { "NAME": "Filters", "APPLY-FILTERS": "Apply filters", + "RESET-FILTERS": "Reset", "STATUS": { "NAME": "Status", "TYPES": { diff --git a/frontend/src/assets/i18n/sr.json b/frontend/src/assets/i18n/sr.json index dace39c50..f2aafcb28 100644 --- a/frontend/src/assets/i18n/sr.json +++ b/frontend/src/assets/i18n/sr.json @@ -1046,6 +1046,7 @@ "FILTERS": { "NAME": "Filters", "APPLY-FILTERS": "Apply filters", + "RESET-FILTERS": "Reset", "STATUS": { "NAME": "Status", "TYPES": { diff --git a/frontend/src/assets/i18n/tr.json b/frontend/src/assets/i18n/tr.json index f45a6d2a9..7d885b25e 100644 --- a/frontend/src/assets/i18n/tr.json +++ b/frontend/src/assets/i18n/tr.json @@ -1046,6 +1046,7 @@ "FILTERS": { "NAME": "Filters", "APPLY-FILTERS": "Apply filters", + "RESET-FILTERS": "Reset", "STATUS": { "NAME": "Status", "TYPES": {