From c055953d2df5b726e68e38b1452d6d3b4b3f262a Mon Sep 17 00:00:00 2001 From: purocean Date: Thu, 5 Sep 2024 11:33:12 +0800 Subject: [PATCH] feat: improve file path selection in Setting.vue --- src/renderer/components/Setting.vue | 13 +++++++------ src/renderer/others/setting-schema.ts | 1 + src/renderer/types.ts | 3 +++ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/renderer/components/Setting.vue b/src/renderer/components/Setting.vue index 4a81957d..0bd6898b 100644 --- a/src/renderer/components/Setting.vue +++ b/src/renderer/components/Setting.vue @@ -154,15 +154,16 @@ export default defineComponent({ const onClick = async (e: Event) => { const target = e.target as HTMLInputElement - if (target.name && target.name.endsWith('[path]')) { + if (target.tagName === 'INPUT' && target.name) { const jsonPath = target.name.replace(/\]/g, '').replace(/\[/g, '.') const field = editor.getEditor(jsonPath) - const { canceled, filePaths } = await api.choosePath({ - properties: ['openDirectory', 'createDirectory'], - }) - if (!canceled && filePaths[0]) { - field.setValue(filePaths[0]) + if (field && field.schema.openDialogOptions) { + const { canceled, filePaths } = await api.choosePath(field.schema.openDialogOptions) + + if (!canceled && filePaths[0]) { + field.setValue(filePaths[0]) + } } } } diff --git a/src/renderer/others/setting-schema.ts b/src/renderer/others/setting-schema.ts index c632c815..2332e4d4 100644 --- a/src/renderer/others/setting-schema.ts +++ b/src/renderer/others/setting-schema.ts @@ -30,6 +30,7 @@ const schema: SettingSchema = ({ path: { type: 'string', title: 'T_setting-panel.schema.repos.path', + openDialogOptions: { properties: ['openDirectory', 'createDirectory'] }, options: { inputAttributes: { placeholder: 'T_setting-panel.schema.repos.path-placeholder', style: 'cursor: pointer' } }, diff --git a/src/renderer/types.ts b/src/renderer/types.ts index b34dc8a6..5fc4c42d 100644 --- a/src/renderer/types.ts +++ b/src/renderer/types.ts @@ -1,4 +1,5 @@ import type { VNode } from 'vue' +import type { OpenDialogOptions } from 'electron' import type { Language, MsgPath } from '@share/i18n' import type { Doc, FileItem, PathItem, Repo } from '@share/types' import type MarkdownIt from 'markdown-it' @@ -29,6 +30,7 @@ export type SettingSchema = { defaultValue: BuildInSettings[K] extends any ? BuildInSettings[K] : any, enum?: string[] | number [], group: SettingGroup, + openDialogOptions?: OpenDialogOptions, needReloadWindowWhenChanged?: boolean, validator?: (schema: SettingSchema['properties'][K], value: BuildInSettings[K], path: string) => {path: string, property: K, message: string}[] @@ -43,6 +45,7 @@ export type SettingSchema = { options: { inputAttributes: { placeholder: TTitle } } + openDialogOptions?: OpenDialogOptions, } } },