From c30b172a74423ccd8a78411e9682dd063c6d3e95 Mon Sep 17 00:00:00 2001 From: Fan Pei Date: Wed, 18 Oct 2023 22:54:37 +0900 Subject: [PATCH 01/29] chore: Migrate @ui/mixins to composables --- .../ui/composables/useDisableScroll.ts | 29 ++++++++++++++++ .../components/ui/composables/useDisabled.ts | 34 +++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 packages/app-frontend/src/features/components/ui/composables/useDisableScroll.ts create mode 100644 packages/app-frontend/src/features/components/ui/composables/useDisabled.ts diff --git a/packages/app-frontend/src/features/components/ui/composables/useDisableScroll.ts b/packages/app-frontend/src/features/components/ui/composables/useDisableScroll.ts new file mode 100644 index 000000000..56c1c21e2 --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/composables/useDisableScroll.ts @@ -0,0 +1,29 @@ +import { onBeforeUnmount, onMounted } from 'vue' + +let count = 0 + +function getScrollingElements () { + return document.querySelectorAll('.vue-ui-disable-scroll, body') +} + +function updateScroll () { + if (count === 0) { + getScrollingElements().forEach((el) => + el.classList.remove('vue-ui-no-scroll'), + ) + } else if (count === 1) { + getScrollingElements().forEach((el) => el.classList.add('vue-ui-no-scroll')) + } +} + +export function useDisableScroll () { + onMounted(() => { + count++ + updateScroll() + }) + + onBeforeUnmount(() => { + count-- + updateScroll() + }) +} diff --git a/packages/app-frontend/src/features/components/ui/composables/useDisabled.ts b/packages/app-frontend/src/features/components/ui/composables/useDisabled.ts new file mode 100644 index 000000000..81132f843 --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/composables/useDisabled.ts @@ -0,0 +1,34 @@ +/** + * (Use with the DisabledChild mixin) + * Allow disabling an entire tree of components implementing the DisabledChild mixin. + */ + +import { provide, reactive, watch, inject, computed } from 'vue' + +export const useDisabledParent = (props: { disabled?: boolean }) => { + const injectedDisableData = reactive({ + value: props.disabled || false, + }) + + provide('VueDisableMixin', { + data: injectedDisableData, + }) + + watch( + () => props.disabled, + (value, oldValue) => { + if (value !== oldValue) injectedDisableData.value = value + }, + ) +} + +export const useDisabledChild = (props: { disabled?: boolean }) => { + const injectDisable = inject<{ data: { value: boolean } } | undefined>( + 'VueDisableMixin', + null, + ) + + return { + finalDisabled: computed(() => props.disabled || (injectDisable && injectDisable.data.value)), + } +} From 28697ded58fd0294430c24c06159176c9e154de2 Mon Sep 17 00:00:00 2001 From: Fan Pei Date: Wed, 18 Oct 2023 22:55:26 +0900 Subject: [PATCH 02/29] chore: Migrate @ui/components to setup syntax --- .../components/ui/components/VueButton.vue | 108 +++++ .../components/ui/components/VueDisable.vue | 48 ++ .../components/ui/components/VueDropdown.vue | 196 ++++++++ .../ui/components/VueDropdownButton.vue | 13 + .../components/ui/components/VueFormField.vue | 94 ++++ .../components/ui/components/VueGroup.vue | 131 ++++++ .../ui/components/VueGroupButton.vue | 55 +++ .../components/ui/components/VueIcon.vue | 20 + .../components/ui/components/VueInput.vue | 429 ++++++++++++++++++ .../ui/components/VueLoadingBar.vue | 26 ++ .../ui/components/VueLoadingIndicator.vue | 6 + .../components/ui/components/VueModal.vue | 96 ++++ .../components/ui/components/VueSelect.vue | 81 ++++ .../ui/components/VueSelectButton.vue | 52 +++ .../components/ui/components/VueSwitch.vue | 83 ++++ 15 files changed, 1438 insertions(+) create mode 100644 packages/app-frontend/src/features/components/ui/components/VueButton.vue create mode 100644 packages/app-frontend/src/features/components/ui/components/VueDisable.vue create mode 100644 packages/app-frontend/src/features/components/ui/components/VueDropdown.vue create mode 100644 packages/app-frontend/src/features/components/ui/components/VueDropdownButton.vue create mode 100644 packages/app-frontend/src/features/components/ui/components/VueFormField.vue create mode 100644 packages/app-frontend/src/features/components/ui/components/VueGroup.vue create mode 100644 packages/app-frontend/src/features/components/ui/components/VueGroupButton.vue create mode 100644 packages/app-frontend/src/features/components/ui/components/VueIcon.vue create mode 100644 packages/app-frontend/src/features/components/ui/components/VueInput.vue create mode 100644 packages/app-frontend/src/features/components/ui/components/VueLoadingBar.vue create mode 100644 packages/app-frontend/src/features/components/ui/components/VueLoadingIndicator.vue create mode 100644 packages/app-frontend/src/features/components/ui/components/VueModal.vue create mode 100644 packages/app-frontend/src/features/components/ui/components/VueSelect.vue create mode 100644 packages/app-frontend/src/features/components/ui/components/VueSelectButton.vue create mode 100644 packages/app-frontend/src/features/components/ui/components/VueSwitch.vue diff --git a/packages/app-frontend/src/features/components/ui/components/VueButton.vue b/packages/app-frontend/src/features/components/ui/components/VueButton.vue new file mode 100644 index 000000000..71018c81e --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/components/VueButton.vue @@ -0,0 +1,108 @@ + + + diff --git a/packages/app-frontend/src/features/components/ui/components/VueDisable.vue b/packages/app-frontend/src/features/components/ui/components/VueDisable.vue new file mode 100644 index 000000000..5d27b56a7 --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/components/VueDisable.vue @@ -0,0 +1,48 @@ + + + diff --git a/packages/app-frontend/src/features/components/ui/components/VueDropdown.vue b/packages/app-frontend/src/features/components/ui/components/VueDropdown.vue new file mode 100644 index 000000000..41a553da8 --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/components/VueDropdown.vue @@ -0,0 +1,196 @@ + + + diff --git a/packages/app-frontend/src/features/components/ui/components/VueDropdownButton.vue b/packages/app-frontend/src/features/components/ui/components/VueDropdownButton.vue new file mode 100644 index 000000000..ecbd0fbb1 --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/components/VueDropdownButton.vue @@ -0,0 +1,13 @@ + + + diff --git a/packages/app-frontend/src/features/components/ui/components/VueFormField.vue b/packages/app-frontend/src/features/components/ui/components/VueFormField.vue new file mode 100644 index 000000000..76437aba0 --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/components/VueFormField.vue @@ -0,0 +1,94 @@ + + + diff --git a/packages/app-frontend/src/features/components/ui/components/VueGroup.vue b/packages/app-frontend/src/features/components/ui/components/VueGroup.vue new file mode 100644 index 000000000..abdb619ba --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/components/VueGroup.vue @@ -0,0 +1,131 @@ + + + diff --git a/packages/app-frontend/src/features/components/ui/components/VueGroupButton.vue b/packages/app-frontend/src/features/components/ui/components/VueGroupButton.vue new file mode 100644 index 000000000..ae922798a --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/components/VueGroupButton.vue @@ -0,0 +1,55 @@ + + + diff --git a/packages/app-frontend/src/features/components/ui/components/VueIcon.vue b/packages/app-frontend/src/features/components/ui/components/VueIcon.vue new file mode 100644 index 000000000..e780e07ad --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/components/VueIcon.vue @@ -0,0 +1,20 @@ + + + diff --git a/packages/app-frontend/src/features/components/ui/components/VueInput.vue b/packages/app-frontend/src/features/components/ui/components/VueInput.vue new file mode 100644 index 000000000..d3df00326 --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/components/VueInput.vue @@ -0,0 +1,429 @@ + + + + + diff --git a/packages/app-frontend/src/features/components/ui/components/VueLoadingBar.vue b/packages/app-frontend/src/features/components/ui/components/VueLoadingBar.vue new file mode 100644 index 000000000..f92413475 --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/components/VueLoadingBar.vue @@ -0,0 +1,26 @@ + + + diff --git a/packages/app-frontend/src/features/components/ui/components/VueLoadingIndicator.vue b/packages/app-frontend/src/features/components/ui/components/VueLoadingIndicator.vue new file mode 100644 index 000000000..751b25232 --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/components/VueLoadingIndicator.vue @@ -0,0 +1,6 @@ + diff --git a/packages/app-frontend/src/features/components/ui/components/VueModal.vue b/packages/app-frontend/src/features/components/ui/components/VueModal.vue new file mode 100644 index 000000000..2f6cdc732 --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/components/VueModal.vue @@ -0,0 +1,96 @@ + + + diff --git a/packages/app-frontend/src/features/components/ui/components/VueSelect.vue b/packages/app-frontend/src/features/components/ui/components/VueSelect.vue new file mode 100644 index 000000000..710aaac66 --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/components/VueSelect.vue @@ -0,0 +1,81 @@ + + + + \ No newline at end of file diff --git a/packages/app-frontend/src/features/components/ui/components/VueSelectButton.vue b/packages/app-frontend/src/features/components/ui/components/VueSelectButton.vue new file mode 100644 index 000000000..36cfcfe0c --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/components/VueSelectButton.vue @@ -0,0 +1,52 @@ + + + diff --git a/packages/app-frontend/src/features/components/ui/components/VueSwitch.vue b/packages/app-frontend/src/features/components/ui/components/VueSwitch.vue new file mode 100644 index 000000000..30b1691a0 --- /dev/null +++ b/packages/app-frontend/src/features/components/ui/components/VueSwitch.vue @@ -0,0 +1,83 @@ + + + From 045da44fcd108d7acef6bcbd4f28cddfb9a3e026 Mon Sep 17 00:00:00 2001 From: Fan Pei Date: Wed, 18 Oct 2023 23:33:25 +0900 Subject: [PATCH 03/29] chore: Migrate useRoute(r) / Vue.set --- .../src/features/apps/AppSelect.vue | 2 +- .../src/features/apps/AppSelectPane.vue | 2 +- .../app-frontend/src/features/apps/index.ts | 6 ++-- .../components/composable/components.ts | 32 +++++++++---------- .../features/timeline/TimelineEventList.vue | 10 +++--- .../features/timeline/composable/layers.ts | 14 ++++---- packages/app-frontend/src/util/router.ts | 10 ------ 7 files changed, 32 insertions(+), 44 deletions(-) delete mode 100644 packages/app-frontend/src/util/router.ts diff --git a/packages/app-frontend/src/features/apps/AppSelect.vue b/packages/app-frontend/src/features/apps/AppSelect.vue index 72b255dfe..5b6ff267f 100644 --- a/packages/app-frontend/src/features/apps/AppSelect.vue +++ b/packages/app-frontend/src/features/apps/AppSelect.vue @@ -6,7 +6,7 @@ import { watch, defineComponent, computed } from 'vue' import { BridgeEvents, SharedData } from '@vue-devtools/shared-utils' import { useApps, pendingSelectAppId, scanLegacyApps } from '@front/features/apps' import { useOrientation } from '@front/features/layout/orientation' -import { useRouter } from '@front/util/router' +import { useRouter } from 'vue-router' import { useBridge } from '../bridge' import { useVueVersionCheck } from './vue-version-check' diff --git a/packages/app-frontend/src/features/apps/AppSelectPane.vue b/packages/app-frontend/src/features/apps/AppSelectPane.vue index 1326329fe..9581de477 100644 --- a/packages/app-frontend/src/features/apps/AppSelectPane.vue +++ b/packages/app-frontend/src/features/apps/AppSelectPane.vue @@ -4,7 +4,7 @@ import AppSelectPaneItem from './AppSelectPaneItem.vue' import { watch, defineComponent, ref, computed } from 'vue' import { BridgeEvents, SharedData } from '@vue-devtools/shared-utils' import { useApps, pendingSelectAppId, scanLegacyApps } from '@front/features/apps' -import { useRouter } from '@front/util/router' +import { useRouter } from 'vue-router' import { useBridge } from '../bridge' export default defineComponent({ diff --git a/packages/app-frontend/src/features/apps/index.ts b/packages/app-frontend/src/features/apps/index.ts index 32ae6eeab..f3a201848 100644 --- a/packages/app-frontend/src/features/apps/index.ts +++ b/packages/app-frontend/src/features/apps/index.ts @@ -1,7 +1,7 @@ import { ref, computed } from 'vue' import { BridgeEvents, Bridge } from '@vue-devtools/shared-utils' import { getBridge } from '@front/features/bridge' -import { useRoute, useRouter } from '@front/util/router' +import { useRoute, useRouter } from 'vue-router' import { fetchLayers } from '../timeline/composable' export interface AppRecord { @@ -15,7 +15,7 @@ const apps = ref([]) export function useCurrentApp () { const route = useRoute() - const currentAppId = computed(() => route.value.params.appId) + const currentAppId = computed(() => route.params.appId as string) const currentApp = computed(() => apps.value.find(a => currentAppId.value === a.id)) return { @@ -71,7 +71,7 @@ function fetchApps () { getBridge().send(BridgeEvents.TO_BACK_APP_LIST, {}) } -export const pendingSelectAppId = ref(null) +export const pendingSelectAppId = ref(null) const pendingSelectPromises: (() => void)[] = [] diff --git a/packages/app-frontend/src/features/components/composable/components.ts b/packages/app-frontend/src/features/components/composable/components.ts index 3b42cb4d2..b53042e2a 100644 --- a/packages/app-frontend/src/features/components/composable/components.ts +++ b/packages/app-frontend/src/features/components/composable/components.ts @@ -1,4 +1,4 @@ -import Vue, { ref, computed, watch, Ref, onMounted } from 'vue' +import { ref, computed, watch, Ref, onMounted } from 'vue' import { ComponentTreeNode, EditStatePayload, InspectedComponentData } from '@vue/devtools-api' import groupBy from 'lodash/groupBy' import { @@ -12,16 +12,16 @@ import { } from '@vue-devtools/shared-utils' import { getBridge, useBridge } from '@front/features/bridge' import { AppRecord, waitForAppSelect, useCurrentApp } from '@front/features/apps' -import { useRoute, useRouter } from '@front/util/router' +import { useRoute, useRouter } from 'vue-router' export const rootInstances = ref([]) export const componentsMap = ref>({}) let componentsParent: Record = {} const treeFilter = ref('') -export const selectedComponentId = ref(null) -export const selectedComponentData = ref(null) +export const selectedComponentId = ref(null) +export const selectedComponentData = ref(null) const selectedComponentStateFilter = ref('') -export const selectedComponentPendingId = ref(null) +export const selectedComponentPendingId = ref(null) let lastSelectedApp: AppRecord = null export const lastSelectedComponentId: Record = {} export const expandedMap = ref>({}) @@ -61,8 +61,8 @@ export function useComponents () { requestComponentTree() }) - watch(() => route.value.params.componentId, () => { - const value = route.value.params.componentId + watch(() => route.params.componentId, () => { + const value = route.params.componentId as string if (value && getAppIdFromComponentId(value) === currentAppId.value) { selectedComponentId.value = value loadComponent(value) @@ -197,10 +197,10 @@ export function useComponent (instance: Ref) { } export function setComponentOpen (id: ComponentTreeNode['id'], isOpen: boolean) { - Vue.set(expandedMap.value, id, isOpen) + expandedMap.value[id] = isOpen } -export function isComponentOpen (id) { +export function isComponentOpen (id: ComponentTreeNode['id']) { return !!expandedMap.value[id] } @@ -240,7 +240,7 @@ export function useSelectedComponent () { function editState (dotPath: string, payload: EditStatePayload, type?: string) { bridge.send(BridgeEvents.TO_BACK_COMPONENT_EDIT_STATE, { - instanceId: data.value.id, + instanceId: data.value?.id, dotPath, type, ...payload, @@ -249,7 +249,7 @@ export function useSelectedComponent () { function scrollToComponent () { bridge.send(BridgeEvents.TO_BACK_COMPONENT_SCROLL_TO, { - instanceId: data.value.id, + instanceId: data.value?.id, }) } @@ -278,7 +278,7 @@ export const requestedComponentTree = new Set() let requestComponentTreeRetryDelay = 500 -export async function requestComponentTree (instanceId: ComponentTreeNode['id'] = null, recursively = false) { +export async function requestComponentTree (instanceId: ComponentTreeNode['id'] | null = null, recursively = false) { if (!instanceId) { instanceId = '_root' } @@ -340,10 +340,10 @@ function updateComponentsMapData (data: ComponentTreeNode) { if (key === 'children') { if (!data.hasChildren || data.children.length) { const children = ensureComponentsMapChildren(component.id, data.children) - Vue.set(component, key, children) + component[key] = children } } else { - Vue.set(component, key, data[key]) + component[key] = data[key] } } return component @@ -413,10 +413,10 @@ export function addUpdateTrackingEvent (instanceId: string, time: number) { event.count++ event.time = time } else { - Vue.set(updateTrackingEvents.value, instanceId, { + updateTrackingEvents.value[instanceId] = { instanceId, time, count: 1, - }) + } } } diff --git a/packages/app-frontend/src/features/timeline/TimelineEventList.vue b/packages/app-frontend/src/features/timeline/TimelineEventList.vue index 3dc4a8977..044b31dd5 100644 --- a/packages/app-frontend/src/features/timeline/TimelineEventList.vue +++ b/packages/app-frontend/src/features/timeline/TimelineEventList.vue @@ -4,7 +4,7 @@ import TimelineEventListItem from './TimelineEventListItem.vue' import { computed, ref, watch, defineComponent } from 'vue' import { getStorage, setStorage } from '@vue-devtools/shared-utils' -import { useRoute, useRouter } from '@front/util/router' +import { useRoute, useRouter } from 'vue-router' import { onKeyDown } from '@front/util/keyboard' import { useInspectedEvent, useSelectedEvent, selectEvent, useLayers } from './composable' @@ -38,19 +38,19 @@ export default defineComponent({ // Tabs const tabId = computed({ - get: () => route.value.query.tabId, + get: () => route.query.tabId, set: value => { setStorage(STORAGE_TAB_ID, value) router.push({ query: { - ...route.value.query, + ...route.query, tabId: value, }, }) }, }) - if (!route.value.query.tabId) { + if (!route.query.tabId) { tabId.value = getStorage(STORAGE_TAB_ID, 'all') } @@ -239,7 +239,7 @@ export default defineComponent({ :items="filteredEvents" :item-size="itemHeight" class="flex-1" - @scroll.native.passive="onScroll()" + @scroll.passive="onScroll()" >