mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-04 11:49:02 +08:00
feat: Enhance SettingsTab UI with styled select components and type safety
- Replace default Select components with StyledSelect for improved visual design - Add explicit type casting for various select onChange handlers - Improve type safety for message style, multi-model style, code style, and other settings - Introduce StyledSelect with custom styling for consistent UI appearance
This commit is contained in:
parent
91ee2ed17a
commit
4a19dbb082
@ -15,6 +15,7 @@ import { useSettings } from '@renderer/hooks/useSettings'
|
|||||||
import { SettingDivider, SettingRow, SettingRowTitle, SettingSubtitle } from '@renderer/pages/settings'
|
import { SettingDivider, SettingRow, SettingRowTitle, SettingSubtitle } from '@renderer/pages/settings'
|
||||||
import { useAppDispatch } from '@renderer/store'
|
import { useAppDispatch } from '@renderer/store'
|
||||||
import {
|
import {
|
||||||
|
SendMessageShortcut,
|
||||||
setAutoTranslateWithSpace,
|
setAutoTranslateWithSpace,
|
||||||
setCodeCollapsible,
|
setCodeCollapsible,
|
||||||
setCodeShowLineNumbers,
|
setCodeShowLineNumbers,
|
||||||
@ -32,7 +33,7 @@ import {
|
|||||||
setShowMessageDivider,
|
setShowMessageDivider,
|
||||||
setThoughtAutoCollapse
|
setThoughtAutoCollapse
|
||||||
} from '@renderer/store/settings'
|
} from '@renderer/store/settings'
|
||||||
import { Assistant, AssistantSettings, ThemeMode, TranslateLanguageVarious } from '@renderer/types'
|
import { Assistant, AssistantSettings, CodeStyleVarious, ThemeMode, TranslateLanguageVarious } from '@renderer/types'
|
||||||
import { modalConfirm } from '@renderer/utils'
|
import { modalConfirm } from '@renderer/utils'
|
||||||
import { Col, InputNumber, Row, Segmented, Select, Slider, Switch, Tooltip } from 'antd'
|
import { Col, InputNumber, Row, Segmented, Select, Slider, Switch, Tooltip } from 'antd'
|
||||||
import { FC, useEffect, useState } from 'react'
|
import { FC, useEffect, useState } from 'react'
|
||||||
@ -334,35 +335,37 @@ const SettingsTab: FC<Props> = (props) => {
|
|||||||
<SettingDivider />
|
<SettingDivider />
|
||||||
<SettingRow>
|
<SettingRow>
|
||||||
<SettingRowTitleSmall>{t('message.message.style')}</SettingRowTitleSmall>
|
<SettingRowTitleSmall>{t('message.message.style')}</SettingRowTitleSmall>
|
||||||
<Select
|
<StyledSelect
|
||||||
value={messageStyle}
|
value={messageStyle}
|
||||||
onChange={(value) => dispatch(setMessageStyle(value))}
|
onChange={(value) => dispatch(setMessageStyle(value as 'plain' | 'bubble'))}
|
||||||
style={{ width: 135 }}
|
style={{ width: 135 }}
|
||||||
size="small">
|
size="small">
|
||||||
<Select.Option value="plain">{t('message.message.style.plain')}</Select.Option>
|
<Select.Option value="plain">{t('message.message.style.plain')}</Select.Option>
|
||||||
<Select.Option value="bubble">{t('message.message.style.bubble')}</Select.Option>
|
<Select.Option value="bubble">{t('message.message.style.bubble')}</Select.Option>
|
||||||
</Select>
|
</StyledSelect>
|
||||||
</SettingRow>
|
</SettingRow>
|
||||||
<SettingDivider />
|
<SettingDivider />
|
||||||
<SettingRow>
|
<SettingRow>
|
||||||
<SettingRowTitleSmall>{t('message.message.multi_model_style')}</SettingRowTitleSmall>
|
<SettingRowTitleSmall>{t('message.message.multi_model_style')}</SettingRowTitleSmall>
|
||||||
<Select
|
<StyledSelect
|
||||||
size="small"
|
size="small"
|
||||||
value={multiModelMessageStyle}
|
value={multiModelMessageStyle}
|
||||||
onChange={(value) => dispatch(setMultiModelMessageStyle(value))}
|
onChange={(value) =>
|
||||||
|
dispatch(setMultiModelMessageStyle(value as 'fold' | 'vertical' | 'horizontal' | 'grid'))
|
||||||
|
}
|
||||||
style={{ width: 135 }}>
|
style={{ width: 135 }}>
|
||||||
<Select.Option value="fold">{t('message.message.multi_model_style.fold')}</Select.Option>
|
<Select.Option value="fold">{t('message.message.multi_model_style.fold')}</Select.Option>
|
||||||
<Select.Option value="vertical">{t('message.message.multi_model_style.vertical')}</Select.Option>
|
<Select.Option value="vertical">{t('message.message.multi_model_style.vertical')}</Select.Option>
|
||||||
<Select.Option value="horizontal">{t('message.message.multi_model_style.horizontal')}</Select.Option>
|
<Select.Option value="horizontal">{t('message.message.multi_model_style.horizontal')}</Select.Option>
|
||||||
<Select.Option value="grid">{t('message.message.multi_model_style.grid')}</Select.Option>
|
<Select.Option value="grid">{t('message.message.multi_model_style.grid')}</Select.Option>
|
||||||
</Select>
|
</StyledSelect>
|
||||||
</SettingRow>
|
</SettingRow>
|
||||||
<SettingDivider />
|
<SettingDivider />
|
||||||
<SettingRow>
|
<SettingRow>
|
||||||
<SettingRowTitleSmall>{t('message.message.code_style')}</SettingRowTitleSmall>
|
<SettingRowTitleSmall>{t('message.message.code_style')}</SettingRowTitleSmall>
|
||||||
<Select
|
<StyledSelect
|
||||||
value={codeStyle}
|
value={codeStyle}
|
||||||
onChange={(value) => dispatch(setCodeStyle(value))}
|
onChange={(value) => dispatch(setCodeStyle(value as CodeStyleVarious))}
|
||||||
style={{ width: 135 }}
|
style={{ width: 135 }}
|
||||||
size="small">
|
size="small">
|
||||||
{codeThemes.map((theme) => (
|
{codeThemes.map((theme) => (
|
||||||
@ -370,19 +373,19 @@ const SettingsTab: FC<Props> = (props) => {
|
|||||||
{theme}
|
{theme}
|
||||||
</Select.Option>
|
</Select.Option>
|
||||||
))}
|
))}
|
||||||
</Select>
|
</StyledSelect>
|
||||||
</SettingRow>
|
</SettingRow>
|
||||||
<SettingDivider />
|
<SettingDivider />
|
||||||
<SettingRow>
|
<SettingRow>
|
||||||
<SettingRowTitleSmall>{t('settings.messages.math_engine')}</SettingRowTitleSmall>
|
<SettingRowTitleSmall>{t('settings.messages.math_engine')}</SettingRowTitleSmall>
|
||||||
<Select
|
<StyledSelect
|
||||||
value={mathEngine}
|
value={mathEngine}
|
||||||
onChange={(value) => dispatch(setMathEngine(value))}
|
onChange={(value) => dispatch(setMathEngine(value as 'MathJax' | 'KaTeX'))}
|
||||||
style={{ width: 135 }}
|
style={{ width: 135 }}
|
||||||
size="small">
|
size="small">
|
||||||
<Select.Option value="KaTeX">KaTeX</Select.Option>
|
<Select.Option value="KaTeX">KaTeX</Select.Option>
|
||||||
<Select.Option value="MathJax">MathJax</Select.Option>
|
<Select.Option value="MathJax">MathJax</Select.Option>
|
||||||
</Select>
|
</StyledSelect>
|
||||||
</SettingRow>
|
</SettingRow>
|
||||||
<SettingDivider />
|
<SettingDivider />
|
||||||
<SettingRow>
|
<SettingRow>
|
||||||
@ -468,7 +471,7 @@ const SettingsTab: FC<Props> = (props) => {
|
|||||||
)}
|
)}
|
||||||
<SettingRow>
|
<SettingRow>
|
||||||
<SettingRowTitleSmall>{t('settings.input.target_language')}</SettingRowTitleSmall>
|
<SettingRowTitleSmall>{t('settings.input.target_language')}</SettingRowTitleSmall>
|
||||||
<Select
|
<StyledSelect
|
||||||
defaultValue={'english' as TranslateLanguageVarious}
|
defaultValue={'english' as TranslateLanguageVarious}
|
||||||
size="small"
|
size="small"
|
||||||
value={targetLanguage}
|
value={targetLanguage}
|
||||||
@ -480,14 +483,14 @@ const SettingsTab: FC<Props> = (props) => {
|
|||||||
{ value: 'japanese', label: t('settings.input.target_language.japanese') },
|
{ value: 'japanese', label: t('settings.input.target_language.japanese') },
|
||||||
{ value: 'russian', label: t('settings.input.target_language.russian') }
|
{ value: 'russian', label: t('settings.input.target_language.russian') }
|
||||||
]}
|
]}
|
||||||
onChange={(value) => setTargetLanguage(value)}
|
onChange={(value) => setTargetLanguage(value as TranslateLanguageVarious)}
|
||||||
style={{ width: 135 }}
|
style={{ width: 135 }}
|
||||||
/>
|
/>
|
||||||
</SettingRow>
|
</SettingRow>
|
||||||
<SettingDivider />
|
<SettingDivider />
|
||||||
<SettingRow>
|
<SettingRow>
|
||||||
<SettingRowTitleSmall>{t('settings.messages.input.send_shortcuts')}</SettingRowTitleSmall>
|
<SettingRowTitleSmall>{t('settings.messages.input.send_shortcuts')}</SettingRowTitleSmall>
|
||||||
<Select
|
<StyledSelect
|
||||||
size="small"
|
size="small"
|
||||||
value={sendMessageShortcut}
|
value={sendMessageShortcut}
|
||||||
menuItemSelectedIcon={<CheckOutlined />}
|
menuItemSelectedIcon={<CheckOutlined />}
|
||||||
@ -497,7 +500,7 @@ const SettingsTab: FC<Props> = (props) => {
|
|||||||
{ value: 'Ctrl+Enter', label: 'Ctrl + Enter' },
|
{ value: 'Ctrl+Enter', label: 'Ctrl + Enter' },
|
||||||
{ value: 'Command+Enter', label: `${isMac ? '⌘' : isWindows ? 'Win' : 'Super'} + Enter` }
|
{ value: 'Command+Enter', label: `${isMac ? '⌘' : isWindows ? 'Win' : 'Super'} + Enter` }
|
||||||
]}
|
]}
|
||||||
onChange={(value) => setSendMessageShortcut(value)}
|
onChange={(value) => setSendMessageShortcut(value as SendMessageShortcut)}
|
||||||
style={{ width: 135 }}
|
style={{ width: 135 }}
|
||||||
/>
|
/>
|
||||||
</SettingRow>
|
</SettingRow>
|
||||||
@ -561,4 +564,12 @@ const SegmentedContainer = styled.div`
|
|||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
|
const StyledSelect = styled(Select)`
|
||||||
|
.ant-select-selector {
|
||||||
|
border-radius: 15px !important;
|
||||||
|
padding: 4px 10px !important;
|
||||||
|
height: 26px !important;
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
export default SettingsTab
|
export default SettingsTab
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user