From c7a0b0584134bafb5f51ae9fccc35b4e3d941006 Mon Sep 17 00:00:00 2001 From: one Date: Thu, 19 Jun 2025 19:23:25 +0800 Subject: [PATCH] refactor(Select): provide consistent search experience for antd Select (#7363) - Add CustomSelect for enhanced searching - Replace some Select components with CustomSelect - Fix translation language searching problem --- src/renderer/src/components/CustomSelect.tsx | 17 ++++ .../settings/ModelSettings/ModelSettings.tsx | 7 +- .../src/pages/translate/TranslatePage.tsx | 96 ++++++++++--------- 3 files changed, 73 insertions(+), 47 deletions(-) create mode 100644 src/renderer/src/components/CustomSelect.tsx diff --git a/src/renderer/src/components/CustomSelect.tsx b/src/renderer/src/components/CustomSelect.tsx new file mode 100644 index 0000000000..7b42a7bd59 --- /dev/null +++ b/src/renderer/src/components/CustomSelect.tsx @@ -0,0 +1,17 @@ +import { includeKeywords } from '@renderer/utils/search' +import { Select, SelectProps } from 'antd' + +/** + * 自定义 Select,使用增强的搜索 filter + */ +const CustomSelect = ({ ref, ...props }: SelectProps & { ref?: React.RefObject }) => { + return { -
{t('translate.settings.model')}
- setLocalPair([value, localPair[1]])} - options={translateLanguageOptions().map((lang) => ({ - value: lang.value, - label: ( - - - {lang.emoji} - - {lang.label} - - ) - }))} + options={TranslateLanguageOptions} + optionRender={(option) => ( + + + {(option.data as any).emoji} + + {option.label} + + )} suffixIcon={} /> { setTargetLanguage(value) db.settings.put({ id: 'translate:target:language', value }) }} - options={translateLanguageOptions().map((lang) => ({ - value: lang.value, - label: ( - - - {lang.emoji} - - {lang.label} - - ) - }))} + options={TranslateLanguageOptions} + optionRender={(option) => ( + + + {(option.data as any).emoji} + + {option.label} + + )} suffixIcon={} /> ) @@ -538,18 +539,25 @@ const TranslatePage: FC = () => { ? `${t('translate.detected.language')}(${t(`languages.${detectedLanguage.toLowerCase()}`)})` : t('translate.detected.language') }, - ...translateLanguageOptions().map((lang) => ({ + ...TranslateLanguageOptions.map((lang) => ({ value: lang.value, - label: ( - - - {lang.emoji} - - {lang.label} - - ) + label: lang.label, + emoji: lang.emoji })) ]} + optionRender={(option) => { + if (option.value === 'auto') { + return option.label + } + return ( + + + {(option.data as any).emoji} + + {option.label} + + ) + }} suffixIcon={} />