{"version":3,"file":"ChatListItem.mjs","names":[],"sources":["../../../../src/chat/ChatList/components/ChatListItem.tsx"],"sourcesContent":["import { App } from 'antd';\nimport { memo, type ReactNode, 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, type 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          text={text}\n          onActionClick={(actionKey) => handleActionClick?.(actionKey, data)}\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      placement={variant === 'bubble' ? (item.role === 'user' ? 'right' : 'left') : 'left'}\n      primary={item.role === 'user'}\n      showAvatar={showAvatar}\n      showTitle={showTitle}\n      text={text}\n      time={item.updateAt || item.createAt}\n      variant={variant}\n      renderMessage={(editableContent) => (\n        <RenderMessage data={item} editableContent={editableContent} />\n      )}\n      onAvatarClick={onAvatarsClick?.(item.role)}\n      onChange={(value) => onMessageChange?.(item.id, value)}\n      onEditingChange={setEditing}\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    />\n  );\n});\n\nChatListItem.displayName = 'ChatListItem';\n\nexport default ChatListItem;\n"],"mappings":"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"}