From 7e2b8fb319b9f9da835f56079e5ec8da3b511fcc Mon Sep 17 00:00:00 2001 From: DaxServer Date: Sun, 28 Sep 2025 18:37:51 +0200 Subject: [PATCH] feat(ColumnHeaderMenu): add replace functionality This commit adds a new "Replace" functionality to the ColumnHeaderMenu component. The changes include: - Adding a new `showReplaceDialog` ref to track the visibility of the replace dialog. - Implementing a `handleReplaceCompleted` function that is called when the replace operation is completed, displaying a success message. - Updating the "Replace" menu item to toggle the `showReplaceDialog` when clicked. - Adding a new `ReplaceDialog` component that handles the replace operation. - Updating the auto-imports to include the `useReplaceApi` composable and the `Dialog` component. These changes allow users to easily replace values in a column directly from the column header menu. --- frontend/components.d.ts | 3 + .../components/ColumnHeaderMenu.vue | 18 ++- .../components/ReplaceDialog.vue | 151 ++++++++++++++++++ 3 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 frontend/src/features/data-processing/components/ReplaceDialog.vue diff --git a/frontend/components.d.ts b/frontend/components.d.ts index c412eb1..0bd19af 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -12,6 +12,7 @@ declare module 'vue' { BasePropertyValueEditor: typeof import('./src/features/wikibase-schema/components/BasePropertyValueEditor.vue')['default'] Button: typeof import('primevue/button')['default'] Card: typeof import('primevue/card')['default'] + Checkbox: typeof import('primevue/checkbox')['default'] Chip: typeof import('primevue/chip')['default'] ClaimEditor: typeof import('./src/features/wikibase-schema/components/ClaimEditor.vue')['default'] Column: typeof import('primevue/column')['default'] @@ -23,6 +24,7 @@ declare module 'vue' { DataTable: typeof import('primevue/datatable')['default'] DataTabPanel: typeof import('./src/features/data-processing/components/DataTabPanel.vue')['default'] DefaultLayout: typeof import('./src/core/layouts/DefaultLayout.vue')['default'] + Dialog: typeof import('primevue/dialog')['default'] DropZone: typeof import('./src/features/wikibase-schema/components/DropZone.vue')['default'] FileUpload: typeof import('primevue/fileupload')['default'] Header: typeof import('./src/shared/components/Header.vue')['default'] @@ -39,6 +41,7 @@ declare module 'vue' { QualifiersEditor: typeof import('./src/features/wikibase-schema/components/QualifiersEditor.vue')['default'] ReferenceContainer: typeof import('./src/features/wikibase-schema/components/ReferenceContainer.vue')['default'] ReferencesEditor: typeof import('./src/features/wikibase-schema/components/ReferencesEditor.vue')['default'] + ReplaceDialog: typeof import('./src/features/data-processing/components/ReplaceDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SchemaSelector: typeof import('./src/features/wikibase-schema/components/SchemaSelector.vue')['default'] diff --git a/frontend/src/features/data-processing/components/ColumnHeaderMenu.vue b/frontend/src/features/data-processing/components/ColumnHeaderMenu.vue index e846b4f..368033b 100644 --- a/frontend/src/features/data-processing/components/ColumnHeaderMenu.vue +++ b/frontend/src/features/data-processing/components/ColumnHeaderMenu.vue @@ -5,8 +5,15 @@ const props = defineProps<{ isPrimaryKey: boolean }>() +const { showSuccess } = useErrorHandling() + const menu = ref() const isOpen = ref(false) +const showReplaceDialog = ref(false) + +const handleReplaceCompleted = (affectedRows: number) => { + showSuccess(`Replace completed: ${affectedRows} rows affected`) +} const menuItems = ref([ { @@ -77,7 +84,9 @@ const menuItems = ref([ { label: 'Replace', icon: 'pi pi-code', - command: () => console.log(`Replace in ${props.columnHeader}`), + command: () => { + showReplaceDialog.value = true + }, }, ], }, @@ -104,5 +113,12 @@ const menuItems = ref([ @show="() => (isOpen = true)" @hide="() => (isOpen = false)" /> + diff --git a/frontend/src/features/data-processing/components/ReplaceDialog.vue b/frontend/src/features/data-processing/components/ReplaceDialog.vue new file mode 100644 index 0000000..0b9c413 --- /dev/null +++ b/frontend/src/features/data-processing/components/ReplaceDialog.vue @@ -0,0 +1,151 @@ + + +