From 744f0a0f423d414f2483564c272fbe7368969a0a Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Fri, 15 May 2026 12:37:00 +0300 Subject: [PATCH] refactor(vue): use test id directive --- packages/vue/src/index.ts | 1 + packages/vue/src/testing/v-test-id.ts | 17 +++++++++++++++++ src/components/AppMenu.vue | 4 ++-- src/components/CanvasMenu.vue | 4 ++-- src/components/PickerSlider.vue | 4 ++-- src/components/Toolbar/ToolButton.vue | 4 ++-- src/components/Toolbar/ToolFlyout.vue | 6 +++--- src/components/Toolbar/ToolbarActionGroup.vue | 4 ++-- src/components/VariablesDialog.vue | 4 ++-- src/components/chat/AcpPermissionDialog.vue | 6 +++--- src/components/chat/ChatMessage.vue | 4 ++-- .../properties/BoundVariableButton.vue | 4 ++-- src/components/properties/ColorStyleRow.vue | 4 ++-- src/components/properties/EffectsSection.vue | 4 ++-- .../LayoutSection/AutoLayoutControls.vue | 4 ++-- .../properties/LayoutSection/SizeControls.vue | 5 +++-- .../properties/VariablePickerPopover.vue | 8 ++++---- src/components/ui/AppGroupedSelect.vue | 4 ++-- src/components/ui/AppSelect.vue | 4 ++-- 19 files changed, 57 insertions(+), 38 deletions(-) create mode 100644 packages/vue/src/testing/v-test-id.ts diff --git a/packages/vue/src/index.ts b/packages/vue/src/index.ts index 9b99fa01b..549b1dbf8 100644 --- a/packages/vue/src/index.ts +++ b/packages/vue/src/index.ts @@ -48,6 +48,7 @@ export { useNodeFontStatus } from '#vue/shared/font-status/use' export { usePropScrub } from '#vue/controls/prop-scrub/use' export { toolCursor } from '#vue/editor/tool-cursor' export { testId, testIdSelector } from '#vue/testing/test-id' +export { vTestId } from '#vue/testing/v-test-id' export type { RequiredTestIdProps, TestId, diff --git a/packages/vue/src/testing/v-test-id.ts b/packages/vue/src/testing/v-test-id.ts new file mode 100644 index 000000000..3298c3fe5 --- /dev/null +++ b/packages/vue/src/testing/v-test-id.ts @@ -0,0 +1,17 @@ +import type { Directive } from 'vue' + +import type { TestId } from './test-id' + +function applyTestId(el: HTMLElement, value?: TestId | null) { + if (value) el.setAttribute('data-test-id', value) + else el.removeAttribute('data-test-id') +} + +export const vTestId: Directive = { + mounted(el, binding) { + applyTestId(el, binding.value) + }, + updated(el, binding) { + applyTestId(el, binding.value) + } +} diff --git a/src/components/AppMenu.vue b/src/components/AppMenu.vue index 3f0387ea6..5b582373c 100644 --- a/src/components/AppMenu.vue +++ b/src/components/AppMenu.vue @@ -19,7 +19,7 @@ import { import IconChevronRight from '~icons/lucide/chevron-right' -import { testId as testIdAttr, useI18n } from '@open-pencil/vue' +import { vTestId, useI18n } from '@open-pencil/vue' import { useMenuUI } from '@/components/ui/menu' import { IS_TAURI } from '@/constants' import { useAppMenu } from '@/app/shell/menu/app-menu' @@ -91,7 +91,7 @@ const subMenuCls = useMenuUI({ content: 'min-w-44' }) {{ menu.label }} diff --git a/src/components/CanvasMenu.vue b/src/components/CanvasMenu.vue index 69fb38299..b9b0b8e67 100644 --- a/src/components/CanvasMenu.vue +++ b/src/components/CanvasMenu.vue @@ -9,7 +9,7 @@ import { ContextMenuPortal } from 'reka-ui' import { - testId as testIdAttr, + vTestId, useEditorCommands, useI18n, useMenuModel, @@ -126,7 +126,7 @@ const contextCommandTestIds: Record = { -import { inputNumberValue, testId as testIdAttr, type TestIdProps } from '@open-pencil/vue' +import { inputNumberValue, vTestId, type TestIdProps } from '@open-pencil/vue' import { usePickerSliderUI } from './ui/picker-slider' type PickerSliderDisplay = { @@ -64,7 +64,7 @@ function thumbLeft(): string {