Browse Source

Merge branch 'feature/img' of Evo/comment into master

AdamFu 4 years ago
parent
commit
daff054613

+ 25
- 0
lib/components/Editor/index.css View File

130
     height: 28px;
130
     height: 28px;
131
   }
131
   }
132
 }
132
 }
133
+
134
+.comment-img-popover {
135
+  /* 一行显示3张图 */
136
+  width: 336px;
137
+  min-height: 100px;
138
+  margin: 0 auto;
139
+}
140
+
141
+.comment-img-title {
142
+  margin: 5px auto;
143
+}
144
+.comment-img-title-counter {
145
+  color: #666;
146
+  font-weight: 400;
147
+}
148
+
149
+@media (max-width: 575px) {
150
+  .comment-img-popover {
151
+    /* 一行显示2张图 */
152
+    width: 224px;
153
+  }
154
+  .comment-img-title-counter {
155
+    display: none;
156
+  }
157
+}

+ 78
- 57
lib/components/Editor/index.js View File

36
 
36
 
37
 require("antd/es/input/style");
37
 require("antd/es/input/style");
38
 
38
 
39
-var _react = require("react");
39
+var _dayjs = require("dayjs");
40
 
40
 
41
-var _react2 = _interopRequireDefault(_react);
41
+var _dayjs2 = _interopRequireDefault(_dayjs);
42
+
43
+var _shortid = require("shortid");
44
+
45
+var _shortid2 = _interopRequireDefault(_shortid);
42
 
46
 
43
 var _propTypes = require("prop-types");
47
 var _propTypes = require("prop-types");
44
 
48
 
48
 
52
 
49
 var _classnames2 = _interopRequireDefault(_classnames);
53
 var _classnames2 = _interopRequireDefault(_classnames);
50
 
54
 
51
-var _reactIntlUniversal = require("react-intl-universal");
52
-
53
-var _reactIntlUniversal2 = _interopRequireDefault(_reactIntlUniversal);
54
-
55
-var _dayjs = require("dayjs");
55
+var _react = require("react");
56
 
56
 
57
-var _dayjs2 = _interopRequireDefault(_dayjs);
57
+var _react2 = _interopRequireDefault(_react);
58
 
58
 
59
-var _shortid = require("shortid");
59
+var _reactIntlUniversal = require("react-intl-universal");
60
 
60
 
61
-var _shortid2 = _interopRequireDefault(_shortid);
61
+var _reactIntlUniversal2 = _interopRequireDefault(_reactIntlUniversal);
62
 
62
 
63
-var _constant = require("../../constant");
63
+var _Emoji = require("./Emoji");
64
 
64
 
65
-var _helper = require("../../helper");
65
+var _Emoji2 = _interopRequireDefault(_Emoji);
66
 
66
 
67
 var _Upload = require("./Upload");
67
 var _Upload = require("./Upload");
68
 
68
 
69
 var _Upload2 = _interopRequireDefault(_Upload);
69
 var _Upload2 = _interopRequireDefault(_Upload);
70
 
70
 
71
-var _Emoji = require("./Emoji");
72
-
73
-var _Emoji2 = _interopRequireDefault(_Emoji);
74
-
75
 var _Comment = require("../../Comment");
71
 var _Comment = require("../../Comment");
76
 
72
 
77
 var _Comment2 = _interopRequireDefault(_Comment);
73
 var _Comment2 = _interopRequireDefault(_Comment);
78
 
74
 
75
+var _utils = require("./../../utils");
76
+
77
+var _constant = require("../../constant");
78
+
79
+var _helper = require("../../helper");
80
+
79
 require("./index.css");
81
 require("./index.css");
80
 
82
 
81
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
83
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
139
     _this.resetState = _this.resetState.bind(_this);
141
     _this.resetState = _this.resetState.bind(_this);
140
     _this.handleEmojiScroll = _this.handleEmojiScroll.bind(_this);
