feat(message): 将fold display mode的状态持久化

This commit is contained in:
Sorades 2025-03-26 12:25:23 +08:00 committed by 亢奋猫
parent cc32c36222
commit d64d6969ae
2 changed files with 18 additions and 8 deletions

View File

@ -1,9 +1,12 @@
import { ArrowsAltOutlined, ShrinkOutlined } from '@ant-design/icons'
import ModelAvatar from '@renderer/components/Avatar/ModelAvatar'
import Scrollbar from '@renderer/components/Scrollbar'
import { useSettings } from '@renderer/hooks/useSettings'
import { useAppDispatch } from '@renderer/store'
import { setFoldDisplayMode } from '@renderer/store/settings'
import { Message, Model } from '@renderer/types'
import { Avatar, Segmented as AntdSegmented, Tooltip } from 'antd'
import { FC, useState } from 'react'
import { FC } from 'react'
import { useTranslation } from 'react-i18next'
import styled from 'styled-components'
@ -15,26 +18,27 @@ interface MessageGroupModelListProps {
type DisplayMode = 'compact' | 'expanded'
const MessageGroupModelList: FC<MessageGroupModelListProps> = ({ messages, setSelectedMessage }) => {
const dispatch = useAppDispatch()
const { t } = useTranslation()
const [displayMode, setDisplayMode] = useState<DisplayMode>('expanded')
const isCompact = displayMode === 'compact'
const { foldDisplayMode } = useSettings()
const isCompact = foldDisplayMode === 'compact'
return (
<ModelsWrapper>
<DisplayModeToggle displayMode={displayMode} onClick={() => setDisplayMode(isCompact ? 'expanded' : 'compact')}>
<DisplayModeToggle displayMode={foldDisplayMode} onClick={() => dispatch(setFoldDisplayMode(isCompact ? 'expanded' : 'compact'))}>
<Tooltip
title={
displayMode === 'compact'
foldDisplayMode === 'compact'
? t(`message.message.multi_model_style.fold.expand`)
: t('message.message.multi_model_style.fold.compress')
}
placement="top">
{displayMode === 'compact' ? <ArrowsAltOutlined /> : <ShrinkOutlined />}
{foldDisplayMode === 'compact' ? <ArrowsAltOutlined /> : <ShrinkOutlined />}
</Tooltip>
</DisplayModeToggle>
<ModelsContainer $displayMode={displayMode}>
{displayMode === 'compact' ? (
<ModelsContainer $displayMode={foldDisplayMode}>
{foldDisplayMode === 'compact' ? (
/* Compact style display */
<Avatar.Group className="avatar-group">
{messages.map((message, index) => (

View File

@ -53,6 +53,7 @@ export interface SettingsState {
mathEngine: 'MathJax' | 'KaTeX'
messageStyle: 'plain' | 'bubble'
codeStyle: CodeStyleVarious
foldDisplayMode: 'expanded' | 'compact'
gridColumns: number
gridPopoverTrigger: 'hover' | 'click'
messageNavigation: 'none' | 'buttons' | 'anchor'
@ -135,6 +136,7 @@ const initialState: SettingsState = {
mathEngine: 'KaTeX',
messageStyle: 'plain',
codeStyle: 'auto',
foldDisplayMode: 'expanded',
gridColumns: 2,
gridPopoverTrigger: 'hover',
messageNavigation: 'none',
@ -295,6 +297,9 @@ const settingsSlice = createSlice({
setMathEngine: (state, action: PayloadAction<'MathJax' | 'KaTeX'>) => {
state.mathEngine = action.payload
},
setFoldDisplayMode: (state, action: PayloadAction<'expanded' | 'compact'>) => {
state.foldDisplayMode = action.payload
},
setGridColumns: (state, action: PayloadAction<number>) => {
state.gridColumns = action.payload
},
@ -446,6 +451,7 @@ export const {
setCodeCollapsible,
setCodeWrappable,
setMathEngine,
setFoldDisplayMode,
setGridColumns,
setGridPopoverTrigger,
setMessageStyle,