diff --git a/src/renderer/src/components/Popups/AddAgentPopup.tsx b/src/renderer/src/components/Popups/AddAgentPopup.tsx new file mode 100644 index 0000000000..ee930f77f5 --- /dev/null +++ b/src/renderer/src/components/Popups/AddAgentPopup.tsx @@ -0,0 +1,175 @@ +import { + Avatar, + Button, + Form, + Modal, + ModalBody, + ModalContent, + ModalFooter, + ModalHeader, + Select, + SelectedItemProps, + SelectedItems, + SelectItem +} from '@heroui/react' +import ClaudeCodeIcon from '@renderer/assets/images/models/claude.png' +import { TopView } from '@renderer/components/TopView' +import { useAgents } from '@renderer/hooks/useAgents' +import { useTimer } from '@renderer/hooks/useTimer' +import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' +import { AgentEntity } from '@renderer/types' +import { uuid } from '@renderer/utils' +import { useCallback, useMemo, useRef, useState } from 'react' +import { useTranslation } from 'react-i18next' + +interface Props { + resolve: (value: AgentEntity | undefined) => void +} + +type AgentTypeOption = { + key: AgentEntity['type'] + name: AgentEntity['name'] + avatar: AgentEntity['avatar'] +} + +const PopupContainer: React.FC = ({ resolve }) => { + const [open, setOpen] = useState(true) + const { t } = useTranslation() + const loadingRef = useRef(false) + const { setTimeoutTimer } = useTimer() + const { addAgent } = useAgents() + + const Option = useCallback( + ({ option }: { option?: AgentTypeOption | null }) => { + if (!option) { + return ( +
+ + {t('common.invalid_value')} +
+ ) + } + return ( +
+ + {option.name} +
+ ) + }, + [t] + ) + + const Item = useCallback( + ({ item }: { item: SelectedItemProps }) =>