142
     _this.handleEmojiScroll = _this.handleEmojiScroll.bind(_this);
141
     _this.handlePressEnter = _this.handlePressEnter.bind(_this);
143
     _this.handlePressEnter = _this.handlePressEnter.bind(_this);
144
+    _this.invokeFileListChange = _this.invokeFileListChange.bind(_this);
142
     return _this;
145
     return _this;
143
   }
146
   }
144
 
147
 
213
       if (fileList.length > this.props.maxUpload) {
216
       if (fileList.length > this.props.maxUpload) {
214
         list = fileList.slice(0, this.props.maxUpload);
217
         list = fileList.slice(0, this.props.maxUpload);
215
       }
218
       }
216
-      this.props.handleChangeFileList(list);
217
-      this.setState({ fileList: list });
219
+      this.invokeFileListChange(list);
218
     }
220
     }
219
 
221
 
220
     /**
222
     /**
252
         }
254
         }
253
         return item;
255
         return item;
254
       });
256
       });
255
-      this.props.handleChangeFileList(fileList);
256
-      this.setState({ fileMap: fileMap, fileList: fileList });
257
+      this.setState({ fileMap: fileMap });
258
+      this.invokeFileListChange(fileList);
259
+    }
260
+
261
+    /**
262
+     *  **统一处理fileList的修改**
263
+     *  1. upload
264
+     *  2. paste
265
+     *  PS: 移动端需要做额外操作
266
+     *  -- evo 20200223
267
+     */
268
+
269
+  }, {
270
+    key: "invokeFileListChange",
271
+    value: function invokeFileListChange(fileList) {
272
+      var _props2 = this.props,
273
+          limitOne = _props2.limitOne,
274
+          handleChangeFileList = _props2.handleChangeFileList;
275
+
276
+      handleChangeFileList(fileList);
277
+      this.setState({ fileList: fileList });
278
+      if (limitOne && _utils.isMobile) {
279
+        var file = fileList[0];
280
+        if (file && file.status === "done" && !file.thumbUrl.includes("data:image")) {
281
+          this.setState({ uploadVisible: false });
282
+        }
283
+      }
257
     }
284
     }
258
 
285
 
