diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 7cf0a5522..604a968f2 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -596,7 +596,7 @@ src/app/components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component.html - 91 + 94 src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html @@ -1444,7 +1444,7 @@ src/app/components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component.html - 90 + 93 src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html @@ -6939,7 +6939,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 855 + 860 @@ -7185,7 +7185,7 @@ Bulk operation executed successfully src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 845 + 850 @@ -7195,6 +7195,13 @@ 12 + + This operation will also remove custom field(s) from the selected documents. + + src/app/components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component.html + 91 + + Filter by tag diff --git a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts index 069865078..777eec13e 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts +++ b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts @@ -456,7 +456,7 @@ export class FilterableDropdownComponent implements OnDestroy, OnInit { opened = new EventEmitter() @Output() - extraButton = new EventEmitter() + extraButton = new EventEmitter() get modifierToggleEnabled(): boolean { return this.manyToOne @@ -656,7 +656,7 @@ export class FilterableDropdownComponent implements OnDestroy, OnInit { const applyOnClose = this.applyOnClose this.applyOnClose = false this.dropdown.close() - this.extraButton.emit() + this.extraButton.emit(this.selectionModel.diff()) this.applyOnClose = applyOnClose } } diff --git a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html index 31c1c3957..242e8abab 100644 --- a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html +++ b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html @@ -92,7 +92,7 @@ [documentCounts]="customFieldDocumentCounts" extraButtonTitle="Set values" i18n-extraButtonTitle - (extraButton)="setCustomFieldValues()" + (extraButton)="setCustomFieldValues($event)" (apply)="setCustomFields($event)"> } diff --git a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.spec.ts b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.spec.ts index 17cc86f30..556c61ad9 100644 --- a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.spec.ts +++ b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.spec.ts @@ -1443,14 +1443,14 @@ describe('BulkEditorComponent', () => { { id: 1, name: 'Custom Field 1', data_type: CustomFieldDataType.String }, { id: 2, name: 'Custom Field 2', data_type: CustomFieldDataType.String }, ] - jest - .spyOn(component.customFieldsSelectionModel, 'getSelectedItems') - .mockReturnValue([{ id: 1 }, { id: 2 }]) - component.setCustomFieldValues() + component.setCustomFieldValues({ + itemsToAdd: [{ id: 1 }, { id: 2 }], + itemsToRemove: [], + } as any) expect(modal.componentInstance.customFields).toEqual(component.customFields) - expect(modal.componentInstance.selectedFieldsIds).toEqual([1, 2]) + expect(modal.componentInstance.fieldsToAddIds).toEqual([1, 2]) expect(modal.componentInstance.documents).toEqual([3, 4]) modal.componentInstance.failed.emit() diff --git a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts index 580392e00..ecfe62cc9 100644 --- a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts +++ b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts @@ -828,7 +828,7 @@ export class BulkEditorComponent }) } - public setCustomFieldValues() { + public setCustomFieldValues(changedCustomFields: ChangedItems) { const modal = this.modalService.open(CustomFieldsBulkEditDialogComponent, { backdrop: 'static', size: 'lg', @@ -836,9 +836,14 @@ export class BulkEditorComponent const dialog = modal.componentInstance as CustomFieldsBulkEditDialogComponent dialog.customFields = this.customFields - dialog.selectedFieldsIds = this.customFieldsSelectionModel - .getSelectedItems() - .map((item) => item.id) + dialog.fieldsToAddIds = changedCustomFields.itemsToAdd.map( + (item) => item.id + ) + dialog.fieldsToRemoveIds = changedCustomFields.itemsToRemove.map( + (item) => item.id + ) + console.log(dialog.fieldsToRemoveIds, this.customFieldsSelectionModel) + dialog.documents = Array.from(this.list.selected) dialog.succeeded.subscribe((result) => { this.toastService.showInfo( diff --git a/src-ui/src/app/components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component.html b/src-ui/src/app/components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component.html index 896cdfa98..89628a1be 100644 --- a/src-ui/src/app/components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component.html +++ b/src-ui/src/app/components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component.html @@ -8,13 +8,13 @@
- @for (field of selectedFields; track field.id) { + @for (field of fieldsToAdd; track field.id) {
@switch (field.data_type) { @case (CustomFieldDataType.String) { @@ -87,6 +87,9 @@
diff --git a/src-ui/src/app/components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component.spec.ts b/src-ui/src/app/components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component.spec.ts index 4ead91010..a5c76d5bc 100644 --- a/src-ui/src/app/components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component.spec.ts +++ b/src-ui/src/app/components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component.spec.ts @@ -40,7 +40,7 @@ describe('CustomFieldsBulkEditDialogComponent', () => { { id: 1, name: 'Field 1', data_type: CustomFieldDataType.String }, { id: 2, name: 'Field 2', data_type: CustomFieldDataType.Integer }, ] - component.selectedFieldsIds = [1, 2] + component.fieldsToAddIds = [1, 2] expect(component.form.contains('1')).toBeTruthy() expect(component.form.contains('2')).toBeTruthy() }) @@ -52,7 +52,7 @@ describe('CustomFieldsBulkEditDialogComponent', () => { const successSpy = jest.spyOn(component.succeeded, 'emit') component.documents = [1, 2] - component.selectedFieldsIds = [1] + component.fieldsToAddIds = [1] component.form.controls['1'].setValue('Value 1') component.save() @@ -67,7 +67,7 @@ describe('CustomFieldsBulkEditDialogComponent', () => { const failSpy = jest.spyOn(component.failed, 'emit') component.documents = [1, 2] - component.selectedFieldsIds = [1] + component.fieldsToAddIds = [1] component.form.controls['1'].setValue('Value 1') component.save() @@ -82,8 +82,8 @@ describe('CustomFieldsBulkEditDialogComponent', () => { }) it('should remove field from selected fields', () => { - component.selectedFieldsIds = [1, 2] + component.fieldsToAddIds = [1, 2] component.removeField(1) - expect(component.selectedFieldsIds).toEqual([2]) + expect(component.fieldsToAddIds).toEqual([2]) }) }) diff --git a/src-ui/src/app/components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component.ts b/src-ui/src/app/components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component.ts index bcdc6b919..02202df67 100644 --- a/src-ui/src/app/components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component.ts +++ b/src-ui/src/app/components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component.ts @@ -23,23 +23,25 @@ export class CustomFieldsBulkEditDialogComponent { public customFields: CustomField[] = [] - private _selectedFields: CustomField[] = [] // static object for change detection - public get selectedFields() { - return this._selectedFields + private _fieldsToAdd: CustomField[] = [] // static object for change detection + public get fieldsToAdd() { + return this._fieldsToAdd } - private _selectedFieldsIds: number[] = [] - public get selectedFieldsIds() { - return this._selectedFieldsIds + private _fieldsToAddIds: number[] = [] + public get fieldsToAddIds() { + return this._fieldsToAddIds } - public set selectedFieldsIds(ids: number[]) { - this._selectedFieldsIds = ids - this._selectedFields = this.customFields.filter((field) => - this._selectedFieldsIds.includes(field.id) + public set fieldsToAddIds(ids: number[]) { + this._fieldsToAddIds = ids + this._fieldsToAdd = this.customFields.filter((field) => + this._fieldsToAddIds.includes(field.id) ) this.initForm() } + public fieldsToRemoveIds: number[] = [] + public form: FormGroup = new FormGroup({}) public documents: number[] @@ -51,7 +53,7 @@ export class CustomFieldsBulkEditDialogComponent { initForm() { this.form = new FormGroup({}) - this._selectedFieldsIds.forEach((field_id) => { + this._fieldsToAddIds.forEach((field_id) => { this.form.addControl(field_id.toString(), new FormControl(null)) }) } @@ -60,7 +62,7 @@ export class CustomFieldsBulkEditDialogComponent { this.documentService .bulkEdit(this.documents, 'modify_custom_fields', { add_custom_fields: this.form.value, - remove_custom_fields: [], + remove_custom_fields: this.fieldsToRemoveIds, }) .pipe(first()) .subscribe({ @@ -79,8 +81,6 @@ export class CustomFieldsBulkEditDialogComponent { } public removeField(fieldId: number) { - this.selectedFieldsIds = this._selectedFieldsIds.filter( - (id) => id !== fieldId - ) + this.fieldsToAddIds = this._fieldsToAddIds.filter((id) => id !== fieldId) } }