diff --git a/src/renderer/src/pages/home/Tabs/components/AgentItem.tsx b/src/renderer/src/pages/home/Tabs/components/AgentItem.tsx index 165ed63bd3..b26ab13ba6 100644 --- a/src/renderer/src/pages/home/Tabs/components/AgentItem.tsx +++ b/src/renderer/src/pages/home/Tabs/components/AgentItem.tsx @@ -5,12 +5,12 @@ import AgentSettingsPopup from '@renderer/pages/settings/AgentSettings/AgentSett import { AgentLabel } from '@renderer/pages/settings/AgentSettings/shared' import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' import type { AgentEntity } from '@renderer/types' -import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuTrigger } from '@renderer/ui/context-menu' import { cn } from '@renderer/utils' -import { Tooltip } from 'antd' +import type { MenuProps } from 'antd' +import { Dropdown, Tooltip } from 'antd' import { Bot } from 'lucide-react' import type { FC } from 'react' -import { memo, useCallback } from 'react' +import { memo, useCallback, useMemo } from 'react' import { useTranslation } from 'react-i18next' // const logger = loggerService.withContext('AgentItem') @@ -37,45 +37,52 @@ const AgentItem: FC = ({ agent, isActive, onDelete, onPress }) = onPress() }, [clickAssistantToShowTopic, topicPosition, onPress]) + const menuItems: MenuProps['items'] = useMemo( + () => [ + { + label: t('common.edit'), + key: 'edit', + icon: , + onClick: () => AgentSettingsPopup.show({ agentId: agent.id }) + }, + { + label: t('common.delete'), + key: 'delete', + icon: , + danger: true, + onClick: () => { + window.modal.confirm({ + title: t('agent.delete.title'), + content: t('agent.delete.content'), + centered: true, + okButtonProps: { danger: true }, + onOk: () => onDelete(agent) + }) + } + } + ], + [t, agent, onDelete] + ) + return ( - - - - - - - - {isActive && ( - - {sessions.length} - - )} - {!isActive && } - - - - - AgentSettingsPopup.show({ agentId: agent.id })}> - - {t('common.edit')} - - { - window.modal.confirm({ - title: t('agent.delete.title'), - content: t('agent.delete.content'), - centered: true, - okButtonProps: { danger: true }, - onOk: () => onDelete(agent) - }) - }}> - - {t('common.delete')} - - - +
e.stopPropagation()}>{menu}
}> + + + + + + {isActive && ( + + {sessions.length} + + )} + {!isActive && } + + +
) } diff --git a/src/renderer/src/pages/home/Tabs/components/SessionItem.tsx b/src/renderer/src/pages/home/Tabs/components/SessionItem.tsx index d4dcc4cb95..feeef23c6f 100644 --- a/src/renderer/src/pages/home/Tabs/components/SessionItem.tsx +++ b/src/renderer/src/pages/home/Tabs/components/SessionItem.tsx @@ -10,18 +10,10 @@ import { SessionLabel } from '@renderer/pages/settings/AgentSettings/shared' import { useAppDispatch, useAppSelector } from '@renderer/store' import { newMessagesActions } from '@renderer/store/newMessage' import type { AgentSessionEntity } from '@renderer/types' -import { - ContextMenu, - ContextMenuContent, - ContextMenuItem, - ContextMenuSub, - ContextMenuSubContent, - ContextMenuSubTrigger, - ContextMenuTrigger -} from '@renderer/ui/context-menu' import { classNames } from '@renderer/utils' import { buildAgentSessionTopicId } from '@renderer/utils/agentSession' -import { Tooltip } from 'antd' +import type { MenuProps } from 'antd' +import { Dropdown, Tooltip } from 'antd' import { MenuIcon, XIcon } from 'lucide-react' import type { FC } from 'react' import React, { memo, startTransition, useEffect, useMemo, useState } from 'react' @@ -111,80 +103,86 @@ const SessionItem: FC = ({ session, agentId, onDelete, onPress const { topicPosition, setTopicPosition } = useSettings() const singlealone = topicPosition === 'right' + const menuItems: MenuProps['items'] = useMemo( + () => [ + { + label: t('common.edit'), + key: 'edit', + icon: , + onClick: () => { + SessionSettingsPopup.show({ + agentId, + sessionId: session.id + }) + } + }, + { + label: t('settings.topic.position.label'), + key: 'topic-position', + icon: , + children: [ + { + label: t('settings.topic.position.left'), + key: 'left', + onClick: () => setTopicPosition('left') + }, + { + label: t('settings.topic.position.right'), + key: 'right', + onClick: () => setTopicPosition('right') + } + ] + }, + { + label: t('common.delete'), + key: 'delete', + icon: , + danger: true, + onClick: () => { + onDelete() + } + } + ], + [t, agentId, session.id, setTopicPosition, onDelete] + ) + return ( - <> - - - startEdit(session.name ?? '')} - title={session.name ?? session.id} - style={{ - borderRadius: 'var(--list-item-border-radius)', - cursor: isEditing ? 'default' : 'pointer' - }}> - {isPending && !isActive && } - {isFulfilled && !isActive && } - - {isEditing ? ( - ) => handleValueChange(e.target.value)} - onKeyDown={handleKeyDown} - onClick={(e: React.MouseEvent) => e.stopPropagation()} - style={{ opacity: isSaving ? 0.5 : 1 }} - /> - ) : ( - <> - - - - - - )} - - - - - { - SessionSettingsPopup.show({ - agentId, - sessionId: session.id - }) - }}> - - {t('common.edit')} - - - - - {t('settings.topic.position.label')} - - - setTopicPosition('left')}> - {t('settings.topic.position.left')} - - setTopicPosition('right')}> - {t('settings.topic.position.right')} - - - - { - onDelete() - }}> - - {t('common.delete')} - - - - +
e.stopPropagation()}>{menu}
}> + startEdit(session.name ?? '')} + title={session.name ?? session.id} + style={{ + borderRadius: 'var(--list-item-border-radius)', + cursor: isEditing ? 'default' : 'pointer' + }}> + {isPending && !isActive && } + {isFulfilled && !isActive && } + + {isEditing ? ( + ) => handleValueChange(e.target.value)} + onKeyDown={handleKeyDown} + onClick={(e: React.MouseEvent) => e.stopPropagation()} + style={{ opacity: isSaving ? 0.5 : 1 }} + /> + ) : ( + <> + + + + + + )} + + +
) } diff --git a/src/renderer/src/pages/home/Tabs/components/Sessions.tsx b/src/renderer/src/pages/home/Tabs/components/Sessions.tsx index 606b8d8216..9373c259d4 100644 --- a/src/renderer/src/pages/home/Tabs/components/Sessions.tsx +++ b/src/renderer/src/pages/home/Tabs/components/Sessions.tsx @@ -130,6 +130,7 @@ const Container = styled(Scrollbar)` display: flex; flex-direction: column; padding: 12px 10px; + overflow-x: hidden; ` export default memo(Sessions) diff --git a/src/renderer/src/pages/home/Tabs/components/UnifiedAddButton.tsx b/src/renderer/src/pages/home/Tabs/components/UnifiedAddButton.tsx index 502847f83b..53e092fd5a 100644 --- a/src/renderer/src/pages/home/Tabs/components/UnifiedAddButton.tsx +++ b/src/renderer/src/pages/home/Tabs/components/UnifiedAddButton.tsx @@ -57,7 +57,7 @@ const UnifiedAddButton: FC = ({ onCreateAssistant, setAct } return ( -
+
{t('chat.add.assistant.title')}
)