259
     /**
286
     /**
293
             type: file.type,
320
             type: file.type,
294
             uid: new Date().valueOf()
321
             uid: new Date().valueOf()
295
           });
322
           });
296
-          _this2.props.handleChangeFileList(fileList);
297
-          _this2.setState({
298
-            fileList: fileList
299
-          });
323
+          _this2.invokeFileListChange(fileList);
300
         }).catch(function (e) {
324
         }).catch(function (e) {
301
           var msg = e.message || _constant.ERROR_DEFAULT;
325
           var msg = e.message || _constant.ERROR_DEFAULT;
302
           if (_this2.props.showError) {
326
           if (_this2.props.showError) {
379
   }, {
403
   }, {
380
     key: "checkDisabledSubmit",
404
     key: "checkDisabledSubmit",
381
     value: function checkDisabledSubmit() {
405
     value: function checkDisabledSubmit() {
382
-      var _props2 = this.props,
383
-          btnDisabled = _props2.btnDisabled,
384
-          value = _props2.value,
385
-          fileList = _props2.fileList;
406
+      var _props3 = this.props,
407
+          btnDisabled = _props3.btnDisabled,
408
+          value = _props3.value,
409
+          fileList = _props3.fileList;
386
 
410
 
387
       if (btnDisabled) {
411
       if (btnDisabled) {
388
         return true;
412
         return true;
425
     value: function render() {
449
     value: function render() {
426
       var _this4 = this;
450
       var _this4 = this;
427
 
451
 
428
-      var _props3 = this.props,
429
-          value = _props3.value,
430
-          rows = _props3.rows,
431
-          showEmoji = _props3.showEmoji,
432
-          showUpload = _props3.showUpload,
433
-          multiple = _props3.multiple,
434
-          emojiPopoverPlacement = _props3.emojiPopoverPlacement,
435
-          uploadPopoverPlacement = _props3.uploadPopoverPlacement,
436
-          uploadOverlayClassName = _props3.uploadOverlayClassName,
437
-          fileList = _props3.fileList,
438
-          maxUpload = _props3.maxUpload,
439
-          btnLoading = _props3.btnLoading,
440
-          button = _props3.button,
441
-          emojiToolIcon = _props3.emojiToolIcon,
442
-          imageToolIcon = _props3.imageToolIcon,
443
-          maxLength = _props3.maxLength,
444
-          autoFocus = _props3.autoFocus,
445
-          app = _props3.app;
452
+      var _props4 = this.props,
453
+          value = _props4.value,
454
+          rows = _props4.rows,
455
+          showEmoji = _props4.showEmoji,
456
+          showUpload = _props4.showUpload,
457
+          multiple = _props4.multiple,
458
+          emojiPopoverPlacement = _props4.emojiPopoverPlacement,
459
+          uploadPopoverPlacement = _props4.uploadPopoverPlacement,
460
+          uploadOverlayClassName = _props4.uploadOverlayClassName,
461
+          fileList = _props4.fileList,
462
+          maxUpload = _props4.maxUpload,
463
+          btnLoading = _props4.btnLoading,
464
+          button = _props4.button,
465
+          emojiToolIcon = _props4.emojiToolIcon,
466
+          imageToolIcon = _props4.imageToolIcon,
467
+          maxLength = _props4.maxLength,
468
+          autoFocus = _props4.autoFocus,
469
+          app = _props4.app;
446
 
470
 
447
       var placeholder = this.props.placeholder || _reactIntlUniversal2.default.get("editor.placeholder");
471
       var placeholder = this.props.placeholder || _reactIntlUniversal2.default.get("editor.placeholder");
448
       var btnSubmitText = this.props.btnSubmitText || _reactIntlUniversal2.default.get("editor.SubmitBtn");
472
       var btnSubmitText = this.props.btnSubmitText || _reactIntlUniversal2.default.get("editor.SubmitBtn");
525
                     },
549
                     },
526
                     content: _react2.default.createElement(
550
                     content: _react2.default.createElement(
527
                       "div",
551
                       "div",
528
-                      {
529
-                        style: {
530
-                          width: 336, // 一行显示3张
531
-                          minHeight: 100,
532
-                          margin: "0 auto"
533
-                        }
534
-                      },
552
+                      { className: "comment-img-popover" },
535
                       _react2.default.createElement(_Upload2.default, {
553
                       _react2.default.createElement(_Upload2.default, {
536
                         onRef: function onRef(node) {
554
                         onRef: function onRef(node) {
537
                           return _this4.uploadRef = node;
555
                           return _this4.uploadRef = node;
548
                     ),
566
                     ),
549
                     title: _react2.default.createElement(
567
                     title: _react2.default.createElement(
550
                       "div",
568
                       "div",
551
-                      { style: { margin: "5px auto" } },
569
+                      { className: "comment-img-title" },
552
                       _react2.default.createElement(
570
                       _react2.default.createElement(
553
                         "span",
571
                         "span",
554
                         null,
572
                         null,
555
                         _reactIntlUniversal2.default.get("editor.uploadTip"),
573
                         _reactIntlUniversal2.default.get("editor.uploadTip"),
556
                         maxUpload >= 2 ? _react2.default.createElement(
574
                         maxUpload >= 2 ? _react2.default.createElement(
557
                           "span",
575
                           "span",
558
-                          { style: { color: "#666", fontWeight: 400 } },
576
+                          { className: "comment-img-title-counter" },
559
                           _reactIntlUniversal2.default.get("editor.uploadCount", {
577
                           _reactIntlUniversal2.default.get("editor.uploadCount", {
560
                             count: maxUpload - uploadFileList.length
578
                             count: maxUpload - uploadFileList.length
561
                           })
579
                           })
652
   onError: _propTypes2.default.func,
670
   onError: _propTypes2.default.func,
653
   maxLength: _propTypes2.default.number,
671
   maxLength: _propTypes2.default.number,
654
   // Enter事件相关
672
   // Enter事件相关
655
-  allowEnterSubmit: _propTypes2.default.bool
673
+  allowEnterSubmit: _propTypes2.default.bool,
674
+  // 私信仅允许选中一个,此处可以优化为通用的limit
675
+  limitOne: _propTypes2.default.bool
656
 };
676
 };
657
 
677
 
658
 Editor.defaultProps = {
678
 Editor.defaultProps = {
674
   app: {},
694
   app: {},
675
   handleChangeFileList: function handleChangeFileList() {},
695
   handleChangeFileList: function handleChangeFileList() {},
676
   // Enter事件相关
696
   // Enter事件相关
677
-  allowEnterSubmit: false
697
+  allowEnterSubmit: false,
698
+  limitOne: false
678
 };
699
 };
679
 
700
 
680
 exports.default = (0, _Comment2.default)(Editor);
701
 exports.default = (0, _Comment2.default)(Editor);

+ 1
- 1
lib/components/Editor/index.js.map
File diff suppressed because it is too large
View File


+ 2
- 2
lib/index.js View File

71
             _this2.setState({ value: value });
71
             _this2.setState({ value: value });
72
           },
72
           },
73
           handleChangeFileList: function handleChangeFileList(fileList) {
73
           handleChangeFileList: function handleChangeFileList(fileList) {
74
-            console.log("----", fileList);
75
             _this2.setState({
74
             _this2.setState({
76
               fileList: fileList
75
               fileList: fileList
77
             });
76
             });
78
           },
77
           },
79
-          allowEnterSubmit: true
78
+          allowEnterSubmit: true,
79
+          limitOne: true
80
         }))
80
         }))
81
       );
81
       );
82
     }
82
     }

+ 1
- 1
lib/index.js.map
File diff suppressed because it is too large
View File


+ 10
- 0
lib/utils.js View File

1
+"use strict";
2
+
3
+Object.defineProperty(exports, "__esModule", {
4
+  value: true
5
+});
6
+/**
7
+ * 575: 为了和media query中的判断保持一致
8
+ */
9
+var isMobile = exports.isMobile = typeof window.orientation === "number" && document.body.offsetWidth < 575;
10
+//# sourceMappingURL=utils.js.map

