diff --git a/src/app/modules/angular-slickgrid/components/__tests__/slick-vanilla-utilities.spec.ts b/src/app/modules/angular-slickgrid/components/__tests__/slick-vanilla-utilities.spec.ts index 6dca9ab77..bb60e86a1 100644 --- a/src/app/modules/angular-slickgrid/components/__tests__/slick-vanilla-utilities.spec.ts +++ b/src/app/modules/angular-slickgrid/components/__tests__/slick-vanilla-utilities.spec.ts @@ -34,5 +34,18 @@ describe('Slick-Vanilla-Grid-Bundle / Utilies', () => { { id: 'zip', field: 'address.zip', type: FieldType.number, formatter: Formatters.complexObject }, ]); }); + + it('should have custom editor formatter with correct structure even if we call it twice', () => { + autoAddEditorFormatterToColumnsWithEditor(columnDefinitions, customEditableInputFormatter); + autoAddEditorFormatterToColumnsWithEditor(columnDefinitions, customEditableInputFormatter); + + expect(columnDefinitions).toEqual([ + { id: 'firstName', field: 'firstName', editor: { model: Editors.text }, formatter: customEditableInputFormatter }, + { id: 'lastName', field: 'lastName', editor: { model: Editors.text }, formatter: Formatters.multiple, params: { formatters: [Formatters.italic, Formatters.bold, customEditableInputFormatter] } }, + { id: 'age', field: 'age', type: 'number', formatter: Formatters.multiple }, + { id: 'address', field: 'address.street', editor: { model: Editors.longText }, formatter: Formatters.multiple, params: { formatters: [Formatters.complexObject, customEditableInputFormatter] } }, + { id: 'zip', field: 'address.zip', type: 'number', formatter: Formatters.complexObject }, + ]); + }); }); }); diff --git a/src/app/modules/angular-slickgrid/components/slick-vanilla-utilities.ts b/src/app/modules/angular-slickgrid/components/slick-vanilla-utilities.ts index e5c8c43c4..e01b996f4 100644 --- a/src/app/modules/angular-slickgrid/components/slick-vanilla-utilities.ts +++ b/src/app/modules/angular-slickgrid/components/slick-vanilla-utilities.ts @@ -11,12 +11,15 @@ export function autoAddEditorFormatterToColumnsWithEditor(columnDefinitions: Col if (Array.isArray(columnDefinitions)) { for (const columnDef of columnDefinitions) { if (columnDef.editor) { - if (columnDef.formatter && columnDef.formatter !== Formatters.multiple) { + if (columnDef.formatter && columnDef.formatter !== Formatters.multiple && columnDef.formatter !== customEditableFormatter) { const prevFormatter = columnDef.formatter; columnDef.formatter = Formatters.multiple; columnDef.params = { ...columnDef.params, formatters: [prevFormatter, customEditableFormatter] }; } else if (columnDef.formatter && columnDef.formatter === Formatters.multiple && columnDef.params) { - columnDef.params.formatters = [...columnDef.params.formatters, customEditableFormatter]; + // before adding the formatter, make sure it's not yet in the params.formatters list, we wouldn't want to add it multiple times + if (columnDef.params.formatters.findIndex((formatter: Formatter) => formatter === customEditableFormatter) === -1) { + columnDef.params.formatters = [...columnDef.params.formatters, customEditableFormatter]; + } } else { columnDef.formatter = customEditableFormatter; }