From de2fa57c63952ae4b54f134c006757e5e00b6400 Mon Sep 17 00:00:00 2001 From: Jeppe Bundgaard Date: Wed, 29 Apr 2026 09:51:09 +0200 Subject: [PATCH] Add audit issue navigation and task-button normalization to Self-Serve Studio. Implement node ID resolution, audit visualization logic, and reusable task button helpers. Extend E2E and unit tests. --- .../department/tables/SelfServeTasksTable.vue | 31 +- .../department/tables/SelfServeTryModal.vue | 16 +- .../SessionUser/Objects/SelfServeTasks.vue | 19 +- .../Objects/selfServeObjectForms.js | 8 +- .../Objects/selfServeTaskButtons.js | 117 + .../self-serve/DepartmentSelfServeStudio.vue | 1874 ++++++++++++++++- .../self-serve/auditIssueNavigation.js | 101 + ...self-serve-studio-audit-navigation.spec.js | 35 + tests/e2e/self-serve-studio-flow.spec.js | 821 +++++++- ...self-serve-studio-audit-navigation.spec.js | 72 + .../unit/self-serve-studio-task-scope.spec.js | 172 +- ...lf-serve-studio-vehicle-type-scope.spec.js | 66 +- .../self-serve-tasks-payload-contract.spec.js | 11 + tests/unit/self-serve-try-modal.spec.js | 4 +- 14 files changed, 3008 insertions(+), 339 deletions(-) create mode 100644 src/components/session/token/SessionUser/Objects/selfServeTaskButtons.js create mode 100644 src/views/dashboards/departmentDashboard/modules/self-serve/auditIssueNavigation.js create mode 100644 tests/e2e/self-serve-studio-audit-navigation.spec.js create mode 100644 tests/unit/self-serve-studio-audit-navigation.spec.js diff --git a/src/components/displays/department/tables/SelfServeTasksTable.vue b/src/components/displays/department/tables/SelfServeTasksTable.vue index 78b2b68c..8f70e2e3 100644 --- a/src/components/displays/department/tables/SelfServeTasksTable.vue +++ b/src/components/displays/department/tables/SelfServeTasksTable.vue @@ -8,6 +8,10 @@ const { loadList, loadSwitch, metaCurrentPage, metaItemsPerPage, setList } = use import { SessionUser } from "@/components/session/token/SessionUser.vue"; import { ref, watch } from "vue"; import SelfServeTaskAttachmentsModal from "@/components/displays/department/tables/SelfServeTaskAttachmentsModal.vue"; +import { + SELF_SERVE_TASK_BUTTON_OPTIONS, + normalizeSelfServeTaskButtons, +} from "@/components/session/token/SessionUser/Objects/selfServeTaskButtons.js"; // Define the props const props = defineProps({ @@ -36,24 +40,15 @@ const closeAttachmentsModal = () => { const editButtonsFunction = (id, column, value, onAfterSubmit) => { editingButtonsId.value = id; - try { - const parsed = JSON.stringify(value); - if (Array.isArray(parsed)) { - currentButtonsSelection.value = parsed; - } else { - console.warn('Parsed buttons value is not an array:', parsed); - currentButtonsSelection.value = []; - } - } catch (e) { - console.warn('Error parsing buttons value:', e); - currentButtonsSelection.value = []; - } + currentButtonsSelection.value = normalizeSelfServeTaskButtons(value); showButtonsEditModal.value = true; }; const saveButtonsEdit = async () => { - console.warn('Saving buttons with selection:', currentButtonsSelection.value); - await SessionUser.objects.self_serve_tasks.set.buttons(editingButtonsId.value, currentButtonsSelection.value); + await SessionUser.objects.self_serve_tasks.set.buttons( + editingButtonsId.value, + normalizeSelfServeTaskButtons(currentButtonsSelection.value) + ); showButtonsEditModal.value = false; loadList(); }; @@ -237,15 +232,15 @@ const getScopeLabel = (object) => {