+ 1
- 0
lib/utils.js.map View File

1
+{"version":3,"sources":["../src/utils.js"],"names":["isMobile","window","orientation","document","body","offsetWidth"],"mappings":";;;;;AAAA;;;AAGO,IAAMA,8BACX,OAAOC,OAAOC,WAAd,KAA8B,QAA9B,IAA0CC,SAASC,IAAT,CAAcC,WAAd,GAA4B,GADjE","file":"utils.js","sourcesContent":["/**\n * 575: 为了和media query中的判断保持一致\n */\nexport const isMobile =\n  typeof window.orientation === \"number\" && document.body.offsetWidth < 575;\n"]}

+ 4
- 4
lib/version.json View File

1
 {
1
 {
2
     "name":       "comment",
2
     "name":       "comment",
3
-    "buildDate":  1582351916030,
3
+    "buildDate":  1582467062540,
4
     "version":    "1.0.4",
4
     "version":    "1.0.4",
5
-    "numCommits": 201,
6
-    "hash":       "556bf1c",
7
-    "dirty":      false
5
+    "numCommits": 204,
6
+    "hash":       "016964f",
7
+    "dirty":      true
8
 }
8
 }

+ 25
- 0
src/components/Editor/index.css View File

130
     height: 28px;
130
     height: 28px;
131
   }
131
   }
132
 }
132
 }
