{"version":3,"file":"index.jsx","sourceRoot":"","sources":["index.tsx"],"names":[],"mappings":"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","sourcesContent":["import 'quill-mention/dist/quill.mention.css';\nimport 'react-quill/dist/quill.snow.css';\nimport 'react-quill-emoji/dist/quill-emoji.css';\n\nimport ImageUploader from '@writergate/quill-image-uploader-nextjs';\nimport { Image, Modal, Space } from 'antd';\nimport _ from 'lodash';\nimport React, { useRef, useState } from 'react';\nimport ReactQuill, { Quill } from 'react-quill';\n\nimport { postMessage } from '../services/chat';\nimport styles from '../style.module.css';\nimport { qiniuUploadMD5 } from '../utils/qiniu';\nimport { fileSize, qiniuUrl } from '../utils/utils';\nimport Button from './Button';\nimport IconFont from './IconFonts';\nimport Qiniu from './ReactQiniu';\n\ntype PropType = {\n  roomId: string;\n  username: string;\n  members: any[];\n  qiniu_url: string;\n};\n\nlet record: string[] = [];\nQuill.register('modules/imageUploader', ImageUploader);\n\nconst ChatEditor: React.FC<PropType> = ({ roomId, username, members, qiniu_url }) => {\n  let message: Chat.Message[] = [];\n  const [previewModalVisible, setPreviewModalVisible] = useState(false);\n  const [pastedModalVisible, setPastedModalVisible] = useState(false);\n  const [pastedFiles, setPastedFiles] = useState<any[]>([]);\n  const [uploadedFiles, setUploadedFiles] = useState<string[]>([]);\n  const [filePreview, setFilePreview] = useState<any[]>([]);\n  const quillRef = useRef<any>();\n  const quill = quillRef?.current;\n\n  const userList = members.map((v) => ({\n    user_id: v.user_id,\n    avatar: v.avatar,\n    value: v.user_name,\n  }));\n\n  const sendMessage = () => {\n    const scrollDiv = document.getElementById('chatlist');\n    const blocks = quill.editor.editor.delta;\n    if (pastedFiles.length > 0) {\n      message = pastedFiles.map((f: any) => ({\n        type: 'attachment',\n        sub_type: 'image',\n        text: '',\n        source_url: f.source_url,\n      }));\n    } else if (uploadedFiles.length > 0) {\n      message = uploadedFiles.map((f: string) => ({\n        type: 'attachment',\n        sub_type: 'image',\n        text: '',\n        source_url: f,\n      }));\n    } else {\n      message = blocks.map((v) => {\n        if (v.insert.mention) {\n          return {\n            type: 'mention',\n            text: `@${v.insert.mention.value}`,\n            user_id: Number(userList.filter((u) => u.value === v.insert.mention.value).map((s) => s.user_id)),\n          };\n        }\n        if (v.attributes && !v.attributes.imageBlot) {\n          return {\n            type: 'task_mention',\n            text: v.insert,\n            card_id: v.attributes.link,\n          };\n        }\n        if (v.insert.emoji) {\n          return {\n            type: 'emoicon',\n            text: `:${v.insert.emoji}:`,\n          };\n        }\n        return { type: 'text', text: v.insert };\n      });\n    }\n    if (\n      uploadedFiles.length > 0 ||\n      pastedFiles.length > 0 ||\n      message.filter((m) => m.text.replace(/[\\r\\n]/g, '') !== '').length > 0\n    ) {\n      postMessage(username, roomId, message, [\n        ...new Set(message.filter((v) => v.type === 'mention').map((v) => v.user_id!)),\n      ]).then(() => {\n        if (scrollDiv) {\n          scrollDiv.scrollIntoView({ block: 'end' });\n        }\n        setUploadedFiles([]);\n        setPastedFiles([]);\n        record = [];\n        quill.editor.focus();\n        quill.editor.setSelection(quill.editor.getLength(), 0);\n      });\n    }\n  };\n\n  const onDrop = (droppedFiles: any[]) => {\n    setFilePreview(droppedFiles);\n    setPreviewModalVisible(true);\n    Promise.all(droppedFiles.map((v) => v.uploadPromise))\n      .then((values) => setUploadedFiles(values.map((s) => qiniuUrl(s.body.key, qiniu_url))))\n      .catch((e) => console.error(e));\n  };\n\n  const EditorToolbar = () => (\n    <Space id=\"toolbar\" className=\"flex items-center\">\n      <Qiniu onDrop={onDrop} prefix=\"chat-\" accept=\".png,.jpg,.jpeg\">\n        <IconFont icon=\"icon-attachment\" className=\"cursor-pointer text-base font-bold hover:text-blue-400\" />\n      </Qiniu>\n    </Space>\n  );\n\n  const modules = {\n    toolbar: {\n      container: '#toolbar',\n    },\n    // 'emoji-toolbar': true,\n    keyboard: {\n      bindings: {\n        tab: {\n          key: 13,\n          handler() {\n            sendMessage();\n            quill.editor.setContents([{ insert: '\\n' }]);\n          },\n        },\n      },\n    },\n    imageUploader: {\n      upload: (fileToUpload) => {\n        const blocks = quill.editor.editor.delta;\n        return new Promise(() => {\n          qiniuUploadMD5(\n            fileToUpload,\n            undefined,\n            [],\n            (res) => {\n              record = record.concat(\n                Object.assign(fileToUpload, {\n                  source_url: qiniuUrl(res.key, qiniu_url),\n                })\n              );\n              setPastedFiles(record);\n              setPastedModalVisible(true);\n              quill.editor.setContents(blocks.filter((v) => v.insert.image === undefined));\n            },\n            () => {}\n          );\n        });\n      },\n    },\n  };\n\n  return (\n    <>\n      <ReactQuill className={styles.qlContainer} modules={modules} ref={quillRef} />\n      <div className=\"flex items-center justify-between\">\n        <div className=\"flex items-center\">\n          <EditorToolbar />\n        </div>\n        <Button\n          type=\"primary\"\n          className=\"rounded-lg border-2\"\n          onClick={_.debounce(() => {\n            sendMessage();\n            quill.editor.setContents([{ insert: '\\n' }]);\n          }, 200)}\n        >\n          发送\n        </Button>\n      </div>\n      <Modal\n        title=\"发送图片\"\n        width={400}\n        visible={previewModalVisible}\n        onCancel={() => {\n          setPreviewModalVisible(false);\n          setUploadedFiles([]);\n          quill.editor.setSelection(quill.editor.getLength(), 0);\n        }}\n        onOk={() => {\n          sendMessage();\n          setPreviewModalVisible(false);\n          setFilePreview([]);\n        }}\n        okText=\"发送\"\n      >\n        {filePreview.length > 1\n          ? filePreview.map((v: any) => (\n              <div className=\"my-2 flex items-center justify-between\" key={v.preview}>\n                <div className=\"flex items-center\">\n                  <Image src={v.preview} className=\"w-12\" />\n                  <div className=\"flex flex-col\">\n                    <div className=\"ml-2\">{v.name}</div>\n                    <div className=\"ml-2 text-xs text-gray-400\">{fileSize(v.size)}</div>\n                  </div>\n                </div>\n                <div className=\"flex items-center\">\n                  <IconFont\n                    icon=\"icon-delete\"\n                    className=\"cursor-pointer text-xl hover:text-red-400\"\n                    onClick={() => {\n                      setFilePreview(filePreview.filter((a) => a !== v));\n                      Promise.all(filePreview.filter((a) => a !== v).map((m) => m.uploadPromise))\n                        .then((values) => setUploadedFiles(values.map((s) => qiniuUrl(s.body.key, qiniu_url))))\n                        .catch((e) => console.error(e));\n                    }}\n                  />\n                </div>\n              </div>\n            ))\n          : filePreview.map((v) => (\n              <div className=\"text-center\" key={v.preview}>\n                <Image src={v.preview} />\n                <div>{v.name}</div>\n              </div>\n            ))}\n      </Modal>\n      <Modal\n        title=\"发送图片\"\n        width={400}\n        visible={pastedModalVisible}\n        onCancel={() => {\n          setPastedModalVisible(false);\n          setPastedFiles([]);\n          record = [];\n          quill.editor.setSelection(quill.editor.getLength(), 0);\n        }}\n        onOk={() => {\n          sendMessage();\n          setPastedModalVisible(false);\n        }}\n        okText=\"发送\"\n      >\n        {pastedFiles.length > 1\n          ? pastedFiles.map((v: any) => (\n              <div className=\"my-2 flex items-center justify-between\" key={v.preview}>\n                <div className=\"flex items-center\">\n                  <Image src={v.source_url} className=\"w-12\" />\n                  <div className=\"flex flex-col\">\n                    <div className=\"ml-2\">{v.name}</div>\n                    <div className=\"ml-2 text-xs text-gray-400\">{fileSize(v.size)}</div>\n                  </div>\n                </div>\n                <div className=\"flex items-center\">\n                  <IconFont\n                    icon=\"icon-delete\"\n                    className=\"cursor-pointer text-xl hover:text-red-400\"\n                    onClick={() => {\n                      setPastedFiles(pastedFiles.filter((a) => a !== v));\n                      Promise.all(filePreview.filter((a) => a !== v).map((m) => m.uploadPromise))\n                        .then((values) => setUploadedFiles(values.map((s) => qiniuUrl(s.body.key, qiniu_url))))\n                        .catch((e) => console.error(e));\n                    }}\n                  />\n                </div>\n              </div>\n            ))\n          : pastedFiles.map((v) => (\n              <div className=\"text-center\" key={v.source_url}>\n                <Image src={v.source_url} />\n                <div>{v.name}</div>\n              </div>\n            ))}\n      </Modal>\n    </>\n  );\n};\n\nexport default ChatEditor;\n"]}