From 3d2e165ac5ab0e335b343d814df4e7d2c0ff62c3 Mon Sep 17 00:00:00 2001 From: Svetoslav Dekov Date: Tue, 19 Aug 2025 17:57:35 +0200 Subject: [PATCH] feat(editor): Add custom data store column headers (no-changelog) (#18390) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Milorad FIlipović --- .../__tests__/data-store.service.test.ts | 4 + .../data-store/data-store.repository.ts | 4 +- .../frontend/@n8n/i18n/src/locales/en.json | 4 + .../components/dataGrid/AddColumnPopover.vue | 3 +- .../components/dataGrid/ColumnHeader.test.ts | 71 ++++++++++ .../components/dataGrid/ColumnHeader.vue | 120 ++++++++++++++++ .../components/dataGrid/DataStoreTable.vue | 132 +++++++++++++++--- .../composables/useDataStoreTypes.ts | 12 ++ .../src/features/dataStore/dataStore.api.ts | 30 ++++ .../dataStore/dataStore.store.test.ts | 92 ++++++++++++ .../src/features/dataStore/dataStore.store.ts | 57 ++++++++ .../src/features/dataStore/typeGuards.ts | 9 +- pnpm-lock.yaml | 2 +- 13 files changed, 517 insertions(+), 23 deletions(-) create mode 100644 packages/frontend/editor-ui/src/features/dataStore/components/dataGrid/ColumnHeader.test.ts create mode 100644 packages/frontend/editor-ui/src/features/dataStore/components/dataGrid/ColumnHeader.vue create mode 100644 packages/frontend/editor-ui/src/features/dataStore/dataStore.store.test.ts diff --git a/packages/cli/src/modules/data-store/__tests__/data-store.service.test.ts b/packages/cli/src/modules/data-store/__tests__/data-store.service.test.ts index aafccf487d..c8ff611ba5 100644 --- a/packages/cli/src/modules/data-store/__tests__/data-store.service.test.ts +++ b/packages/cli/src/modules/data-store/__tests__/data-store.service.test.ts @@ -795,6 +795,7 @@ describe('dataStore', () => { createdAt: expect.any(Date), // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment updatedAt: expect.any(Date), + index: 0, }, { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment @@ -805,6 +806,7 @@ describe('dataStore', () => { createdAt: expect.any(Date), // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment updatedAt: expect.any(Date), + index: 1, }, { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment @@ -815,6 +817,7 @@ describe('dataStore', () => { createdAt: expect.any(Date), // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment updatedAt: expect.any(Date), + index: 2, }, { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment @@ -825,6 +828,7 @@ describe('dataStore', () => { createdAt: expect.any(Date), // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment updatedAt: expect.any(Date), + index: 3, }, ]), ); diff --git a/packages/cli/src/modules/data-store/data-store.repository.ts b/packages/cli/src/modules/data-store/data-store.repository.ts index e0898a833a..89f984f1c6 100644 --- a/packages/cli/src/modules/data-store/data-store.repository.ts +++ b/packages/cli/src/modules/data-store/data-store.repository.ts @@ -221,8 +221,7 @@ export class DataStoreRepository extends Repository { 'dataStore', ...this.getDataStoreColumnFields('data_store_column'), ...this.getProjectFields('project'), - ]) - .addOrderBy('data_store_column.index', 'ASC'); + ]); } private getDataStoreColumnFields(alias: string): string[] { @@ -232,6 +231,7 @@ export class DataStoreRepository extends Repository { `${alias}.type`, `${alias}.createdAt`, `${alias}.updatedAt`, + `${alias}.index`, ]; } diff --git a/packages/frontend/@n8n/i18n/src/locales/en.json b/packages/frontend/@n8n/i18n/src/locales/en.json index 9d39423a2f..90702e3077 100644 --- a/packages/frontend/@n8n/i18n/src/locales/en.json +++ b/packages/frontend/@n8n/i18n/src/locales/en.json @@ -2869,6 +2869,10 @@ "dataStore.addColumn.nameInput.placeholder": "Enter column name", "dataStore.addColumn.typeInput.label": "@:_reusableBaseText.type", "dataStore.addColumn.error": "Error adding column", + "dataStore.moveColumn.error": "Error moving column", + "dataStore.deleteColumn.error": "Error deleting column", + "dataStore.deleteColumn.confirm.title": "Delete column", + "dataStore.deleteColumn.confirm.message": "Are you sure you want to delete the column \"{name}\"? This action cannot be undone.", "dataStore.addColumn.invalidName.error": "Invalid column name", "dataStore.addColumn.invalidName.description": "Only alphanumeric characters and non-leading dashes are allowed for column names", "dataStore.fetchContent.error": "Error fetching data store content", diff --git a/packages/frontend/editor-ui/src/features/dataStore/components/dataGrid/AddColumnPopover.vue b/packages/frontend/editor-ui/src/features/dataStore/components/dataGrid/AddColumnPopover.vue index 97d27d6595..ab5c68b4ac 100644 --- a/packages/frontend/editor-ui/src/features/dataStore/components/dataGrid/AddColumnPopover.vue +++ b/packages/frontend/editor-ui/src/features/dataStore/components/dataGrid/AddColumnPopover.vue @@ -89,6 +89,7 @@ const onInput = debounce(validateName, { debounceTime: 300 });