133
+
134
+.comment-img-popover {
135
+  /* 一行显示3张图 */
136
+  width: 336px;
137
+  min-height: 100px;
138
+  margin: 0 auto;
139
+}
140
+
141
+.comment-img-title {
142
+  margin: 5px auto;
143
+}
144
+.comment-img-title-counter {
145
+  color: #666;
146
+  font-weight: 400;
147
+}
148
+
149
+@media (max-width: 575px) {
150
+  .comment-img-popover {
151
+    /* 一行显示2张图 */
152
+    width: 224px;
153
+  }
154
+  .comment-img-title-counter {
155
+    display: none;
156
+  }
157
+}

+ 44
- 26
src/components/Editor/index.js View File

1
-import React, { Fragment } from "react";
1
+import dayjs from "dayjs";
2
+import shortid from "shortid";
2
 import PropTypes from "prop-types";
3
 import PropTypes from "prop-types";
3
-import { Icon, Button, Popover, Input, message } from "antd";
4
 import classnames from "classnames";
4
 import classnames from "classnames";
5
+import React, { Fragment } from "react";
5
 import intl from "react-intl-universal";
6
 import intl from "react-intl-universal";
6
-import dayjs from "dayjs";
7
-import shortid from "shortid";
8
-import { OSS_LINK } from "../../constant";
9
-import { isFunction } from "../../helper";
10
-import Upload from "./Upload";
7
+import { Icon, Button, Popover, Input, message } from "antd";
11
 import Emoji from "./Emoji";
8
 import Emoji from "./Emoji";
9
+import Upload from "./Upload";
12
 import Comment from "../../Comment";
10
 import Comment from "../../Comment";
11
+import { isMobile } from "./../../utils";
12
+import { OSS_LINK } from "../../constant";
13
+import { isFunction } from "../../helper";
13
 import {
14
 import {
14
   OSS_ENDPOINT,
15
   OSS_ENDPOINT,
15
   OSS_BUCKET,
16
   OSS_BUCKET,
70
     this.resetState = this.resetState.bind(this);
71
     this.resetState = this.resetState.bind(this);
71
     this.handleEmojiScroll = this.handleEmojiScroll.bind(this);
72
     this.handleEmojiScroll = this.handleEmojiScroll.bind(this);
72
     this.handlePressEnter = this.handlePressEnter.bind(this);
73
     this.handlePressEnter = this.handlePressEnter.bind(this);
74
+    this.invokeFileListChange = this.invokeFileListChange.bind(this);
73
   }
75
   }
74
 
76
 
75
   componentDidMount() {
77
   componentDidMount() {
131
     if (fileList.length > this.props.maxUpload) {
133
     if (fileList.length > this.props.maxUpload) {
132
       list = fileList.slice(0, this.props.maxUpload);
134
       list = fileList.slice(0, this.props.maxUpload);
133
     }
135
     }
134
-    this.props.handleChangeFileList(list);
135
-    this.setState({ fileList: list });
136
+    this.invokeFileListChange(list);
136
   }
137
   }
137
 
138
 
138
   /**
139
   /**
161
       }
162
       }
162
       return item;
163
       return item;
163
     });
164
     });
164
-    this.props.handleChangeFileList(fileList);
165
-    this.setState({ fileMap, fileList });
165
+    this.setState({ fileMap });
166
+    this.invokeFileListChange(fileList);
167
+  }
168
+
169
+  /**
170
+   *  **统一处理fileList的修改**
171
+   *  1. upload
172
+   *  2. paste
173
+   *  PS: 移动端需要做额外操作
174
+   *  -- evo 20200223
175
+   */
176
+  invokeFileListChange(fileList) {
177
+    const { limitOne, handleChangeFileList } = this.props;
178
+    handleChangeFileList(fileList);
179
+    this.setState({ fileList });
180
+    if (limitOne && isMobile) {
181
+      const file = fileList[0];
182
+      if (
183
+        file &&
184
+        file.status === "done" &&
185
+        !file.thumbUrl.includes("data:image")
186
+      ) {
187
+        this.setState({ uploadVisible: false });
188
+      }
189
+    }
166
   }
