import { ReactComponent as ChatAppCube } from '@/assets/svg/chat-app-cube.svg'; import { useSetModalState } from '@/hooks/commonHooks'; import { DeleteOutlined, EditOutlined, FormOutlined } from '@ant-design/icons'; import { Button, Card, Divider, Dropdown, Flex, MenuProps, Space, Tag, } from 'antd'; import { MenuItemProps } from 'antd/lib/menu/MenuItem'; import classNames from 'classnames'; import { useCallback } from 'react'; import ChatConfigurationModal from './chat-configuration-modal'; import ChatContainer from './chat-container'; import { useClickConversationCard, useClickDialogCard, useFetchConversationList, useFetchDialog, useGetChatSearchParams, useHandleItemHover, useRemoveConversation, useRemoveDialog, useRenameConversation, useSelectConversationList, useSelectFirstDialogOnMount, useSetCurrentDialog, } from './hooks'; import RenameModal from '@/components/rename-modal'; import styles from './index.less'; const Chat = () => { const dialogList = useSelectFirstDialogOnMount(); const { visible, hideModal, showModal } = useSetModalState(); const { setCurrentDialog, currentDialog } = useSetCurrentDialog(); const { onRemoveDialog } = useRemoveDialog(); const { onRemoveConversation } = useRemoveConversation(); const { handleClickDialog } = useClickDialogCard(); const { handleClickConversation } = useClickConversationCard(); const { dialogId, conversationId } = useGetChatSearchParams(); const { list: conversationList, addTemporaryConversation } = useSelectConversationList(); const { activated, handleItemEnter, handleItemLeave } = useHandleItemHover(); const { activated: conversationActivated, handleItemEnter: handleConversationItemEnter, handleItemLeave: handleConversationItemLeave, } = useHandleItemHover(); const { conversationRenameLoading, initialConversationName, onConversationRenameOk, conversationRenameVisible, hideConversationRenameModal, showConversationRenameModal, } = useRenameConversation(); useFetchDialog(dialogId, true); const handleAppCardEnter = (id: string) => () => { handleItemEnter(id); }; const handleConversationCardEnter = (id: string) => () => { handleConversationItemEnter(id); }; const handleShowChatConfigurationModal = (dialogId?: string): any => (info: any) => { info?.domEvent?.preventDefault(); info?.domEvent?.stopPropagation(); if (dialogId) { setCurrentDialog(dialogId); } showModal(); }; const handleRemoveDialog = (dialogId: string): MenuItemProps['onClick'] => ({ domEvent }) => { domEvent.preventDefault(); domEvent.stopPropagation(); onRemoveDialog([dialogId]); }; const handleRemoveConversation = (conversationId: string): MenuItemProps['onClick'] => ({ domEvent }) => { domEvent.preventDefault(); domEvent.stopPropagation(); onRemoveConversation([conversationId]); }; const handleShowConversationRenameModal = (conversationId: string): MenuItemProps['onClick'] => ({ domEvent }) => { domEvent.preventDefault(); domEvent.stopPropagation(); showConversationRenameModal(conversationId); }; const handleDialogCardClick = (dialogId: string) => () => { handleClickDialog(dialogId); }; const handleConversationCardClick = (dialogId: string) => () => { handleClickConversation(dialogId); }; const handleCreateTemporaryConversation = useCallback(() => { addTemporaryConversation(); }, [addTemporaryConversation]); const items: MenuProps['items'] = [ { key: '1', onClick: handleCreateTemporaryConversation, label: ( New chat ), }, ]; const buildAppItems = (dialogId: string) => { const appItems: MenuProps['items'] = [ { key: '1', onClick: handleShowChatConfigurationModal(dialogId), label: ( Edit ), }, { type: 'divider' }, { key: '2', onClick: handleRemoveDialog(dialogId), label: ( Delete chat ), }, ]; return appItems; }; const buildConversationItems = (conversationId: string) => { const appItems: MenuProps['items'] = [ { key: '1', onClick: handleShowConversationRenameModal(conversationId), label: ( Edit ), }, { type: 'divider' }, { key: '2', onClick: handleRemoveConversation(conversationId), label: ( Delete chat ), }, ]; return appItems; }; useFetchConversationList(); return ( {dialogList.map((x) => ( {x.icon}
{x.name}
{x.description}
{activated === x.id && (
)}
))}
Chat 25 {conversationList.map((x) => (
{x.name}
{conversationActivated === x.id && x.id !== '' && (
)}
))}
); }; export default Chat;