diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index 5dfa5fcda2..7c78b8d412 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -16,6 +16,14 @@ }, "edit": { "title": "Edit Agent" + }, + "session": { + "delete": { + "content": "Are you sure to delete this session?", + "title": "Delete session" + }, + "label_one": "Session", + "label_other": "Sessions" } }, "agents": { diff --git a/src/renderer/src/pages/home/Tabs/SessionsTab.tsx b/src/renderer/src/pages/home/Tabs/SessionsTab.tsx new file mode 100644 index 0000000000..8c896280b3 --- /dev/null +++ b/src/renderer/src/pages/home/Tabs/SessionsTab.tsx @@ -0,0 +1,33 @@ +import { useRuntime } from '@renderer/hooks/useRuntime' +import { AgentSessionEntity } from '@renderer/types' +import { FC, memo } from 'react' + +interface AssistantsTabProps {} + +const SessionsTab: FC = () => { + const { chat } = useRuntime() + const { activeAgentId } = chat + const mockData: AgentSessionEntity[] = [ + { + accessible_paths: [], + model: '', + id: 'test', + agent_id: '', + agent_type: 'claude-code', + created_at: '', + updated_at: '' + } + ] + + return ( +
+ {/* TODO: Add session button */} + Active Agent ID: {activeAgentId} + {mockData.map((session) => ( +
Not implemented
+ ))} +
+ ) +} + +export default memo(SessionsTab) diff --git a/src/renderer/src/pages/home/Tabs/components/SessionItem.tsx b/src/renderer/src/pages/home/Tabs/components/SessionItem.tsx new file mode 100644 index 0000000000..4e7720a6ad --- /dev/null +++ b/src/renderer/src/pages/home/Tabs/components/SessionItem.tsx @@ -0,0 +1,98 @@ +import { Button, cn, useDisclosure } from '@heroui/react' +import { loggerService } from '@logger' +import { DeleteIcon, EditIcon } from '@renderer/components/Icons' +import { AgentSessionEntity } from '@renderer/types' +import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuTrigger } from '@renderer/ui/context-menu' +import { FC, memo, useCallback } from 'react' +import { useTranslation } from 'react-i18next' + +const logger = loggerService.withContext('AgentItem') + +interface SessionItemProps { + session: AgentSessionEntity + isActive: boolean + onDelete: (session: AgentSessionEntity) => void + onPress: () => void +} + +const SessionItem: FC = ({ session, isActive, onDelete, onPress }) => { + const { t } = useTranslation() + // const { isOpen, onOpen, onClose } = useDisclosure() + const { onOpen } = useDisclosure() + + const SessionLabel = useCallback(() => { + const displayName = session.name ?? session.id + return ( + + ) + }, [session.id, session.name, onPress]) + + const handleClick = () => logger.debug('not implemented') + + return ( + <> + + + + + + + + + + { + onOpen() + }}> + + {t('common.edit')} + + { + window.modal.confirm({ + title: t('agent.session.delete.title'), + content: t('agent.session.delete.content'), + centered: true, + okButtonProps: { danger: true }, + onOk: () => onDelete(session) + }) + }}> + + {t('common.delete')} + + + + {/* TODO: Add a session modal here */} + + ) +} + +const Container: React.FC> = ({ className, ...props }) => ( +
+) + +const SessionLabelContainer: React.FC> = ({ className, ...props }) => ( +
+) + +export default memo(SessionItem) diff --git a/src/renderer/src/pages/home/Tabs/index.tsx b/src/renderer/src/pages/home/Tabs/index.tsx index 40ae186123..afb6e99535 100644 --- a/src/renderer/src/pages/home/Tabs/index.tsx +++ b/src/renderer/src/pages/home/Tabs/index.tsx @@ -11,6 +11,7 @@ import styled from 'styled-components' import { AgentsTab as Agents } from './AgentsTab' import Assistants from './AssistantsTab' +import Sessions from './SessionsTab' import Settings from './SettingsTab' import Topics from './TopicsTab' @@ -114,6 +115,9 @@ const HomeTabs: FC = ({ setTab('topic')}> {t('common.topics')} + setTab('sessions')}> + {t('agent.session.label_other')} + setTab('settings')}> {t('settings.title')} @@ -140,7 +144,6 @@ const HomeTabs: FC = ({ onCreateDefaultAssistant={onCreateDefaultAssistant} /> )} - {tab === 'agents' && } {tab === 'topic' && ( = ({ position={position} /> )} + {tab === 'agents' && } + {tab === 'sessions' && } {tab === 'settings' && }