mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-08 22:39:36 +08:00
refactor(translate): migrate auto copy preference setting to usePreference
Move auto copy setting from redux store to preference system for better consistency
This commit is contained in:
parent
9ebe4801f4
commit
2bd5f39740
@ -395,6 +395,8 @@ export interface PreferenceSchemas {
|
|||||||
'topic.tab.show': boolean
|
'topic.tab.show': boolean
|
||||||
// redux/settings/showTopicTime
|
// redux/settings/showTopicTime
|
||||||
'topic.tab.show_time': boolean
|
'topic.tab.show_time': boolean
|
||||||
|
// redux/translate/settings
|
||||||
|
'translate.settings.auto_copy': boolean
|
||||||
// redux/settings/customCss
|
// redux/settings/customCss
|
||||||
'ui.custom_css': string
|
'ui.custom_css': string
|
||||||
// redux/settings/navbarPosition
|
// redux/settings/navbarPosition
|
||||||
@ -654,6 +656,7 @@ export const DefaultPreferences: PreferenceSchemas = {
|
|||||||
'topic.tab.pin_to_top': false,
|
'topic.tab.pin_to_top': false,
|
||||||
'topic.tab.show': true,
|
'topic.tab.show': true,
|
||||||
'topic.tab.show_time': false,
|
'topic.tab.show_time': false,
|
||||||
|
'translate.settings.auto_copy': false,
|
||||||
'ui.custom_css': '',
|
'ui.custom_css': '',
|
||||||
'ui.navbar.position': 'top',
|
'ui.navbar.position': 'top',
|
||||||
'ui.sidebar.icons.invisible': [],
|
'ui.sidebar.icons.invisible': [],
|
||||||
|
|||||||
@ -1,14 +1,10 @@
|
|||||||
import { usePreference } from '@data/hooks/usePreference'
|
import { usePreference } from '@data/hooks/usePreference'
|
||||||
import { loggerService } from '@logger'
|
import { loggerService } from '@logger'
|
||||||
import { builtinLanguages, UNKNOWN } from '@renderer/config/translate'
|
import { builtinLanguages, UNKNOWN } from '@renderer/config/translate'
|
||||||
import { useAppSelector } from '@renderer/store'
|
|
||||||
import type { TranslateState } from '@renderer/store/translate'
|
|
||||||
import { updateSettings } from '@renderer/store/translate'
|
|
||||||
import type { TranslateLanguage } from '@renderer/types'
|
import type { TranslateLanguage } from '@renderer/types'
|
||||||
import { runAsyncFunction } from '@renderer/utils'
|
import { runAsyncFunction } from '@renderer/utils'
|
||||||
import { getTranslateOptions } from '@renderer/utils/translate'
|
import { getTranslateOptions } from '@renderer/utils/translate'
|
||||||
import { useCallback, useEffect, useState } from 'react'
|
import { useCallback, useEffect, useState } from 'react'
|
||||||
import { useDispatch } from 'react-redux'
|
|
||||||
|
|
||||||
const logger = loggerService.withContext('useTranslate')
|
const logger = loggerService.withContext('useTranslate')
|
||||||
|
|
||||||
@ -21,12 +17,9 @@ const logger = loggerService.withContext('useTranslate')
|
|||||||
*/
|
*/
|
||||||
export default function useTranslate() {
|
export default function useTranslate() {
|
||||||
const [prompt] = usePreference('feature.translate.model_prompt')
|
const [prompt] = usePreference('feature.translate.model_prompt')
|
||||||
const settings = useAppSelector((state) => state.translate.settings)
|
|
||||||
const [translateLanguages, setTranslateLanguages] = useState<TranslateLanguage[]>(builtinLanguages)
|
const [translateLanguages, setTranslateLanguages] = useState<TranslateLanguage[]>(builtinLanguages)
|
||||||
const [isLoaded, setIsLoaded] = useState(false)
|
const [isLoaded, setIsLoaded] = useState(false)
|
||||||
|
|
||||||
const dispatch = useDispatch()
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
runAsyncFunction(async () => {
|
runAsyncFunction(async () => {
|
||||||
const options = await getTranslateOptions()
|
const options = await getTranslateOptions()
|
||||||
@ -53,18 +46,9 @@ export default function useTranslate() {
|
|||||||
[isLoaded, translateLanguages]
|
[isLoaded, translateLanguages]
|
||||||
)
|
)
|
||||||
|
|
||||||
const handleUpdateSettings = useCallback(
|
|
||||||
(update: Partial<TranslateState['settings']>) => {
|
|
||||||
dispatch(updateSettings(update))
|
|
||||||
},
|
|
||||||
[dispatch]
|
|
||||||
)
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
prompt,
|
prompt,
|
||||||
settings,
|
|
||||||
translateLanguages,
|
translateLanguages,
|
||||||
getLanguageByLangcode,
|
getLanguageByLangcode
|
||||||
updateSettings: handleUpdateSettings
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import { PlusOutlined, SendOutlined, SwapOutlined } from '@ant-design/icons'
|
import { PlusOutlined, SendOutlined, SwapOutlined } from '@ant-design/icons'
|
||||||
import { Button, Flex, Tooltip } from '@cherrystudio/ui'
|
import { Button, Flex, Tooltip } from '@cherrystudio/ui'
|
||||||
import { useCache } from '@data/hooks/useCache'
|
import { useCache } from '@data/hooks/useCache'
|
||||||
|
import { usePreference } from '@data/hooks/usePreference'
|
||||||
import { loggerService } from '@logger'
|
import { loggerService } from '@logger'
|
||||||
import { Navbar, NavbarCenter } from '@renderer/components/app/Navbar'
|
import { Navbar, NavbarCenter } from '@renderer/components/app/Navbar'
|
||||||
import { CopyIcon } from '@renderer/components/Icons'
|
import { CopyIcon } from '@renderer/components/Icons'
|
||||||
@ -63,8 +64,8 @@ const TranslatePage: FC = () => {
|
|||||||
// hooks
|
// hooks
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
const { translateModel, setTranslateModel } = useDefaultModel()
|
const { translateModel, setTranslateModel } = useDefaultModel()
|
||||||
const { prompt, getLanguageByLangcode, settings } = useTranslate()
|
const { prompt, getLanguageByLangcode } = useTranslate()
|
||||||
const { autoCopy } = settings
|
const [autoCopy] = usePreference('translate.settings.auto_copy')
|
||||||
const { shikiMarkdownIt } = useCodeStyle()
|
const { shikiMarkdownIt } = useCodeStyle()
|
||||||
const { onSelectFile, selecting, clearFiles } = useFiles({ extensions: [...imageExts, ...textExts] })
|
const { onSelectFile, selecting, clearFiles } = useFiles({ extensions: [...imageExts, ...textExts] })
|
||||||
const { ocr } = useOcr()
|
const { ocr } = useOcr()
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import { Button, ColFlex, Flex, HelpTooltip, RowFlex, Switch, Tooltip } from '@cherrystudio/ui'
|
import { Button, ColFlex, Flex, HelpTooltip, RowFlex, Switch, Tooltip } from '@cherrystudio/ui'
|
||||||
|
import { usePreference } from '@data/hooks/usePreference'
|
||||||
import LanguageSelect from '@renderer/components/LanguageSelect'
|
import LanguageSelect from '@renderer/components/LanguageSelect'
|
||||||
import db from '@renderer/databases'
|
import db from '@renderer/databases'
|
||||||
import useTranslate from '@renderer/hooks/useTranslate'
|
import useTranslate from '@renderer/hooks/useTranslate'
|
||||||
@ -41,8 +42,8 @@ const TranslateSettings: FC<{
|
|||||||
}) => {
|
}) => {
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
const [localPair, setLocalPair] = useState<[TranslateLanguage, TranslateLanguage]>(bidirectionalPair)
|
const [localPair, setLocalPair] = useState<[TranslateLanguage, TranslateLanguage]>(bidirectionalPair)
|
||||||
const { getLanguageByLangcode, settings, updateSettings } = useTranslate()
|
const { getLanguageByLangcode } = useTranslate()
|
||||||
const { autoCopy } = settings
|
const [autoCopy, setAutoCopy] = usePreference('translate.settings.auto_copy')
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setLocalPair(bidirectionalPair)
|
setLocalPair(bidirectionalPair)
|
||||||
@ -83,7 +84,7 @@ const TranslateSettings: FC<{
|
|||||||
isSelected={autoCopy}
|
isSelected={autoCopy}
|
||||||
color="primary"
|
color="primary"
|
||||||
onValueChange={(isSelected) => {
|
onValueChange={(isSelected) => {
|
||||||
updateSettings({ autoCopy: isSelected })
|
setAutoCopy(isSelected)
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</RowFlex>
|
</RowFlex>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user