{"version":3,"sources":["../../../src/components/Editor/index.js"],"names":["TextArea","client","window","OSS","Wrapper","accessKeyId","oss","access_key_id","accessKeySecret","access_key_secret","stsToken","security_token","endpoint","OSS_ENDPOINT","bucket","OSS_BUCKET","uploadPath","path","file","format","shortid","generate","type","split","UploadToOss","url","Promise","resolve","reject","multipartUpload","then","data","catch","error","Editor","props","state","showUpload","value","fileList","fileMap","uploadVisible","handleChange","bind","handleClickEmoji","handleChangeFileList","handleShowUpload","handleUpload","handleSubmit","handlePaste","resetState","handleEmojiScroll","handlePressEnter","invokeFileListChange","app","onRef","currentUser","user_id","id","sOssSts","e","emoji","preventDefault","deltaY","next","prev","setState","onChange","list","length","maxUpload","slice","uid","map","item","thumbUrl","OSS_LINK","limitOne","isMobile","status","includes","items","clipboardData","i","indexOf","getAsFile","reader","FileReader","readAsDataURL","onloadend","DRIVER_LICENSE_PATH","concat","name","Date","valueOf","msg","message","ERROR_DEFAULT","showError","onError","response","maxLength","intl","get","files","forEach","push","beforeSubmit","text","res","onSubmit","action","onCommentSuccess","btnDisabled","allowEnterSubmit","shiftKey","rows","showEmoji","multiple","emojiPopoverPlacement","uploadPopoverPlacement","uploadOverlayClassName","btnLoading","button","emojiToolIcon","imageToolIcon","autoFocus","placeholder","btnSubmitText","disabledSubmit","checkDisabledSubmit","inputValue","uploadFileList","isLogin","target","zIndex","width","height","node","emojiList","visible","uploadRef","count","React","cloneElement","onClick","marginLeft","location","href","LOGINLINK","Component","propTypes","PropTypes","number","string","bool","closeUploadWhenBlur","func","defaultProps"],"mappings":"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","file":"index.js","sourcesContent":["import dayjs from \"dayjs\";\nimport shortid from \"shortid\";\nimport PropTypes from \"prop-types\";\nimport classnames from \"classnames\";\nimport React, { Fragment } from \"react\";\nimport intl from \"react-intl-universal\";\nimport { Icon, Button, Popover, Input, message } from \"antd\";\nimport Emoji from \"./Emoji\";\nimport Upload from \"./Upload\";\nimport Comment from \"../../Comment\";\nimport { isMobile } from \"./../../utils\";\nimport { OSS_LINK } from \"../../constant\";\nimport { isFunction } from \"../../helper\";\nimport {\n  OSS_ENDPOINT,\n  OSS_BUCKET,\n  DRIVER_LICENSE_PATH,\n  ERROR_DEFAULT\n} from \"../../constant\";\nimport \"./index.css\";\n\nconst { TextArea } = Input;\n\nconst client = oss => {\n  return new window.OSS.Wrapper({\n    accessKeyId: oss.access_key_id,\n    accessKeySecret: oss.access_key_secret,\n    stsToken: oss.security_token,\n    endpoint: OSS_ENDPOINT, //常量,你可以自己定义\n    bucket: OSS_BUCKET\n  });\n};\n\nconst uploadPath = (path, file) => {\n  return `${path}/${dayjs().format(\"YYYYMMDD\")}/${shortid.generate()}.${\n    file.type.split(\"/\")[1]\n  }`;\n};\n\nconst UploadToOss = (oss, path, file) => {\n  const url = uploadPath(path, file);\n  return new Promise((resolve, reject) => {\n    client(oss)\n      .multipartUpload(url, file)\n      .then(data => {\n        resolve(data);\n      })\n      .catch(error => {\n        reject(error);\n      });\n  });\n};\n\nclass Editor extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showUpload: false,\n      value: props.value || \"\", // 编辑器里面的值\n      fileList: props.fileList || [], // 图片列表\n      fileMap: {}, // 已经上传的图片路径和 uid 的映射 { uid: path }\n      uploadVisible: false\n    };\n    this.handleChange = this.handleChange.bind(this);\n    this.handleClickEmoji = this.handleClickEmoji.bind(this);\n    this.handleChangeFileList = this.handleChangeFileList.bind(this);\n    this.handleShowUpload = this.handleShowUpload.bind(this);\n    this.handleUpload = this.handleUpload.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.handlePaste = this.handlePaste.bind(this);\n    this.resetState = this.resetState.bind(this);\n    this.handleEmojiScroll = this.handleEmojiScroll.bind(this);\n    this.handlePressEnter = this.handlePressEnter.bind(this);\n    this.invokeFileListChange = this.invokeFileListChange.bind(this);\n  }\n\n  componentDidMount() {\n    const { app, onRef } = this.props;\n    if (\n      app.currentUser &&\n      (app.currentUser.user_id > 0 || app.currentUser.id > 0)\n    ) {\n      app.sOssSts();\n    }\n    if (isFunction(onRef)) {\n      onRef(this);\n    }\n  }\n\n  handleEmojiScroll(e) {\n    if (!this.emoji) {\n      return;\n    }\n    e.preventDefault();\n    if (e.deltaY > 0) {\n      this.emoji.next();\n    } else if (e.deltaY < 0) {\n      this.emoji.prev();\n    }\n  }\n\n  /**\n   * 编辑器的值改变事件\n   * 将最新的值存储到 state 中\n   * @param {string} value 输入的值\n   */\n  handleChange(value) {\n    this.setState({ value });\n    if (this.props.onChange) {\n      this.props.onChange(value);\n    }\n  }\n\n  /**\n   * 点击 emoji 的事件\n   * 点击后,需要将改 emoji 插入到编辑器中\n   * 插入的值为 [emoji chinese name]\n   * 参数 emoji 即为 emoji chinese name\n   * @param {string}} emoji emoji 的中文,如 微笑\n   */\n  handleClickEmoji(emoji) {\n    let value = this.props.value || this.state.value;\n    value += `[${emoji}]`;\n    this.handleChange(value);\n  }\n\n  /**\n   * 监听文件列表改变事件\n   * @param {Array} fileList 文件列表\n   */\n  handleChangeFileList(fileList) {\n    let list = fileList;\n    if (fileList.length > this.props.maxUpload) {\n      list = fileList.slice(0, this.props.maxUpload);\n    }\n    this.invokeFileListChange(list);\n  }\n\n  /**\n   * 控制上传 Popover 的显示和隐藏\n   * @param {boolean} showUpload 是否显示上传的 Popover\n   */\n  handleShowUpload(showUpload) {\n    if (typeof showUpload === \"boolean\") {\n      this.setState({ showUpload: showUpload });\n    } else {\n      this.setState({ showUpload: !this.state.showUpload });\n    }\n  }\n\n  /**\n   * 上传文件\n   * @param {object} param 文件对象\n   */\n  handleUpload({ uid, path }) {\n    const { fileMap } = this.state;\n    let { fileList } = this.state;\n    fileMap[uid] = path;\n    fileList = fileList.map(item => {\n      if (item.uid === uid) {\n        item.thumbUrl = OSS_LINK + path;\n      }\n      return item;\n    });\n    this.setState({ fileMap });\n    this.invokeFileListChange(fileList);\n  }\n\n  /**\n   *  **统一处理fileList的修改**\n   *  1. upload\n   *  2. paste\n   *  PS: 移动端需要做额外操作\n   *  -- evo 20200223\n   */\n  invokeFileListChange(fileList) {\n    const { limitOne, handleChangeFileList } = this.props;\n    handleChangeFileList(fileList);\n    this.setState({ fileList });\n    if (limitOne && isMobile) {\n      const file = fileList[0];\n      if (\n        file &&\n        file.status === \"done\" &&\n        !file.thumbUrl.includes(\"data:image\")\n      ) {\n        this.setState({ uploadVisible: false });\n      }\n    }\n  }\n\n  /**\n   * 粘贴回调\n   */\n  handlePaste(e) {\n    if (this.state.fileList.length >= this.props.maxUpload) {\n      return;\n    }\n    const items = e.clipboardData && e.clipboardData.items;\n    let file = null;\n    if (items && items.length) {\n      for (let i = 0; i < items.length; i++) {\n        if (items[i].type.indexOf(\"image\") !== -1) {\n          file = items[i].getAsFile();\n          break;\n        }\n      }\n      if (file === null) return;\n    }\n    this.setState({\n      uploadVisible: true\n    });\n    let reader = new FileReader();\n    reader.readAsDataURL(file);\n    reader.onloadend = () => {\n      // DRIVER_LICENSE_PATH oss 的存储路径位置\n      UploadToOss(this.props.app.oss, DRIVER_LICENSE_PATH, file)\n        .then(data => {\n          const fileList = this.state.fileList.concat({\n            url: OSS_LINK + data.name,\n            thumbUrl: OSS_LINK + data.name,\n            type: file.type,\n            uid: new Date().valueOf()\n          });\n          this.invokeFileListChange(fileList);\n        })\n        .catch(e => {\n          const msg = e.message || ERROR_DEFAULT;\n          if (this.props.showError) {\n            message.error(msg);\n          }\n          if (this.props.onError) {\n            this.props.onError(msg, { response: e.response });\n          }\n        });\n    };\n  }\n\n  /**\n   * 提交编辑器内容\n   * 提交功能,交给父组件来实现\n   * 需要父组件传入 onSubmit\n   */\n  handleSubmit() {\n    const { maxLength } = this.props;\n    let { value, fileMap, fileList } = this.state;\n    if (value.length > maxLength) {\n      // message.error(`字数不得超过${maxLength}字`);\n      message.error(intl.get(\"editor.maxLength\", { maxLength }));\n      return;\n    }\n    const files = [];\n    if (fileList.length) {\n      fileList.forEach(item => {\n        if (item.url) {\n          files.push(item.url);\n          return;\n        }\n        if (!fileMap[item.uid]) {\n          return;\n        }\n        files.push(`${OSS_LINK}${fileMap[item.uid]}`);\n      });\n    }\n    if (this.props.beforeSubmit) {\n      Promise.resolve(this.props.beforeSubmit({ text: value, files })).then(\n        res => {\n          if (!(res === false)) {\n            this.props.onSubmit({ text: value, files }, (res, action) => {\n              this.resetState();\n              if (action === \"comment\" && this.props.onCommentSuccess) {\n                this.props.onCommentSuccess(res);\n              }\n            });\n          }\n        }\n      );\n    } else {\n      this.props.onSubmit({ text: value, files }, (res, action) => {\n        this.resetState();\n        if (action === \"comment\" && this.props.onCommentSuccess) {\n          this.props.onCommentSuccess(res);\n        }\n      });\n    }\n  }\n\n  resetState() {\n    this.handleChange(\"\");\n    this.handleChangeFileList([]);\n    this.setState({\n      showUpload: false,\n      value: \"\",\n      fileList: [],\n      fileMap: {}\n    });\n  }\n\n  checkDisabledSubmit() {\n    const { btnDisabled, value, fileList } = this.props;\n    if (btnDisabled) {\n      return true;\n    }\n    if (value && value !== \"\") {\n      return false;\n    }\n    if (this.state.value && this.state.value !== \"\") {\n      return false;\n    }\n    if (fileList && fileList.length > 0) {\n      return false;\n    }\n    if (this.state.fileList.length > 0) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   *  **处理Enter事件**\n   *  1. `allowEnterSubmit`为true时enter触发submit事件\n   *  2. `e.preventDefault`为了防止enter事件后仍触发换行\n   *  3. enter事件开启后,仍可以用`shift + enter`触发换行\n   *  -- evo 20200222\n   */\n  handlePressEnter(e) {\n    if (this.props.allowEnterSubmit) {\n      if (!e.shiftKey) {\n        e.preventDefault();\n        this.handleSubmit();\n      }\n    }\n  }\n\n  render() {\n    const {\n      value,\n      // placeholder,\n      rows,\n      showEmoji,\n      showUpload,\n      multiple,\n      emojiPopoverPlacement,\n      uploadPopoverPlacement,\n      uploadOverlayClassName,\n      fileList,\n      maxUpload,\n      // btnSubmitText,\n      btnLoading,\n      button,\n      emojiToolIcon,\n      imageToolIcon,\n      maxLength,\n      autoFocus,\n      app\n    } = this.props;\n    let placeholder = this.props.placeholder || intl.get(\"editor.placeholder\");\n    let btnSubmitText =\n      this.props.btnSubmitText || intl.get(\"editor.SubmitBtn\");\n    const handleSubmit = this.handleSubmit;\n    const disabledSubmit = this.checkDisabledSubmit();\n    const inputValue = value || this.state.value;\n    const uploadFileList = fileList || this.state.fileList;\n    const isLogin =\n      app.currentUser &&\n      (app.currentUser.user_id > 0 || app.currentUser.id > 0);\n\n    return (\n      <div className=\"comment-editor-container\" onPaste={this.handlePaste}>\n        {isLogin ? (\n          <Fragment>\n            <div\n              className={classnames({\n                \"comment-editor-toolbar\": true,\n                \"comment-editor-toolbar-error\": inputValue.length > maxLength\n              })}\n            ></div>\n            <div className=\"comment-editor\">\n              <TextArea\n                value={inputValue}\n                onChange={e => {\n                  this.handleChange(e.target.value);\n                }}\n                rows={rows}\n                placeholder={placeholder}\n                autoFocus={autoFocus}\n                onPressEnter={this.handlePressEnter}\n              />\n\n              <div className=\"comment-toolbar\">\n                <div className=\"comment-toolbar-left\">\n                  {showEmoji && (\n                    <Popover\n                      trigger=\"click\"\n                      placement={emojiPopoverPlacement}\n                      autoAdjustOverflow={false}\n                      overlayStyle={{ zIndex: 9999 }}\n                      content={\n                        <div\n                          style={{ width: 240, height: 205 }}\n                          onWheel={this.handleEmojiScroll}\n                        >\n                          <Emoji\n                            onClick={this.handleClickEmoji}\n                            ref={node => {\n                              this.emoji = node;\n                            }}\n                            emojiList={this.props.app.emojiList}\n                          />\n                        </div>\n                      }\n                      overlayClassName=\"comment-emoji-popover\"\n                    >\n                      {emojiToolIcon || (\n                        <Icon type=\"smile-o\" className=\"comment-toolbar-icon\" />\n                      )}\n                    </Popover>\n                  )}\n\n                  {showUpload ? (\n                    <Popover\n                      trigger=\"click\"\n                      // TODO: 针对非 react.js,直接使用 click 事件来控制展开或关闭\n                      visible={this.state.uploadVisible}\n                      placement={uploadPopoverPlacement}\n                      overlayClassName={uploadOverlayClassName}\n                      autoAdjustOverflow={false}\n                      overlayStyle={{ zIndex: 9999 }}\n                      onVisibleChange={visible => {\n                        this.setState({\n                          uploadVisible: visible\n                        });\n                      }}\n                      content={\n                        <div className=\"comment-img-popover\">\n                          <Upload\n                            onRef={node => (this.uploadRef = node)}\n                            multiple={multiple}\n                            onChangeFileList={this.handleChangeFileList}\n                            onUpload={this.handleUpload}\n                            maxUpload={maxUpload}\n                            fileList={uploadFileList}\n                            showError={this.props.showError}\n                            onError={this.props.onError}\n                          />\n                          <div className=\"clearfix\" />\n                        </div>\n                      }\n                      title={\n                        <div className=\"comment-img-title\">\n                          <span>\n                            {intl.get(\"editor.uploadTip\")}\n                            {maxUpload >= 2 ? (\n                              <span className=\"comment-img-title-counter\">\n                                {intl.get(\"editor.uploadCount\", {\n                                  count: maxUpload - uploadFileList.length\n                                })}\n                              </span>\n                            ) : null}\n                          </span>\n                        </div>\n                      }\n                    >\n                      {imageToolIcon ? (\n                        React.cloneElement(imageToolIcon, {\n                          onClick: () => this.handleShowUpload(true)\n                        })\n                      ) : (\n                        <Icon\n                          type=\"picture\"\n                          className=\"comment-toolbar-icon\"\n                          style={{ marginLeft: 20 }}\n                          onClick={() => this.handleShowUpload(true)}\n                        />\n                      )}\n                    </Popover>\n                  ) : null}\n                </div>\n\n                <div className=\"comment-toolbar-right\">\n                  {button ? (\n                    React.cloneElement(button, {\n                      onClick: button.props.onClick || handleSubmit\n                    })\n                  ) : (\n                    <Button\n                      onClick={() => this.handleSubmit()}\n                      type=\"primary\"\n                      loading={btnLoading}\n                      disabled={disabledSubmit}\n                    >\n                      {btnSubmitText}\n                    </Button>\n                  )}\n                </div>\n              </div>\n            </div>\n          </Fragment>\n        ) : (\n          <Fragment>\n            <div className=\"comment-unlogin-tip\">\n              {intl.get(\"comment.unlogin\")}\n            </div>\n            <div className=\"comment-unlogin-button\">\n              <Button\n                type=\"primary\"\n                onClick={() => {\n                  window.location.href = `${app.LOGINLINK}?f=${window.location.href}`;\n                }}\n              >\n                {intl.get(\"account.login\")}\n              </Button>\n            </div>\n          </Fragment>\n        )}\n      </div>\n    );\n  }\n}\n\nEditor.propTypes = {\n  rows: PropTypes.number,\n  placeholder: PropTypes.string,\n  showEmoji: PropTypes.bool,\n  emojiPopoverPlacement: PropTypes.string,\n  showUpload: PropTypes.bool,\n  uploadPopoverPlacement: PropTypes.string,\n  uploadOverlayClassName: PropTypes.string,\n  multiple: PropTypes.bool,\n  closeUploadWhenBlur: PropTypes.bool,\n  maxUpload: PropTypes.number,\n  value: PropTypes.string,\n  onChange: PropTypes.func,\n  onSubmit: PropTypes.func,\n  beforeSubmit: PropTypes.func,\n  btnSubmitText: PropTypes.string,\n  btnLoading: PropTypes.bool,\n  btnDisabled: PropTypes.bool,\n  button: PropTypes.node,\n  emojiToolIcon: PropTypes.node,\n  imageToolIcon: PropTypes.node,\n  showError: PropTypes.bool,\n  onError: PropTypes.func,\n  maxLength: PropTypes.number,\n  // Enter事件相关\n  allowEnterSubmit: PropTypes.bool,\n  // 私信仅允许选中一个,此处可以优化为通用的limit\n  limitOne: PropTypes.bool\n};\n\nEditor.defaultProps = {\n  rows: 5,\n  // placeholder: \"说点什么吧\",\n  showEmoji: true,\n  showUpload: true,\n  multiple: true,\n  emojiPopoverPlacement: \"bottomLeft\",\n  closeUploadWhenBlur: false,\n  uploadPopoverPlacement: \"bottomLeft\",\n  uploadOverlayClassName: \"\",\n  maxUpload: 1,\n  // btnSubmitText: \"发表\",\n  btnLoading: false,\n  btnDisabled: false,\n  showError: true,\n  maxLength: 5000,\n  app: {},\n  handleChangeFileList: () => {},\n  // Enter事件相关\n  allowEnterSubmit: false,\n  limitOne: false\n};\n\nexport default Comment(Editor);\n"]}