Merge pull request #8263 from vvlladd28/engix-ltd-duplicate_filter
Fixed and resolve conflict: Add dashboard filter duplication option
This commit is contained in:
commit
9dcc2cec59
@ -64,6 +64,15 @@
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>edit</mat-icon>
|
||||
</button>
|
||||
<button [disabled]="isLoading$ | async"
|
||||
mat-icon-button color="primary"
|
||||
style="min-width: 48px;"
|
||||
type="button"
|
||||
(click)="duplicateFilter($index)"
|
||||
matTooltip="{{ 'filter.duplicate-filter' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>content_copy</mat-icon>
|
||||
</button>
|
||||
<button [disabled]="isLoading$ | async"
|
||||
mat-icon-button color="primary"
|
||||
style="min-width: 40px;"
|
||||
|
||||
@ -64,6 +64,8 @@ export class FiltersDialogComponent extends DialogComponent<FiltersDialogCompone
|
||||
|
||||
filterToWidgetsMap: {[filterId: string]: Array<string>} = {};
|
||||
|
||||
filterNames: Set<string> = new Set<string>();
|
||||
|
||||
filtersFormGroup: UntypedFormGroup;
|
||||
|
||||
submitted = false;
|
||||
@ -112,6 +114,7 @@ export class FiltersDialogComponent extends DialogComponent<FiltersDialogCompone
|
||||
if (isUndefined(filter.editable)) {
|
||||
filter.editable = true;
|
||||
}
|
||||
this.filterNames.add(filter.filter);
|
||||
filterControls.push(this.createFilterFormControl(filterId, filter));
|
||||
}
|
||||
|
||||
@ -158,10 +161,37 @@ export class FiltersDialogComponent extends DialogComponent<FiltersDialogCompone
|
||||
message, this.translate.instant('action.close'), true);
|
||||
} else {
|
||||
(this.filtersFormGroup.get('filters') as UntypedFormArray).removeAt(index);
|
||||
this.filterNames.delete(filter.filter);
|
||||
this.filtersFormGroup.markAsDirty();
|
||||
}
|
||||
}
|
||||
|
||||
private getNextDuplicatedName(filterName: string): string {
|
||||
const suffix = ` - ${this.translate.instant('action.copy')} `;
|
||||
let counter = 0;
|
||||
while (++counter < Number.MAX_SAFE_INTEGER) {
|
||||
const newName = `${filterName}${suffix}${counter}`;
|
||||
if (!this.filterNames.has(newName)) {
|
||||
return newName;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
duplicateFilter(index: number) {
|
||||
const originalFilter = (this.filtersFormGroup.get('filters').value as any[])[index];
|
||||
const newFilterName = this.getNextDuplicatedName(originalFilter.filter);
|
||||
if (newFilterName) {
|
||||
const duplicatedFilter = deepClone(originalFilter);
|
||||
duplicatedFilter.id = this.utils.guid();
|
||||
duplicatedFilter.filter = newFilterName;
|
||||
(this.filtersFormGroup.get('filters') as UntypedFormArray).
|
||||
insert(index + 1, this.createFilterFormControl(duplicatedFilter.id, duplicatedFilter));
|
||||
this.filterNames.add(duplicatedFilter.filter);
|
||||
}
|
||||
}
|
||||
|
||||
public addFilter() {
|
||||
this.openFilterDialog(-1);
|
||||
}
|
||||
@ -176,6 +206,7 @@ export class FiltersDialogComponent extends DialogComponent<FiltersDialogCompone
|
||||
const filtersArray = this.filtersFormGroup.get('filters').value as any[];
|
||||
if (!isAdd) {
|
||||
filter = filtersArray[index];
|
||||
this.filterNames.delete(filter.filter);
|
||||
}
|
||||
this.dialog.open<FilterDialogComponent, FilterDialogData,
|
||||
Filter>(FilterDialogComponent, {
|
||||
@ -197,6 +228,7 @@ export class FiltersDialogComponent extends DialogComponent<FiltersDialogCompone
|
||||
filterFormControl.get('editable').patchValue(result.editable);
|
||||
filterFormControl.get('keyFilters').patchValue(result.keyFilters);
|
||||
}
|
||||
this.filterNames.add(result.filter);
|
||||
this.filtersFormGroup.markAsDirty();
|
||||
}
|
||||
});
|
||||
|
||||
@ -2385,6 +2385,7 @@
|
||||
"ignore-case": "ignore case",
|
||||
"value": "Value",
|
||||
"remove-filter": "Remove filter",
|
||||
"duplicate-filter": "Duplicate filter",
|
||||
"preview": "Filter preview",
|
||||
"no-filters": "No filters configured",
|
||||
"add-filter": "Add filter",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user