From 076dda0d52a0e8afbcb4f76b83af4a1bc12d2361 Mon Sep 17 00:00:00 2001 From: userquin Date: Mon, 17 Jun 2024 13:00:32 +0200 Subject: [PATCH 01/25] feat(ui): replace navigation tree with test explorer --- packages/runner/src/utils/tasks.ts | 2 +- packages/ui/client/auto-imports.d.ts | 16 - packages/ui/client/components.d.ts | 7 +- .../ui/client/components/FilterStatus.vue | 33 ++ packages/ui/client/components/IconButton.vue | 2 +- packages/ui/client/components/Navigation.vue | 67 ++-- packages/ui/client/components/ProgressBar.vue | 27 +- packages/ui/client/components/TaskItem.vue | 120 ------ packages/ui/client/components/TaskTree.vue | 94 ----- packages/ui/client/components/TasksList.vue | 243 ------------ .../components/dashboard/TestFilesEntry.vue | 45 +-- .../components/dashboard/TestsEntry.vue | 40 +- .../client/components/explorer/Explorer.vue | 224 +++++++++++ .../components/explorer/ExplorerItem.vue | 117 ++++++ .../client/components/explorer/TaskItem.vue | 102 +++++ .../ui/client/composables/client/index.ts | 88 +++-- .../ui/client/composables/client/state.ts | 7 + .../client/composables/explorer/collapse.ts | 109 +++++ .../client/composables/explorer/collector.ts | 371 ++++++++++++++++++ .../ui/client/composables/explorer/expand.ts | 156 ++++++++ .../ui/client/composables/explorer/filter.ts | 222 +++++++++++ .../ui/client/composables/explorer/index.ts | 3 + .../ui/client/composables/explorer/search.ts | 107 +++++ .../ui/client/composables/explorer/state.ts | 89 +++++ .../ui/client/composables/explorer/tree.ts | 185 +++++++++ .../ui/client/composables/explorer/types.ts | 91 +++++ .../ui/client/composables/explorer/utils.ts | 185 +++++++++ packages/ui/client/composables/navigation.ts | 9 +- packages/ui/client/composables/summary.ts | 109 ----- packages/ui/client/utils/task.ts | 7 + packages/ui/package.json | 3 +- packages/ui/vite.config.ts | 6 +- packages/ws-client/src/index.ts | 8 +- pnpm-lock.yaml | 27 +- test/browser/package.json | 1 + test/core/test/tab-effect.spec.mjs | 1 - 36 files changed, 2187 insertions(+), 736 deletions(-) create mode 100644 packages/ui/client/components/FilterStatus.vue delete mode 100644 packages/ui/client/components/TaskItem.vue delete mode 100644 packages/ui/client/components/TaskTree.vue delete mode 100644 packages/ui/client/components/TasksList.vue create mode 100644 packages/ui/client/components/explorer/Explorer.vue create mode 100644 packages/ui/client/components/explorer/ExplorerItem.vue create mode 100644 packages/ui/client/components/explorer/TaskItem.vue create mode 100644 packages/ui/client/composables/client/state.ts create mode 100644 packages/ui/client/composables/explorer/collapse.ts create mode 100644 packages/ui/client/composables/explorer/collector.ts create mode 100644 packages/ui/client/composables/explorer/expand.ts create mode 100644 packages/ui/client/composables/explorer/filter.ts create mode 100644 packages/ui/client/composables/explorer/index.ts create mode 100644 packages/ui/client/composables/explorer/search.ts create mode 100644 packages/ui/client/composables/explorer/state.ts create mode 100644 packages/ui/client/composables/explorer/tree.ts create mode 100644 packages/ui/client/composables/explorer/types.ts create mode 100644 packages/ui/client/composables/explorer/utils.ts delete mode 100644 packages/ui/client/composables/summary.ts diff --git a/packages/runner/src/utils/tasks.ts b/packages/runner/src/utils/tasks.ts index 82f25919cd63..50ac4cedc43d 100644 --- a/packages/runner/src/utils/tasks.ts +++ b/packages/runner/src/utils/tasks.ts @@ -1,7 +1,7 @@ import { type Arrayable, toArray } from '@vitest/utils' import type { Custom, Suite, Task, Test } from '../types' -function isAtomTest(s: Task): s is Test | Custom { +export function isAtomTest(s: Task): s is Test | Custom { return s.type === 'test' || s.type === 'custom' } diff --git a/packages/ui/client/auto-imports.d.ts b/packages/ui/client/auto-imports.d.ts index d0043d4d004e..b9f6880e6219 100644 --- a/packages/ui/client/auto-imports.d.ts +++ b/packages/ui/client/auto-imports.d.ts @@ -46,14 +46,6 @@ declare global { const eagerComputed: typeof import('@vueuse/core')['eagerComputed'] const effectScope: typeof import('vue')['effectScope'] const extendRef: typeof import('@vueuse/core')['extendRef'] - const filesFailed: typeof import('./composables/summary')['filesFailed'] - const filesIgnore: typeof import('./composables/summary')['filesIgnore'] - const filesRunning: typeof import('./composables/summary')['filesRunning'] - const filesSkipped: typeof import('./composables/summary')['filesSkipped'] - const filesSnapshotFailed: typeof import('./composables/summary')['filesSnapshotFailed'] - const filesSuccess: typeof import('./composables/summary')['filesSuccess'] - const filesTodo: typeof import('./composables/summary')['filesTodo'] - const finished: typeof import('./composables/summary')['finished'] const getCurrentBrowserIframe: typeof import('./composables/api')['getCurrentBrowserIframe'] const getCurrentInstance: typeof import('vue')['getCurrentInstance'] const getCurrentScope: typeof import('vue')['getCurrentScope'] @@ -128,22 +120,14 @@ declare global { const syncRef: typeof import('@vueuse/core')['syncRef'] const syncRefs: typeof import('@vueuse/core')['syncRefs'] const templateRef: typeof import('@vueuse/core')['templateRef'] - const tests: typeof import('./composables/summary')['tests'] - const testsFailed: typeof import('./composables/summary')['testsFailed'] - const testsIgnore: typeof import('./composables/summary')['testsIgnore'] - const testsSkipped: typeof import('./composables/summary')['testsSkipped'] - const testsSuccess: typeof import('./composables/summary')['testsSuccess'] - const testsTodo: typeof import('./composables/summary')['testsTodo'] const throttledRef: typeof import('@vueuse/core')['throttledRef'] const throttledWatch: typeof import('@vueuse/core')['throttledWatch'] - const time: typeof import('./composables/summary')['time'] const toRaw: typeof import('vue')['toRaw'] const toReactive: typeof import('@vueuse/core')['toReactive'] const toRef: typeof import('vue')['toRef'] const toRefs: typeof import('vue')['toRefs'] const toValue: typeof import('vue')['toValue'] const toggleDark: typeof import('./composables/dark')['toggleDark'] - const totalTests: typeof import('./composables/summary')['totalTests'] const triggerRef: typeof import('vue')['triggerRef'] const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount'] const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount'] diff --git a/packages/ui/client/components.d.ts b/packages/ui/client/components.d.ts index 235bcb312dea..c8c25c1ad1bb 100644 --- a/packages/ui/client/components.d.ts +++ b/packages/ui/client/components.d.ts @@ -15,7 +15,10 @@ declare module 'vue' { DashboardEntry: typeof import('./components/dashboard/DashboardEntry.vue')['default'] DetailsPanel: typeof import('./components/DetailsPanel.vue')['default'] ErrorEntry: typeof import('./components/dashboard/ErrorEntry.vue')['default'] + Explorer: typeof import('./components/explorer/Explorer.vue')['default'] + ExplorerItem: typeof import('./components/explorer/ExplorerItem.vue')['default'] FileDetails: typeof import('./components/FileDetails.vue')['default'] + FilterStatus: typeof import('./components/FilterStatus.vue')['default'] IconAction: typeof import('./components/IconAction.vue')['default'] IconButton: typeof import('./components/IconButton.vue')['default'] Modal: typeof import('./components/Modal.vue')['default'] @@ -25,9 +28,7 @@ declare module 'vue' { RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] StatusIcon: typeof import('./components/StatusIcon.vue')['default'] - TaskItem: typeof import('./components/TaskItem.vue')['default'] - TasksList: typeof import('./components/TasksList.vue')['default'] - TaskTree: typeof import('./components/TaskTree.vue')['default'] + TaskItem: typeof import('./components/explorer/TaskItem.vue')['default'] TestFilesEntry: typeof import('./components/dashboard/TestFilesEntry.vue')['default'] TestsEntry: typeof import('./components/dashboard/TestsEntry.vue')['default'] TestsFilesContainer: typeof import('./components/dashboard/TestsFilesContainer.vue')['default'] diff --git a/packages/ui/client/components/FilterStatus.vue b/packages/ui/client/components/FilterStatus.vue new file mode 100644 index 000000000000..449731967dab --- /dev/null +++ b/packages/ui/client/components/FilterStatus.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/packages/ui/client/components/IconButton.vue b/packages/ui/client/components/IconButton.vue index 1e4794b6347a..123d59dc600a 100644 --- a/packages/ui/client/components/IconButton.vue +++ b/packages/ui/client/components/IconButton.vue @@ -18,7 +18,7 @@ defineProps<{ class="w-1.4em h-1.4em flex" :class="[{ 'bg-gray-500:35 op100': active }]" > -
+ diff --git a/packages/ui/client/components/Navigation.vue b/packages/ui/client/components/Navigation.vue index 920649c65ac9..55f21c9a5580 100644 --- a/packages/ui/client/components/Navigation.vue +++ b/packages/ui/client/components/Navigation.vue @@ -1,5 +1,4 @@