@kids-reporter/draft-editor 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,10 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.AnchorButton = void 0;
7
- var _react = _interopRequireDefault(require("react"));
7
+ var _react = _interopRequireWildcard(require("react"));
8
8
  var _draftJs = require("draft-js");
9
9
  var _draftRenderer = require("@kids-reporter/draft-renderer");
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ var _anchor = require("../entity-decorators/anchor");
11
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
11
13
  const AnchorButton = props => {
12
14
  const toggleEntity = _draftJs.RichUtils.toggleLink;
13
15
  const {
@@ -15,36 +17,45 @@ const AnchorButton = props => {
15
17
  editorState,
16
18
  onChange
17
19
  } = props;
20
+ const [isEditorOpen, setIsEditorOpen] = (0, _react.useState)(false);
18
21
  const promptForAnchor = e => {
19
22
  e.preventDefault();
20
23
  const selection = editorState.getSelection();
21
24
  if (!selection.isCollapsed()) {
22
- const contentState = editorState.getCurrentContent();
23
- const startKey = selection.getStartKey();
24
- const block = contentState.getBlockForKey(startKey);
25
- const start = selection.getStartOffset();
26
- const end = selection.getEndOffset();
27
- const selectedText = block.getText().slice(start, end);
28
- const contentStateWithEntity = contentState.createEntity(_draftRenderer.ENTITY.Anchor, 'MUTABLE', {
29
- anchorID: selectedText
30
- });
31
- const entityKey = contentStateWithEntity.getLastCreatedEntityKey();
32
- const newEditorState = _draftJs.EditorState.set(editorState, {
33
- currentContent: contentStateWithEntity
34
- });
35
- onChange(toggleEntity(newEditorState, newEditorState.getSelection(), entityKey));
25
+ props.onEditStart();
26
+ setIsEditorOpen(true);
36
27
  }
37
28
  };
29
+ const confirmAnchor = anchorID => {
30
+ const contentState = editorState.getCurrentContent();
31
+ const contentStateWithEntity = contentState.createEntity(_draftRenderer.ENTITY.Anchor, 'MUTABLE', {
32
+ anchorID: anchorID
33
+ });
34
+ const entityKey = contentStateWithEntity.getLastCreatedEntityKey();
35
+ const newEditorState = _draftJs.EditorState.set(editorState, {
36
+ currentContent: contentStateWithEntity
37
+ });
38
+ onChange(toggleEntity(newEditorState, newEditorState.getSelection(), entityKey));
39
+ setIsEditorOpen(false);
40
+ props.onEditFinish();
41
+ };
38
42
  const removeAnchor = () => {
39
43
  const selection = editorState.getSelection();
40
44
  if (!selection.isCollapsed()) {
41
45
  onChange(toggleEntity(editorState, selection, null));
42
46
  }
47
+ setIsEditorOpen(false);
48
+ props.onEditFinish();
43
49
  };
44
- return /*#__PURE__*/_react.default.createElement("div", {
50
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isEditorOpen && /*#__PURE__*/_react.default.createElement(_anchor.AnchorIDEditor, {
51
+ isOpen: isEditorOpen,
52
+ anchorIDValue: '',
53
+ onConfirm: confirmAnchor,
54
+ onCancel: removeAnchor
55
+ }), /*#__PURE__*/_react.default.createElement("div", {
45
56
  className: props.className,
46
57
  onMouseDown: isActive ? removeAnchor : promptForAnchor,
47
58
  title: "\u9328\u9EDE"
48
- }, /*#__PURE__*/_react.default.createElement("span", null, "\u9328"));
59
+ }, /*#__PURE__*/_react.default.createElement("span", null, "\u9328")));
49
60
  };
50
61
  exports.AnchorButton = AnchorButton;
