UNPKG

@lobehub/ui

Version:

Lobe UI is an open-source UI component library for building AIGC web apps

1 lines 8.44 kB
{"version":3,"file":"ChatListItem.mjs","names":["ChatActionsBar","handleActionClick: ListItemProps['onActionsClick']","data","message","ChatItem"],"sources":["../../../../src/chat/ChatList/components/ChatListItem.tsx"],"sourcesContent":["import { App } from 'antd';\nimport { ReactNode, memo, useCallback, useMemo, useState } from 'react';\n\nimport type { AlertProps } from '@/Alert';\nimport ChatItem from '@/chat/ChatItem';\nimport type { ChatMessage } from '@/chat/types';\nimport { copyToClipboard } from '@/utils/copyToClipboard';\n\nimport type { ChatListItemProps, ListItemProps } from '../type';\nimport ChatActionsBar from './ChatActionsBar';\n\nconst ChatListItem = memo<ChatListItemProps>((props) => {\n const {\n renderMessagesExtra,\n showTitle,\n onActionsClick,\n onAvatarsClick,\n onMessageChange,\n variant,\n text,\n renderMessages,\n renderErrorMessages,\n renderActions,\n loading,\n groupNav,\n renderItems,\n showAvatar,\n ...item\n } = props;\n\n const [editing, setEditing] = useState(false);\n\n const { message } = App.useApp();\n\n const RenderItem = useMemo(() => {\n if (!renderItems || !item?.role) return;\n let renderFunction;\n if (renderItems?.[item.role]) renderFunction = renderItems[item.role];\n if (!renderFunction && renderItems?.['default']) renderFunction = renderItems['default'];\n if (!renderFunction) return;\n return renderFunction;\n }, [renderItems?.[item.role]]);\n\n const RenderMessage = useCallback(\n ({ editableContent, data }: { data: ChatMessage; editableContent: ReactNode }) => {\n if (!renderMessages || !item?.role) return;\n let RenderFunction;\n if (renderMessages?.[item.role]) RenderFunction = renderMessages[item.role];\n if (!RenderFunction && renderMessages?.['default'])\n RenderFunction = renderMessages['default'];\n if (!RenderFunction) return;\n return <RenderFunction {...data} editableContent={editableContent} />;\n },\n [renderMessages?.[item.role]],\n );\n\n const MessageExtra = useCallback(\n ({ data }: { data: ChatMessage }) => {\n if (!renderMessagesExtra || !item?.role) return;\n let RenderFunction;\n if (renderMessagesExtra?.[item.role]) RenderFunction = renderMessagesExtra[item.role];\n if (renderMessagesExtra?.['default']) RenderFunction = renderMessagesExtra['default'];\n if (!RenderFunction) return;\n return <RenderFunction {...data} />;\n },\n [renderMessagesExtra?.[item.role]],\n );\n\n const ErrorMessage = useCallback(\n ({ data }: { data: ChatMessage }) => {\n if (!renderErrorMessages || !item?.error?.type) return;\n let RenderFunction;\n if (renderErrorMessages?.[item.error.type])\n RenderFunction = renderErrorMessages[item.error.type].Render;\n if (!RenderFunction && renderErrorMessages?.['default'])\n RenderFunction = renderErrorMessages['default'].Render;\n if (!RenderFunction) return;\n return <RenderFunction {...data} />;\n },\n [renderErrorMessages],\n );\n\n const Actions = useCallback(\n ({ data }: { data: ChatMessage }) => {\n if (!renderActions || !item?.role) return;\n let RenderFunction;\n if (renderActions?.[item.role]) RenderFunction = renderActions[item.role];\n if (renderActions?.['default']) RenderFunction = renderActions['default'];\n if (!RenderFunction) RenderFunction = ChatActionsBar;\n\n const handleActionClick: ListItemProps['onActionsClick'] = async (action, data) => {\n switch (action.key) {\n case 'copy': {\n await copyToClipboard(data.content);\n message.success(text?.copySuccess || 'Copy Success');\n break;\n }\n case 'edit': {\n setEditing(true);\n }\n }\n\n onActionsClick?.(action, data);\n };\n\n return (\n <RenderFunction\n {...data}\n onActionClick={(actionKey) => handleActionClick?.(actionKey, data)}\n text={text}\n />\n );\n },\n [renderActions?.[item.role], text, onActionsClick],\n );\n\n const error = useMemo(() => {\n if (!item.error) return;\n const message = item.error?.message;\n let alertConfig = {};\n if (item.error.type && renderErrorMessages?.[item.error.type]) {\n alertConfig = renderErrorMessages[item.error.type]?.config as AlertProps;\n }\n return {\n message,\n ...alertConfig,\n };\n }, [renderErrorMessages, item.error]);\n\n if (RenderItem) return <RenderItem key={item.id} {...props} />;\n\n return (\n <ChatItem\n actions={<Actions data={item} />}\n avatar={item.meta}\n avatarAddon={groupNav}\n editing={editing}\n error={error}\n errorMessage={<ErrorMessage data={item} />}\n loading={loading}\n message={item.content}\n messageExtra={<MessageExtra data={item} />}\n onAvatarClick={onAvatarsClick?.(item.role)}\n onChange={(value) => onMessageChange?.(item.id, value)}\n onDoubleClick={(e) => {\n if (item.id === 'default' || item.error) return;\n if (item.role && ['assistant', 'user'].includes(item.role) && e.altKey) {\n setEditing(true);\n }\n }}\n onEditingChange={setEditing}\n placement={variant === 'bubble' ? (item.role === 'user' ? 'right' : 'left') : 'left'}\n primary={item.role === 'user'}\n renderMessage={(editableContent) => (\n <RenderMessage data={item} editableContent={editableContent} />\n )}\n showAvatar={showAvatar}\n showTitle={showTitle}\n text={text}\n time={item.updateAt || item.createAt}\n variant={variant}\n />\n );\n});\n\nChatListItem.displayName = 'ChatListItem';\n\nexport default ChatListItem;\n"],"mappings":"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"}