refactor(SettingsTab): update Selector component usage for consistency

- Simplified Selector component usage in SettingsTab by removing deprecated props and updating to the new API.
- Added size and label props to enhance accessibility and user experience.
- Ensured consistent handling of selected keys and selection change events across multiple instances of Selector.
This commit is contained in:
MyPrototypeWhat 2025-09-19 12:10:28 +08:00
parent 84274d9d85
commit d4fd8ffdcc
2 changed files with 44 additions and 36 deletions

View File

@ -37,11 +37,7 @@ const Selector = <V extends string | number>({ items, onSelectionChange, ...rest
} }
return ( return (
<Select <Select {...rest} items={items} onSelectionChange={handleSelectionChange}>
{...rest}
label={<label className="hidden">Select</label>}
items={items}
onSelectionChange={handleSelectionChange}>
{({ value, label, ...restItem }: SelectorItem<V>) => ( {({ value, label, ...restItem }: SelectorItem<V>) => (
<SelectItem {...restItem} key={value} title={String(label)}> <SelectItem {...restItem} key={value} title={String(label)}>
{label} {label}

View File

@ -1,9 +1,7 @@
import { RowFlex } from '@cherrystudio/ui' import { RowFlex, Selector, Switch } from '@cherrystudio/ui'
import { Switch } from '@cherrystudio/ui'
import { useMultiplePreferences, usePreference } from '@data/hooks/usePreference' import { useMultiplePreferences, usePreference } from '@data/hooks/usePreference'
import EditableNumber from '@renderer/components/EditableNumber' import EditableNumber from '@renderer/components/EditableNumber'
import Scrollbar from '@renderer/components/Scrollbar' import Scrollbar from '@renderer/components/Scrollbar'
import Selector from '@renderer/components/Selector'
import { HelpTooltip } from '@renderer/components/TooltipIcons' import { HelpTooltip } from '@renderer/components/TooltipIcons'
import { DEFAULT_CONTEXTCOUNT, DEFAULT_MAX_TOKENS, DEFAULT_TEMPERATURE } from '@renderer/config/constant' import { DEFAULT_CONTEXTCOUNT, DEFAULT_MAX_TOKENS, DEFAULT_TEMPERATURE } from '@renderer/config/constant'
import { isOpenAIModel } from '@renderer/config/models' import { isOpenAIModel } from '@renderer/config/models'
@ -329,11 +327,13 @@ const SettingsTab: FC<Props> = (props) => {
</SettingRow> </SettingRow>
<SettingDivider /> <SettingDivider />
<SettingRow> <SettingRow>
<SettingRowTitleSmall>{t('message.message.style.label')}</SettingRowTitleSmall> {/* <SettingRowTitleSmall>{t('message.message.style.label')}</SettingRowTitleSmall> */}
<Selector <Selector
value={messageStyle} size="sm"
onChange={(value) => setMessageStyle(value as 'plain' | 'bubble')} label={t('message.message.style.label')}
options={[ selectedKeys={[messageStyle]}
onSelectionChange={(value) => setMessageStyle(value[0] as 'plain' | 'bubble')}
items={[
{ value: 'plain', label: t('message.message.style.plain') }, { value: 'plain', label: t('message.message.style.plain') },
{ value: 'bubble', label: t('message.message.style.bubble') } { value: 'bubble', label: t('message.message.style.bubble') }
]} ]}
@ -341,11 +341,13 @@ const SettingsTab: FC<Props> = (props) => {
</SettingRow> </SettingRow>
<SettingDivider /> <SettingDivider />
<SettingRow> <SettingRow>
<SettingRowTitleSmall>{t('message.message.multi_model_style.label')}</SettingRowTitleSmall> {/* <SettingRowTitleSmall>{t('message.message.multi_model_style.label')}</SettingRowTitleSmall> */}
<Selector <Selector
value={multiModelMessageStyle} size="sm"
onChange={(value) => setMultiModelMessageStyle(value)} label={t('message.message.multi_model_style.label')}
options={[ selectedKeys={[multiModelMessageStyle]}
onSelectionChange={(value) => setMultiModelMessageStyle(value[0])}
items={[
{ value: 'fold', label: t('message.message.multi_model_style.fold.label') }, { value: 'fold', label: t('message.message.multi_model_style.fold.label') },
{ value: 'vertical', label: t('message.message.multi_model_style.vertical') }, { value: 'vertical', label: t('message.message.multi_model_style.vertical') },
{ value: 'horizontal', label: t('message.message.multi_model_style.horizontal') }, { value: 'horizontal', label: t('message.message.multi_model_style.horizontal') },
@ -355,11 +357,13 @@ const SettingsTab: FC<Props> = (props) => {
</SettingRow> </SettingRow>
<SettingDivider /> <SettingDivider />
<SettingRow> <SettingRow>
<SettingRowTitleSmall>{t('settings.messages.navigation.label')}</SettingRowTitleSmall> {/* <SettingRowTitleSmall>{t('settings.messages.navigation.label')}</SettingRowTitleSmall> */}
<Selector <Selector
value={messageNavigation} size="sm"
onChange={(value) => setMessageNavigation(value as 'none' | 'buttons' | 'anchor')} label={t('settings.messages.navigation.label')}
options={[ selectedKeys={[messageNavigation]}
onSelectionChange={(value) => setMessageNavigation(value[0] as 'none' | 'buttons' | 'anchor')}
items={[
{ value: 'none', label: t('settings.messages.navigation.none') }, { value: 'none', label: t('settings.messages.navigation.none') },
{ value: 'buttons', label: t('settings.messages.navigation.buttons') }, { value: 'buttons', label: t('settings.messages.navigation.buttons') },
{ value: 'anchor', label: t('settings.messages.navigation.anchor') } { value: 'anchor', label: t('settings.messages.navigation.anchor') }
@ -393,11 +397,13 @@ const SettingsTab: FC<Props> = (props) => {
<CollapsibleSettingGroup title={t('settings.math.title')} defaultExpanded={true}> <CollapsibleSettingGroup title={t('settings.math.title')} defaultExpanded={true}>
<SettingGroup> <SettingGroup>
<SettingRow> <SettingRow>
<SettingRowTitleSmall>{t('settings.math.engine.label')}</SettingRowTitleSmall> {/* <SettingRowTitleSmall>{t('settings.math.engine.label')}</SettingRowTitleSmall> */}
<Selector <Selector
value={mathEngine} size="sm"
onChange={(value) => setMathEngine(value as MathEngine)} label={t('settings.math.engine.label')}
options={[ selectedKeys={[mathEngine]}
onSelectionChange={(value) => setMathEngine(value[0] as MathEngine)}
items={[
{ value: 'KaTeX', label: 'KaTeX' }, { value: 'KaTeX', label: 'KaTeX' },
{ value: 'MathJax', label: 'MathJax' }, { value: 'MathJax', label: 'MathJax' },
{ value: 'none', label: t('settings.math.engine.none') } { value: 'none', label: t('settings.math.engine.none') }
@ -418,11 +424,13 @@ const SettingsTab: FC<Props> = (props) => {
<CollapsibleSettingGroup title={t('chat.settings.code.title')} defaultExpanded={true}> <CollapsibleSettingGroup title={t('chat.settings.code.title')} defaultExpanded={true}>
<SettingGroup> <SettingGroup>
<SettingRow> <SettingRow>
<SettingRowTitleSmall>{t('message.message.code_style')}</SettingRowTitleSmall> {/* <SettingRowTitleSmall>{t('message.message.code_style')}</SettingRowTitleSmall> */}
<Selector <Selector
value={codeStyle} size="sm"
onChange={(value) => onCodeStyleChange(value as CodeStyleVarious)} label={t('message.message.code_style')}
options={themeNames.map((theme) => ({ selectedKeys={[codeStyle]}
onSelectionChange={(value) => onCodeStyleChange(value[0] as CodeStyleVarious)}
items={themeNames.map((theme) => ({
value: theme, value: theme,
label: theme label: theme
}))} }))}
@ -611,23 +619,27 @@ const SettingsTab: FC<Props> = (props) => {
</SettingRow> </SettingRow>
<SettingDivider /> <SettingDivider />
<SettingRow> <SettingRow>
<SettingRowTitleSmall>{t('settings.input.target_language.label')}</SettingRowTitleSmall> {/* <SettingRowTitleSmall>{t('settings.input.target_language.label')}</SettingRowTitleSmall> */}
<Selector <Selector
value={targetLanguage} size="sm"
onChange={(value) => setTargetLanguage(value)} label={t('settings.input.target_language.label')}
selectedKeys={[targetLanguage]}
onSelectionChange={(value) => setTargetLanguage(value[0])}
placeholder={UNKNOWN.emoji + ' ' + UNKNOWN.label()} placeholder={UNKNOWN.emoji + ' ' + UNKNOWN.label()}
options={translateLanguages.map((item) => { items={translateLanguages.map((item) => {
return { value: item.langCode, label: item.emoji + ' ' + item.label() } return { value: item.langCode, label: item.emoji + ' ' + item.label() }
})} })}
/> />
</SettingRow> </SettingRow>
<SettingDivider /> <SettingDivider />
<SettingRow> <SettingRow>
<SettingRowTitleSmall>{t('settings.messages.input.send_shortcuts')}</SettingRowTitleSmall> {/* <SettingRowTitleSmall>{}</SettingRowTitleSmall> */}
<Selector <Selector
value={sendMessageShortcut} size="sm"
onChange={(value) => setSendMessageShortcut(value as SendMessageShortcut)} label={t('settings.messages.input.send_shortcuts')}
options={[ selectedKeys={[sendMessageShortcut]}
onSelectionChange={(value) => setSendMessageShortcut(value[0] as SendMessageShortcut)}
items={[
{ value: 'Enter', label: getSendMessageShortcutLabel('Enter') }, { value: 'Enter', label: getSendMessageShortcutLabel('Enter') },
{ value: 'Ctrl+Enter', label: getSendMessageShortcutLabel('Ctrl+Enter') }, { value: 'Ctrl+Enter', label: getSendMessageShortcutLabel('Ctrl+Enter') },
{ value: 'Alt+Enter', label: getSendMessageShortcutLabel('Alt+Enter') }, { value: 'Alt+Enter', label: getSendMessageShortcutLabel('Alt+Enter') },