{"version":3,"sources":["../../../src/components/Editor/index.js"],"names":["TextArea","Editor","props","state","showUpload","value","fileList","fileMap","handleChange","bind","handleClickEmoji","handleChangeFileList","handleShowUpload","handleUpload","handleSubmit","resetState","handleEmojiScroll","onRef","e","emoji","preventDefault","deltaY","next","prev","setState","onChange","list","length","maxUpload","slice","uid","path","map","item","thumbUrl","OSS_LINK","maxLength","error","intl","get","files","forEach","url","push","rows","showEmoji","multiple","emojiPopoverPlacement","uploadPopoverPlacement","uploadOverlayClassName","closeUploadWhenBlur","btnLoading","btnDisabled","button","emojiToolIcon","imageToolIcon","autoFocus","placeholder","btnSubmitText","disabledSubmit","inputValue","uploadFileList","target","zIndex","width","height","node","visible","minHeight","margin","showError","onError","color","fontWeight","count","React","cloneElement","onClick","marginLeft","Component","propTypes","PropTypes","number","string","bool","func","onSubmit","beforeSubmit","defaultProps"],"mappings":"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","file":"index.js","sourcesContent":["import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Icon, Button, Popover, Input, message } from \"antd\";\nimport classnames from \"classnames\";\nimport intl from \"react-intl-universal\";\nimport { OSS_LINK } from \"../../constant\";\nimport { isFunction } from \"../../helper\";\nimport Upload from \"./Upload\";\nimport Emoji from \"./Emoji\";\nimport \"./index.css\";\n\nconst { TextArea } = Input;\n\nclass Editor extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showUpload: false,\n      value: \"\", // 编辑器里面的值\n\n      fileList: [], // 图片列表\n      fileMap: {} // 已经上传的图片路径和 uid 的映射 { uid: path }\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.resetState = this.resetState.bind(this);\n    this.handleEmojiScroll = this.handleEmojiScroll.bind(this);\n  }\n\n  componentDidMount() {\n    if (isFunction(this.props.onRef)) {\n      this.props.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.state;\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.props.handleChangeFileList(list);\n    this.setState({ fileList: 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.props.handleChangeFileList(fileList);\n    this.setState({ fileMap, fileList });\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 }, () => {\n    //           this.resetState();\n    //           if (this.props.onCommentSuccess) {\n    //             this.props.onCommentSuccess();\n    //           }\n    //         });\n    //       }\n    //     }\n    //   );\n    // } else {\n    //   this.props.onSubmit({ text: value, files }, () => {\n    //     this.resetState();\n    //     if (this.props.onCommentSuccess) {\n    //       this.props.onCommentSuccess();\n    //     }\n    //   });\n    // }\n  }\n\n  resetState() {\n    this.setState({\n      showUpload: false,\n      value: \"\",\n      fileList: [],\n      fileMap: {}\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      closeUploadWhenBlur,\n      maxUpload,\n      // btnSubmitText,\n      btnLoading,\n      btnDisabled,\n      button,\n      emojiToolIcon,\n      imageToolIcon,\n      maxLength,\n      autoFocus\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 =\n      btnDisabled ||\n      (!this.props.value && !this.state.value && !this.state.fileList.length);\n    const inputValue = value || this.state.value;\n    const uploadFileList = fileList || this.state.fileList;\n    return (\n      <div className=\"comment-editor-container\">\n        <div\n          className={classnames({\n            \"comment-editor-toolbar\": true,\n            \"comment-editor-toolbar-error\": inputValue.length > maxLength\n          })}\n        >\n          {/* {intl.get(\"editor.alreadyEntered\", {\n            count: inputValue.length,\n            maxLength\n          })} */}\n        </div>\n        <div className=\"comment-editor\">\n          <TextArea\n            value={inputValue}\n            onChange={e => this.handleChange(e.target.value)}\n            rows={rows}\n            placeholder={placeholder}\n            autoFocus={autoFocus}\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: 999 }}\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                      />\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.showUpload}\n                  placement={uploadPopoverPlacement}\n                  overlayClassName={uploadOverlayClassName}\n                  autoAdjustOverflow={false}\n                  overlayStyle={{ zIndex: 999 }}\n                  onVisibleChange={\n                    closeUploadWhenBlur\n                      ? visible => {\n                          this.handleShowUpload(visible);\n                        }\n                      : null\n                  }\n                  content={\n                    <div\n                      style={{\n                        width: 336, // 一行显示3张\n                        minHeight: 100,\n                        margin: \"0 auto\"\n                      }}\n                    >\n                      <Upload\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 style={{ margin: \"5px auto\" }}>\n                      <span>\n                        {intl.get(\"editor.uploadTip\")}\n                        {maxUpload >= 2 ? (\n                          <span style={{ color: \"#666\", fontWeight: 400 }}>\n                            {intl.get(\"editor.uploadCount\", {\n                              count: maxUpload - uploadFileList.length\n                            })}\n                          </span>\n                        ) : null}\n                      </span>\n                      {/* 因为是点击别的区域关闭,所以不用右上角的 Icon */}\n                      {/* <Icon\n                        type=\"close\"\n                        onClick={() => this.handleShowUpload(false)}\n                        style={{\n                          float: \"right\",\n                          cursor: \"pointer\",\n                          marginTop: 4\n                        }}\n                      /> */}\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: 10 }}\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      </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};\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};\n\nexport default Editor;\n"]}