190
   }
167
 
191
 
168
   /**
192
   /**
198
             type: file.type,
222
             type: file.type,
199
             uid: new Date().valueOf()
223
             uid: new Date().valueOf()
200
           });
224
           });
201
-          this.props.handleChangeFileList(fileList);
202
-          this.setState({
203
-            fileList
204
-          });
225
+          this.invokeFileListChange(fileList);
205
         })
226
         })
206
         .catch(e => {
227
         .catch(e => {
207
           const msg = e.message || ERROR_DEFAULT;
228
           const msg = e.message || ERROR_DEFAULT;
411
                         });
432
                         });
412
                       }}
433
                       }}
413
                       content={
434
                       content={
414
-                        <div
415
-                          style={{
416
-                            width: 336, // 一行显示3张
417
-                            minHeight: 100,
418
-                            margin: "0 auto"
419
-                          }}
420
-                        >
435
+                        <div className="comment-img-popover">
421
                           <Upload
436
                           <Upload
422
                             onRef={node => (this.uploadRef = node)}
437
                             onRef={node => (this.uploadRef = node)}
423
                             multiple={multiple}
438
                             multiple={multiple}
432
                         </div>
447
                         </div>
433
                       }
448
                       }
434
                       title={
449
                       title={
435
-                        <div style={{ margin: "5px auto" }}>
450
+                        <div className="comment-img-title">
436
                           <span>
451
                           <span>
437
                             {intl.get("editor.uploadTip")}
452
                             {intl.get("editor.uploadTip")}
438
                             {maxUpload >= 2 ? (
453
                             {maxUpload >= 2 ? (
439
-                              <span style={{ color: "#666", fontWeight: 400 }}>
454
+                              <span className="comment-img-title-counter">
440
                                 {intl.get("editor.uploadCount", {
455
                                 {intl.get("editor.uploadCount", {
441
                                   count: maxUpload - uploadFileList.length
456
                                   count: maxUpload - uploadFileList.length
442
                                 })}
457
                                 })}
528
   onError: PropTypes.func,
543
   onError: PropTypes.func,
529
   maxLength: PropTypes.number,
544
   maxLength: PropTypes.number,
530
   // Enter事件相关
545
   // Enter事件相关
531
-  allowEnterSubmit: PropTypes.bool
546
+  allowEnterSubmit: PropTypes.bool,
547
+  // 私信仅允许选中一个,此处可以优化为通用的limit
548
+  limitOne: PropTypes.bool
532
 };
549
 };
533
 
550
 
534
 Editor.defaultProps = {
551
 Editor.defaultProps = {
550
   app: {},
567
   app: {},
551
   handleChangeFileList: () => {},
568
   handleChangeFileList: () => {},
552
   // Enter事件相关
569
   // Enter事件相关
553
-  allowEnterSubmit: false
570
+  allowEnterSubmit: false,
571
+  limitOne: false
554
 };
572
 };
555
 
573
 
556
 export default Comment(Editor);
574
 export default Comment(Editor);

+ 1
- 1
src/index.js View File

38
             this.setState({ value });
38
             this.setState({ value });
39
           }}
39
           }}
40
           handleChangeFileList={fileList => {
40
           handleChangeFileList={fileList => {
41
-            console.log("----", fileList);
42
             this.setState({
41
             this.setState({
43
               fileList
42
               fileList
44
             });
43
             });
45
           }}
44
           }}
46
           allowEnterSubmit
45
           allowEnterSubmit
46
+          limitOne
47
         />
47
         />
48
       </App>
48
       </App>
49
     );
49
     );

+ 5
- 0
src/utils.js View File

1
+/**
2
+ * 575: 为了和media query中的判断保持一致
3
+ */
4
+export const isMobile =
5
+  typeof window.orientation === "number" && document.body.offsetWidth < 575;