From 4b918602274aa9ebbcd31037c79fdf4d2fbedf52 Mon Sep 17 00:00:00 2001 From: Chenlei Hu Date: Sun, 24 Nov 2024 17:48:35 -0800 Subject: [PATCH] [Refactor] Extract SettingsPanel (#1673) * [Refactor] Extract SettingsPanel * nit --- .../dialog/content/SettingDialogContent.vue | 53 ++++++------------- .../dialog/content/setting/SettingsPanel.vue | 26 +++++++++ src/types/settingTypes.ts | 5 ++ 3 files changed, 47 insertions(+), 37 deletions(-) create mode 100644 src/components/dialog/content/setting/SettingsPanel.vue diff --git a/src/components/dialog/content/SettingDialogContent.vue b/src/components/dialog/content/SettingDialogContent.vue index a4529ac6b..b3cc69a21 100644 --- a/src/components/dialog/content/SettingDialogContent.vue +++ b/src/components/dialog/content/SettingDialogContent.vue @@ -22,35 +22,14 @@ -
- -
- +
- + @@ -94,10 +73,9 @@ import TabPanel from 'primevue/tabpanel' import Divider from 'primevue/divider' import ScrollPanel from 'primevue/scrollpanel' import { SettingTreeNode, useSettingStore } from '@/stores/settingStore' -import { SettingParams } from '@/types/settingTypes' -import SettingGroup from './setting/SettingGroup.vue' +import { ISettingGroup, SettingParams } from '@/types/settingTypes' +import SettingsPanel from './setting/SettingsPanel.vue' import SearchBox from '@/components/common/SearchBox.vue' -import NoResultsPlaceholder from '@/components/common/NoResultsPlaceholder.vue' import { flattenTree } from '@/utils/treeUtil' import AboutPanel from './setting/AboutPanel.vue' import FirstTimeUIMessage from './setting/FirstTimeUIMessage.vue' @@ -113,11 +91,6 @@ const ServerConfigPanel = defineAsyncComponent( () => import('./setting/ServerConfigPanel.vue') ) -interface ISettingGroup { - label: string - settings: SettingParams[] -} - const aboutPanelNode: SettingTreeNode = { key: 'about', label: 'About', @@ -158,8 +131,11 @@ const serverConfigPanelNodeList = computed(() => { const settingStore = useSettingStore() const settingRoot = computed(() => settingStore.settingTree) +const settingCategories = computed( + () => settingRoot.value.children ?? [] +) const categories = computed(() => [ - ...(settingRoot.value.children || []), + ...settingCategories.value, keybindingPanelNode, ...extensionPanelNodeList.value, ...serverConfigPanelNodeList.value, @@ -178,10 +154,13 @@ onMounted(() => { activeCategory.value = categories.value[0] }) -const sortedGroups = (category: SettingTreeNode) => { - return [...(category.children || [])].sort((a, b) => - a.label.localeCompare(b.label) - ) +const sortedGroups = (category: SettingTreeNode): ISettingGroup[] => { + return [...(category.children ?? [])] + .sort((a, b) => a.label.localeCompare(b.label)) + .map((group) => ({ + label: group.label, + settings: flattenTree(group) + })) } const searchQuery = ref('') diff --git a/src/components/dialog/content/setting/SettingsPanel.vue b/src/components/dialog/content/setting/SettingsPanel.vue new file mode 100644 index 000000000..b0d99c65d --- /dev/null +++ b/src/components/dialog/content/setting/SettingsPanel.vue @@ -0,0 +1,26 @@ + + + diff --git a/src/types/settingTypes.ts b/src/types/settingTypes.ts index 24ebb2ec6..1985295ce 100644 --- a/src/types/settingTypes.ts +++ b/src/types/settingTypes.ts @@ -58,3 +58,8 @@ export interface FormItem { attrs?: Record options?: Array | ((value: any) => SettingOption[]) } + +export interface ISettingGroup { + label: string + settings: SettingParams[] +}