@@ -210,7 +210,7 @@ class RichTextEditor extends _react.default.Component {
210
210
  }, commonProps)), /*#__PURE__*/_react.default.createElement(_buttons.CustomAnchorButton, _extends({
211
211
  isDisabled: disabledButtons.includes(_btNames.default.anchor),
212
212
  isActive: entityType === _draftRenderer.ENTITY.Anchor
213
- }, commonProps)), /*#__PURE__*/_react.default.createElement(_buttons.CustomLinkButton, _extends({
213
+ }, commonProps, this.commonEditProps)), /*#__PURE__*/_react.default.createElement(_buttons.CustomLinkButton, _extends({
214
214
  isDisabled: disabledButtons.includes(_btNames.default.link),
215
215
  isActive: entityType === _draftRenderer.ENTITY.Link
216
216
  }, commonProps, this.commonEditProps)), /*#__PURE__*/_react.default.createElement(_buttons.CustomBackgroundColorButton, _extends({
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.editableAnchorDecorator = void 0;
6
+ exports.editableAnchorDecorator = exports.AnchorIDEditor = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _styledComponents = _interopRequireDefault(require("styled-components"));
9
9
  var _modals = require("@keystone-ui/modals");
@@ -35,14 +35,22 @@ const Warning = _styledComponents.default.p`
35
35
  const StyledTextInput = (0, _styledComponents.default)(_fields.TextInput)`
36
36
  margin: 10px;
37
37
  `;
38
- const AnchorLabelEditor = props => {
38
+ const AnchorIDEditor = props => {
39
39
  const {
40
40
  isOpen,
41
- anchorLabelValue,
41
+ anchorIDValue,
42
42
  onConfirm,
43
43
  onCancel
44
44
  } = props;
45
- const [anchorLabel, setTOCLabel] = (0, _react.useState)(anchorLabelValue);
45
+ const [anchorID, setAnchorID] = (0, _react.useState)(anchorIDValue);
46
+ const [msg, setMsg] = (0, _react.useState)('');
47
+
48
+ // Restrict id format
49
+ // ref: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id
50
+ const isValidID = id => {
51
+ const idRex = /^[A-Za-z][\w-]*$/;
52
+ return idRex.test(id);
53
+ };
46
54
  return /*#__PURE__*/_react.default.createElement(_modals.AlertDialog, {
47
55
  title: "\u7DE8\u8F2F\u9328\u9EDE\u6587\u5B57(ID)",
48
56
  isOpen: isOpen,
@@ -53,16 +61,23 @@ const AnchorLabelEditor = props => {
53
61
  },
54
62
  confirm: {
55
63
  label: 'Confirm',
56
- action: () => onConfirm(anchorLabel)
64
+ action: () => {
65
+ if (isValidID(anchorID)) {
66
+ onConfirm(anchorID);
67
+ } else {
68
+ setMsg('ID格式錯誤!');
69
+ }
70
+ }
57
71
  }
58
72
  }
59
- }, /*#__PURE__*/_react.default.createElement(Warning, null, "\u6CE8\u610F\uFF01\u540C\u7BC7\u6587\u7AE0ID\u4E0D\u53EF\u91CD\u8907\uFF01"), /*#__PURE__*/_react.default.createElement(StyledTextInput, {
73
+ }, /*#__PURE__*/_react.default.createElement(Warning, null, "\u6CE8\u610F\uFF01\u540C\u7BC7\u6587\u7AE0ID\u4E0D\u53EF\u91CD\u8907\uFF01ID\u9700\u4F7F\u7528\u534A\u578B\u82F1\u6587\u5B57\u6BCD(\u5927/\u5C0F\u5BEB)\u958B\u982D\uFF0C\u63A5\u7E8C \u82F1\u6587\u5B57\u6BCD/\u6578\u5B57/-/_"), /*#__PURE__*/_react.default.createElement("p", null, "\u7BC4\u4F8B: part1, Section-234, table_5"), /*#__PURE__*/_react.default.createElement(StyledTextInput, {
60
74
  placeholder: "\u9328\u9EDE\u6587\u5B57(ID)",
61
75
  type: "text",
62
- value: anchorLabel,
63
- onChange: e => setTOCLabel(e.target.value)
64
- }));
76
+ value: anchorID,
77
+ onChange: e => setAnchorID(e.target.value)
78
+ }), msg && /*#__PURE__*/_react.default.createElement(Warning, null, msg));
65
79
  };
80
+ exports.AnchorIDEditor = AnchorIDEditor;
66
81
  const EditableAnchor = props => {
67
82
  var _contentState$getEnti;
68
83
  const {
@@ -87,9 +102,9 @@ const EditableAnchor = props => {
87
102
  }
88
103
  });
89
104
  };
90
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isModalOpen && /*#__PURE__*/_react.default.createElement(AnchorLabelEditor, {
105
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isModalOpen && /*#__PURE__*/_react.default.createElement(AnchorIDEditor, {
91
106
  isOpen: isModalOpen,
92
- anchorLabelValue: anchorID,
107
+ anchorIDValue: anchorID,
93
108
  onConfirm: onAnchorIDChange,
94
109
  onCancel: () => {
95
110
  setIsModalOpen(false);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kids-reporter/draft-editor",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {