@seafile/sdoc-editor 3.0.84 → 3.0.85

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.
Files changed (23) hide show
  1. package/dist/api/seafile-api.js +21 -20
  2. package/dist/assets/css/sdoc-editor-plugins.css +38 -0
  3. package/dist/constants/index.js +1 -2
  4. package/dist/context.js +9 -23
  5. package/dist/extension/commons/insert-element-dialog/index.js +26 -13
  6. package/dist/extension/plugins/code-block/render-elem.js +25 -3
  7. package/dist/extension/plugins/file-view/helpers.js +14 -2
  8. package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/constants.js +16 -0
  9. package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/index.css +96 -0
  10. package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/index.js +156 -0
  11. package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/lib.png +0 -0
  12. package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/option.css +49 -0
  13. package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/option.js +53 -0
  14. package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/select-option-group.css +37 -0
  15. package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/select-option-group.js +241 -0
  16. package/dist/extension/plugins/file-view/insert-view-dialog/index.js +232 -0
  17. package/dist/extension/plugins/file-view/insert-view-dialog/modal-portal.js +41 -0
  18. package/dist/extension/plugins/file-view/render-elem/index.js +12 -5
  19. package/dist/extension/toolbar/insert-element-toolbar/index.js +7 -8
  20. package/dist/extension/toolbar/linked-repo-popover/link-repo-list.css +6 -8
  21. package/dist/extension/toolbar/linked-repo-popover/link-repo-list.js +67 -26
  22. package/dist/extension/toolbar/side-toolbar/insert-block-menu.js +8 -9
  23. package/package.json +3 -3
@@ -312,34 +312,35 @@ var SeafileAPI = /*#__PURE__*/function () {
312
312
  return this.req.get(url);
313
313
  }
314
314
  }, {
315
- key: "insertFileRepo",
316
- value: function insertFileRepo(docUuid, wikiId, data) {
317
- var url = "/api/v2.1/wiki2/".concat(wikiId, "/file-repos/");
315
+ key: "insertWikiView",
316
+ value: function insertWikiView(wikiId, docUuid, data) {
317
+ var url = "/api/v2.1/wiki2/".concat(wikiId, "/views/");
318
318
  var form = new FormData();
319
- form.append('file_uuid', docUuid); // used for valid permission
320
- form.append('name', data.name);
321
- form.append('view_name', data.view_name);
322
- form.append('linked_repo_id', data.linked_repo_id);
319
+ form.append('file_uuid', docUuid);
320
+ form.append('name', data.view_name);
321
+ form.append('type', data.view_type);
322
+ form.append('link_repo_id', data.link_repo_id);
323
+ return this.req.post(url, form);
324
+ }
325
+ }, {
326
+ key: "duplicateWikiView",
327
+ value: function duplicateWikiView(wikiId, docUuid, viewId) {
328
+ var url = "/api/v2.1/wiki2/".concat(wikiId, "/duplicate-view/");
329
+ var form = new FormData();
330
+ form.append('file_uuid', docUuid);
331
+ form.append('view_id', viewId);
323
332
  return this.req.post(url, form);
324
333
  }
325
334
  }, {
326
- key: "modifyFileRepo",
327
- value: function modifyFileRepo(wikiId, fileRepoId, viewData) {
328
- var url = '/api/v2.1/wiki2/' + wikiId + '/file-repos/' + fileRepoId + '/';
335
+ key: "modifyView",
336
+ value: function modifyView(wikiId, viewId, viewData) {
337
+ var url = '/api/v2.1/wiki2/' + wikiId + '/views/';
329
338
  var data = {
330
- viewData: viewData
339
+ view_id: viewId,
340
+ view_data: viewData
331
341
  };
332
342
  return this.req.put(url, data);
333
343
  }
334
- }, {
335
- key: "duplicateFileRepo",
336
- value: function duplicateFileRepo(docUuid, wikiId, fileRepoId) {
337
- var url = "/api/v2.1/wiki2/".concat(wikiId, "/file-repos/").concat(fileRepoId, "/duplicate/");
338
- var form = new FormData();
339
- form.append('file_uuid', docUuid); // used for valid permission
340
-
341
- return this.req.post(url);
342
- }
343
344
  }]);
344
345
  }();
345
346
  var _default = exports["default"] = SeafileAPI;
@@ -275,6 +275,12 @@
275
275
  .sdoc-code-block-pre {
276
276
  background: #FAFAFA;
277
277
  border: 1px solid #f0f0f0;
278
+ position: relative;
279
+ overflow-y: hidden !important;
280
+ }
281
+
282
+ .sdoc-code-block-pre.hidden {
283
+ padding-bottom: 48px !important;
278
284
  }
279
285
 
280
286
  .sdoc-code-block-pre .sdoc-code-no-wrap {
@@ -285,6 +291,38 @@
285
291
  white-space: pre;
286
292
  }
287
293
 
294
+ .sdoc-code-block-container .sdoc-code-block-hidden-icon {
295
+ height: 32px;
296
+ display: flex;
297
+ justify-content: center;
298
+ align-items: center;
299
+ position: absolute;
300
+ left: 48%;
301
+ bottom: 8px;
302
+ }
303
+
304
+ .sdoc-code-block-container .sdoc-code-block-hidden-icon .icon-container {
305
+ width: 32px;
306
+ height: 20px;
307
+ background-color: #999;
308
+ border-radius: 30px;
309
+ display: flex;
310
+ align-items: center;
311
+ justify-content: center;
312
+ cursor: pointer;
313
+ }
314
+
315
+ .sdoc-code-block-container .sdoc-code-block-hidden-icon .icon-container .sdocfont {
316
+ color: #fff;
317
+ font-size: 12px;
318
+ }
319
+
320
+ .sdoc-code-block-code.hide-code {
321
+ max-height: 580.2px;
322
+ display: block;
323
+ overflow: hidden;
324
+ }
325
+
288
326
  .sdoc-code-block-code .sdoc-code-line {
289
327
  position: relative;
290
328
  counter-increment: number;
@@ -79,8 +79,7 @@ var INTERNAL_EVENT = exports.INTERNAL_EVENT = {
79
79
  CREATE_WHITEBOARD_FILE: 'create_whiteboard_file',
80
80
  GENERATE_EXDRAW_READ_ONLY_LINK: 'generate_exdraw_read_only_link',
81
81
  TRANSFER_PREVIEW_FILE_ID: 'transfer_preview_file_id',
82
- FILE_METADATA_COMPONENT: 'file_metadata_component',
83
- ADD_WIKI_LIBRARY_TOGGLE: 'add_wiki_library_click'
82
+ FILE_METADATA_COMPONENT: 'file_metadata_component'
84
83
  };
85
84
  var PAGE_EDIT_AREA_WIDTH = exports.PAGE_EDIT_AREA_WIDTH = 672; // 672 = 794 - 2[borderLeft + borderRight] - 120[paddingLeft + paddingRight]
86
85
  var COMMENT_EDITOR_EDIT_AREA_WIDTH = exports.COMMENT_EDITOR_EDIT_AREA_WIDTH = 364;
package/dist/context.js CHANGED
@@ -35,20 +35,6 @@ var Context = /*#__PURE__*/function () {
35
35
  _this.settings['originFileURL'] = originFileURL;
36
36
  }
37
37
  });
38
- (0, _defineProperty2["default"])(this, "getWikiSettings", function () {
39
- if (window.wiki && window.wiki.config) {
40
- var wikiSettings = window.wiki.config.wikiSettings;
41
- return wikiSettings;
42
- }
43
- return _this.settings['wikiSettings'];
44
- });
45
- (0, _defineProperty2["default"])(this, "getWikiRepos", function () {
46
- if (window.wiki && window.wiki.config) {
47
- var repos = window.wiki.config.repos;
48
- return repos;
49
- }
50
- return _this.settings['repos'];
51
- });
52
38
  (0, _defineProperty2["default"])(this, "uploadLocalImage", function (imageFiles) {
53
39
  var docUuid = _this.getSetting('docUuid');
54
40
  return _this.api.uploadSdocImage(docUuid, imageFiles).then(function (res) {
@@ -433,24 +419,24 @@ var Context = /*#__PURE__*/function () {
433
419
  return this.api.getFileMetadataInfo(docUuid, fileType);
434
420
  }
435
421
  }, {
436
- key: "insertFileRepo",
437
- value: function insertFileRepo(data) {
422
+ key: "insertWikiView",
423
+ value: function insertWikiView(data) {
438
424
  var wikiId = this.getSetting('wikiId');
439
425
  var docUuid = this.getSetting('docUuid');
440
- return this.api.insertFileRepo(docUuid, wikiId, data);
426
+ return this.api.insertWikiView(wikiId, docUuid, data);
441
427
  }
442
428
  }, {
443
- key: "duplicateFileRepo",
444
- value: function duplicateFileRepo(fileRepoId) {
429
+ key: "duplicateWikiView",
430
+ value: function duplicateWikiView(viewId) {
445
431
  var wikiId = this.getSetting('wikiId');
446
432
  var docUuid = this.getSetting('docUuid');
447
- return this.api.duplicateWikiView(docUuid, wikiId, fileRepoId);
433
+ return this.api.duplicateWikiView(wikiId, docUuid, viewId);
448
434
  }
449
435
  }, {
450
- key: "modifyFileRepo",
451
- value: function modifyFileRepo(viewId, fileRepoId, viewData) {
436
+ key: "modifyView",
437
+ value: function modifyView(viewId, viewData) {
452
438
  var wikiId = this.getSetting('wikiId');
453
- return this.api.modifyView(wikiId, fileRepoId, viewData);
439
+ return this.api.modifyView(wikiId, viewId, viewData);
454
440
  }
455
441
  }]);
456
442
  }();
@@ -15,16 +15,17 @@ var _context = _interopRequireDefault(require("../../../context"));
15
15
  var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
16
16
  var _constants2 = require("../../constants");
17
17
  var _index = _interopRequireDefault(require("../../plugins/ai/ai-module/index.js"));
18
+ var _index2 = _interopRequireDefault(require("../../plugins/file-view/insert-view-dialog/index.js"));
18
19
  var _formulaModal = _interopRequireDefault(require("../../plugins/formula/menu/formula-modal.js"));
19
20
  var _helpers = require("../../plugins/image/helpers");
20
21
  var _addLinkDialog = _interopRequireDefault(require("../../plugins/link/dialog/add-link-dialog"));
21
22
  var _dialogs = require("../../plugins/table/dialogs");
22
- var _index2 = require("../../plugins/video/constants/index.js");
23
- var _index3 = _interopRequireDefault(require("../../plugins/video/dialog/add-video-link-dialog/index.js"));
23
+ var _index3 = require("../../plugins/video/constants/index.js");
24
+ var _index4 = _interopRequireDefault(require("../../plugins/video/dialog/add-video-link-dialog/index.js"));
24
25
  var _helpers2 = require("../../plugins/video/helpers");
25
- var _index4 = _interopRequireDefault(require("../file-insert-dialog/index.js"));
26
- var _index5 = _interopRequireDefault(require("../select-file-dialog/index.js"));
27
- var _index6 = _interopRequireDefault(require("../wiki-file-insert-dialog/index.js"));
26
+ var _index5 = _interopRequireDefault(require("../file-insert-dialog/index.js"));
27
+ var _index6 = _interopRequireDefault(require("../select-file-dialog/index.js"));
28
+ var _index7 = _interopRequireDefault(require("../wiki-file-insert-dialog/index.js"));
28
29
  var InsertElementDialog = function InsertElementDialog(_ref) {
29
30
  var editor = _ref.editor;
30
31
  var _useState = (0, _react.useState)(''),
@@ -100,7 +101,7 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
100
101
  var onVideoFileChanged = (0, _react.useCallback)(function (event) {
101
102
  var files = event.target.files;
102
103
  // Show warning for 3s and no further insertion if video file is more than 5MB
103
- if (files[0].size > _index2.VIDEO_MAX_SIZE_5MB) {
104
+ if (files[0].size > _index3.VIDEO_MAX_SIZE_5MB) {
104
105
  handleDisplayAlert();
105
106
  event.target.value = null;
106
107
  return;
@@ -222,7 +223,7 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
222
223
  insertLinkCallback: insertLinkCallback,
223
224
  closeDialog: closeDialog
224
225
  };
225
- return /*#__PURE__*/_react["default"].createElement(_index5["default"], sdocLinkProps);
226
+ return /*#__PURE__*/_react["default"].createElement(_index6["default"], sdocLinkProps);
226
227
  }
227
228
  case _constants2.ELEMENT_TYPE.FILE_LINK:
228
229
  {
@@ -232,7 +233,7 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
232
233
  insertLinkCallback: insertLinkCallback,
233
234
  closeDialog: closeDialog
234
235
  };
235
- return /*#__PURE__*/_react["default"].createElement(_index5["default"], fileLinkProps);
236
+ return /*#__PURE__*/_react["default"].createElement(_index6["default"], fileLinkProps);
236
237
  }
237
238
  case _constants2.ELEMENT_TYPE.WHITEBOARD:
238
239
  {
@@ -242,7 +243,7 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
242
243
  insertWhiteboardFile: insertWhiteboardFile,
243
244
  closeDialog: closeDialog
244
245
  };
245
- return /*#__PURE__*/_react["default"].createElement(_index5["default"], whiteboardProps);
246
+ return /*#__PURE__*/_react["default"].createElement(_index6["default"], whiteboardProps);
246
247
  }
247
248
  case _constants2.ELEMENT_TYPE.VIDEO:
248
249
  {
@@ -252,11 +253,23 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
252
253
  insertVideoCallback: insertVideoCallback,
253
254
  closeDialog: closeDialog
254
255
  };
255
- return /*#__PURE__*/_react["default"].createElement(_index5["default"], videoProps);
256
+ return /*#__PURE__*/_react["default"].createElement(_index6["default"], videoProps);
256
257
  }
257
258
  case _constants2.ELEMENT_TYPE.VIDEO_LINK:
258
259
  {
259
- return /*#__PURE__*/_react["default"].createElement(_index3["default"], props);
260
+ return /*#__PURE__*/_react["default"].createElement(_index4["default"], props);
261
+ }
262
+ case _constants2.ELEMENT_TYPE.FILE_VIEW:
263
+ {
264
+ var _props = {
265
+ editor: validEditor,
266
+ element: element,
267
+ slateNode: slateNode,
268
+ insertPosition: insertPosition,
269
+ dialogType: dialogType,
270
+ closeDialog: closeDialog
271
+ };
272
+ return /*#__PURE__*/_react["default"].createElement(_index2["default"], _props);
260
273
  }
261
274
  case _constants2.ELEMENT_TYPE.FORMULA:
262
275
  {
@@ -300,13 +313,13 @@ var InsertElementDialog = function InsertElementDialog(_ref) {
300
313
  case _constants2.ELEMENT_TYPE.FILE_LINK_INSET_INPUT_TEMP:
301
314
  {
302
315
  if (editor.editorType === _constants.WIKI_EDITOR) {
303
- return /*#__PURE__*/_react["default"].createElement(_index6["default"], {
316
+ return /*#__PURE__*/_react["default"].createElement(_index7["default"], {
304
317
  element: slateNode,
305
318
  editor: editor,
306
319
  closeDialog: closeDialog
307
320
  });
308
321
  }
309
- return /*#__PURE__*/_react["default"].createElement(_index4["default"], {
322
+ return /*#__PURE__*/_react["default"].createElement(_index5["default"], {
310
323
  element: slateNode,
311
324
  editor: editor,
312
325
  closeDialog: closeDialog
@@ -11,6 +11,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm
11
11
  var _react = _interopRequireWildcard(require("react"));
12
12
  var _slate = require("@seafile/slate");
13
13
  var _slateReact = require("@seafile/slate-react");
14
+ var _classnames = _interopRequireDefault(require("classnames"));
14
15
  var _constants = require("../../../constants");
15
16
  var _useScrollContext = require("../../../hooks/use-scroll-context");
16
17
  var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
@@ -41,6 +42,10 @@ var CodeBlock = function CodeBlock(_ref) {
41
42
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
42
43
  showHoverMenu = _useState4[0],
43
44
  setShowHoverMenu = _useState4[1];
45
+ var _useState5 = (0, _react.useState)(false),
46
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
47
+ showAllCode = _useState6[0],
48
+ setShowAllCode = _useState6[1];
44
49
  var onChangeLanguage = (0, _react.useCallback)(function (lang) {
45
50
  var language = lang.value;
46
51
  var path = _slateReact.ReactEditor.findPath(editor, element);
@@ -133,6 +138,10 @@ var CodeBlock = function CodeBlock(_ref) {
133
138
  var handleScroll = function handleScroll() {
134
139
  _eventBus["default"].getInstance().dispatch(_constants.INTERNAL_EVENT.UPDATE_SEARCH_REPLACE_HIGHLIGHT);
135
140
  };
141
+ var isHiddenCodeBlockParts = children.length > 30;
142
+ var toggleHidden = function toggleHidden() {
143
+ setShowAllCode(!showAllCode);
144
+ };
136
145
  return /*#__PURE__*/_react["default"].createElement("div", Object.assign({
137
146
  "data-id": element.id
138
147
  }, attributes, {
@@ -141,11 +150,24 @@ var CodeBlock = function CodeBlock(_ref) {
141
150
  onMouseLeave: onMouseLeave
142
151
  }), /*#__PURE__*/_react["default"].createElement("pre", {
143
152
  onScroll: handleScroll,
144
- className: 'sdoc-code-block-pre',
153
+ className: (0, _classnames["default"])('sdoc-code-block-pre', {
154
+ 'hidden': isHiddenCodeBlockParts
155
+ }),
145
156
  ref: codeBlockRef
146
157
  }, /*#__PURE__*/_react["default"].createElement("code", {
147
- className: "sdoc-code-block-code ".concat(white_space === 'nowrap' ? 'sdoc-code-no-wrap' : '')
148
- }, children)), showHoverMenu && /*#__PURE__*/_react["default"].createElement(_hoverMenu["default"], {
158
+ className: "sdoc-code-block-code ".concat(white_space === 'nowrap' ? 'sdoc-code-no-wrap' : '', " ").concat(!showAllCode ? 'hide-code' : '')
159
+ }, children)), children.length > 30 && /*#__PURE__*/_react["default"].createElement("span", {
160
+ className: "sdoc-code-block-hidden-icon",
161
+ onClick: toggleHidden,
162
+ contentEditable: false,
163
+ suppressContentEditableWarning: true
164
+ }, /*#__PURE__*/_react["default"].createElement("span", {
165
+ className: "icon-container"
166
+ }, !showAllCode ? /*#__PURE__*/_react["default"].createElement("i", {
167
+ className: "sdocfont sdoc-arrow-down arrow"
168
+ }) : /*#__PURE__*/_react["default"].createElement("i", {
169
+ className: "sdocfont sdoc-arrow-up arrow"
170
+ }))), showHoverMenu && /*#__PURE__*/_react["default"].createElement(_hoverMenu["default"], {
149
171
  menuPosition: menuPosition,
150
172
  onChangeLanguage: onChangeLanguage,
151
173
  language: element.language,
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.updateFileView = exports.insertFileView = exports.getFileUrl = exports.genFileViewNode = exports.calculateSize = void 0;
7
+ exports.updateFileView = exports.insertFileView = exports.getWikiSettings = exports.getFileUrl = exports.getAccessibleRepos = exports.genFileViewNode = exports.calculateSize = void 0;
8
8
  var _slate = require("@seafile/slate");
9
9
  var _slateReact = require("@seafile/slate-react");
10
10
  var _slugid = _interopRequireDefault(require("slugid"));
@@ -18,6 +18,18 @@ var getFileUrl = exports.getFileUrl = function getFileUrl(element) {
18
18
  view_id = data.view_id;
19
19
  return "".concat(serviceUrl, "/wiki/").concat(wiki_id, "/repo-views/").concat(view_id, "/");
20
20
  };
21
+ var getWikiSettings = exports.getWikiSettings = function getWikiSettings() {
22
+ var wikiId = _context["default"].getSetting('wikiId');
23
+ var WIKI_SETTING_INTO_KEY = "seafile_wiki_".concat(wikiId, "_settings_info");
24
+ var settings = window.localStorage.getItem(WIKI_SETTING_INTO_KEY);
25
+ return JSON.parse(settings);
26
+ };
27
+ var getAccessibleRepos = exports.getAccessibleRepos = function getAccessibleRepos() {
28
+ var wikiId = _context["default"].getSetting('wikiId');
29
+ var WIKI_REPO_INFO_KEY = "seafile_wiki_".concat(wikiId, "_repos_info");
30
+ var repos = window.localStorage.getItem(WIKI_REPO_INFO_KEY);
31
+ return JSON.parse(repos);
32
+ };
21
33
  var genFileViewNode = exports.genFileViewNode = function genFileViewNode(data) {
22
34
  return {
23
35
  id: _slugid["default"].nice(),
@@ -31,7 +43,7 @@ var genFileViewNode = exports.genFileViewNode = function genFileViewNode(data) {
31
43
  };
32
44
  var insertFileView = exports.insertFileView = function insertFileView(data, editor, position, slateNode) {
33
45
  if (!data) return;
34
- if (!data.wiki_id || !data.file_repo_id) return;
46
+ if (!data.view_name || !data.view_type || !data.link_repo_id) return;
35
47
  var fileViewNode = genFileViewNode(data);
36
48
  if (position === _constants.INSERT_POSITION.AFTER) {
37
49
  var path = _slate.Editor.path(editor, editor.selection);
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var KeyCodes = {
8
+ Tab: 9,
9
+ Escape: 27,
10
+ Esc: 27,
11
+ LeftArrow: 37,
12
+ UpArrow: 38,
13
+ RightArrow: 39,
14
+ DownArrow: 40
15
+ };
16
+ var _default = exports["default"] = KeyCodes;
@@ -0,0 +1,96 @@
1
+ .sdoc-select.group-select {
2
+ position: relative;
3
+ }
4
+
5
+ .sdoc-select.group-select.custom-select {
6
+ display: flex;
7
+ padding: 5px 10px;
8
+ border-radius: 3px;
9
+ align-items: center;
10
+ justify-content: space-between;
11
+ max-width: 900px;
12
+ user-select: none;
13
+ text-align: left;
14
+ border-color: 1px solid rgba(0, 40, 100, 0.12);
15
+ height: auto;
16
+ min-height: 38px;
17
+ cursor: pointer;
18
+ }
19
+
20
+ .sdoc-select.group-select.custom-select:focus,
21
+ .sdoc-select.group-select.custom-select.focus {
22
+ border-color: #1991eb !important;
23
+ box-shadow: 0 0 0 2px rgba(70, 127, 207, 0.25);
24
+ }
25
+
26
+ .sdoc-select.group-select.custom-select.disabled:focus,
27
+ .sdoc-select.group-select.custom-select.focus.disabled,
28
+ .sdoc-select.group-select.custom-select.disabled:hover {
29
+ border-color: rgba(0, 40, 100, 0.12) !important;
30
+ box-shadow: unset;
31
+ cursor: default;
32
+ }
33
+
34
+ .sdoc-select.group-select .sdoc-font-down {
35
+ display: inline-block;
36
+ color: #999;
37
+ transform: translateY(2px);
38
+ transition: all 0.1s;
39
+ font-size: 14px !important;
40
+ }
41
+
42
+ .sdoc-select.group-select .sdoc-font-down:hover {
43
+ color: #666;
44
+ }
45
+
46
+ .sdoc-select.group-select .selected-option {
47
+ display: flex;
48
+ flex: 1;
49
+ overflow: hidden;
50
+ flex-wrap: nowrap;
51
+ align-items: center;
52
+ justify-content: space-between;
53
+ background: #fff;
54
+ }
55
+
56
+ .sdoc-select.group-select.selector-collaborator .option-group .option-group-content {
57
+ padding: 10px;
58
+ }
59
+
60
+ .sdoc-select.group-select.custom-select.selector-collaborator .option-group .option-group-content {
61
+ padding: 10px 0;
62
+ }
63
+
64
+ .sdoc-select.group-select.custom-select.selector-collaborator .option {
65
+ padding: 5px 0 5px 10px !important;
66
+ line-height: 20px;
67
+ }
68
+
69
+ .sdoc-select.group-select .select-placeholder {
70
+ line-height: 1;
71
+ font-size: 14px;
72
+ white-space: nowrap;
73
+ }
74
+
75
+ .sdoc-select.group-select .selected-option-show {
76
+ display: flex;
77
+ flex-wrap: wrap;
78
+ gap: 4px;
79
+ }
80
+
81
+ .sdoc-select.group-select .selected-option-show .selected-option-item {
82
+ display: flex;
83
+ align-items: center;
84
+ background-color: #fff;
85
+ border-radius: 0px;
86
+ }
87
+
88
+ .sdoc-select.group-select .selected-option-show .selected-option-item .selected-option-item-name {
89
+ font-size: 13px;
90
+ color: #212529;
91
+ }
92
+
93
+ .sdoc-select.group-select .selected-option-show .selected-option-item .sf2-icon-close {
94
+ cursor: pointer;
95
+ color: rgb(103, 103, 103);
96
+ }
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/classCallCheck"));
10
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createClass"));
11
+ var _callSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/callSuper"));
12
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/inherits"));
13
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/defineProperty"));
14
+ var _react = _interopRequireWildcard(require("react"));
15
+ var _classnames = _interopRequireDefault(require("classnames"));
16
+ var _modalPortal = _interopRequireDefault(require("../modal-portal.js"));
17
+ var _lib = _interopRequireDefault(require("./lib.png"));
18
+ var _selectOptionGroup = _interopRequireDefault(require("./select-option-group.js"));
19
+ require("./index.css");
20
+ var DropdownSelect = /*#__PURE__*/function (_Component) {
21
+ function DropdownSelect(props) {
22
+ var _this;
23
+ (0, _classCallCheck2["default"])(this, DropdownSelect);
24
+ _this = (0, _callSuper2["default"])(this, DropdownSelect, [props]);
25
+ (0, _defineProperty2["default"])(_this, "onSelectToggle", function (event) {
26
+ event.preventDefault();
27
+ if (_this.state.isShowSelectOptions) event.stopPropagation();
28
+ var eventClassName = event.target.className;
29
+ if (eventClassName.indexOf('sf2-icon-close') > -1 || eventClassName === 'option-group-search') return;
30
+ if (event.target.value === '') return;
31
+ _this.setState({
32
+ isShowSelectOptions: !_this.state.isShowSelectOptions
33
+ });
34
+ });
35
+ (0, _defineProperty2["default"])(_this, "onClickOutside", function (event) {
36
+ if (_this.props.isShowSelected && event.target.className.includes('icon-fork-number')) {
37
+ return;
38
+ }
39
+ if (!_this.selector.contains(event.target)) {
40
+ _this.closeSelect();
41
+ }
42
+ });
43
+ (0, _defineProperty2["default"])(_this, "closeSelect", function () {
44
+ _this.setState({
45
+ isShowSelectOptions: false
46
+ });
47
+ });
48
+ (0, _defineProperty2["default"])(_this, "getSelectedOptionTop", function () {
49
+ if (!_this.selector) return 38;
50
+ var _this$selector$getBou = _this.selector.getBoundingClientRect(),
51
+ height = _this$selector$getBou.height;
52
+ return height;
53
+ });
54
+ (0, _defineProperty2["default"])(_this, "getFilterOptions", function (searchValue) {
55
+ var options = _this.props.options;
56
+ var validSearchVal = searchValue.trim().toLowerCase();
57
+ if (!validSearchVal) return options || [];
58
+ return options.filter(function (option) {
59
+ return option.name.toLowerCase().includes(validSearchVal);
60
+ });
61
+ });
62
+ (0, _defineProperty2["default"])(_this, "onSelectOption", function (option) {
63
+ _this.props.onSelectOption(option);
64
+ _this.setState({
65
+ isShowSelectOptions: false
66
+ });
67
+ });
68
+ _this.state = {
69
+ isShowSelectOptions: false
70
+ };
71
+ return _this;
72
+ }
73
+ (0, _inherits2["default"])(DropdownSelect, _Component);
74
+ return (0, _createClass2["default"])(DropdownSelect, [{
75
+ key: "UNSAFE_componentWillReceiveProps",
76
+ value: function UNSAFE_componentWillReceiveProps(nextProps) {
77
+ var _nextProps$selectedOp,
78
+ _this$props$selectedO,
79
+ _this2 = this;
80
+ if (((_nextProps$selectedOp = nextProps.selectedOption) === null || _nextProps$selectedOp === void 0 ? void 0 : _nextProps$selectedOp.id) !== ((_this$props$selectedO = this.props.selectedOption) === null || _this$props$selectedO === void 0 ? void 0 : _this$props$selectedO.id)) {
81
+ // when selectedOption change and dom rendered, calculate top
82
+ setTimeout(function () {
83
+ _this2.forceUpdate();
84
+ }, 1);
85
+ }
86
+ }
87
+ }, {
88
+ key: "render",
89
+ value: function render() {
90
+ var _this3 = this;
91
+ var _this$props = this.props,
92
+ className = _this$props.className,
93
+ selectedOption = _this$props.selectedOption,
94
+ options = _this$props.options,
95
+ placeholder = _this$props.placeholder,
96
+ searchPlaceholder = _this$props.searchPlaceholder,
97
+ noOptionsPlaceholder = _this$props.noOptionsPlaceholder,
98
+ isInModal = _this$props.isInModal,
99
+ _this$props$hasIcon = _this$props.hasIcon,
100
+ hasIcon = _this$props$hasIcon === void 0 ? false : _this$props$hasIcon;
101
+ var isShowSelectOptions = this.state.isShowSelectOptions;
102
+ var clazzName = (0, _classnames["default"])('sdoc-select group-select custom-select', {
103
+ 'focus': isShowSelectOptions
104
+ }, className);
105
+ return /*#__PURE__*/_react["default"].createElement("div", {
106
+ ref: function ref(node) {
107
+ return _this3.selector = node;
108
+ },
109
+ className: clazzName,
110
+ onClick: this.onSelectToggle
111
+ }, /*#__PURE__*/_react["default"].createElement("div", {
112
+ className: "selected-option"
113
+ }, selectedOption && /*#__PURE__*/_react["default"].createElement("span", {
114
+ className: "selected-option-show"
115
+ }, /*#__PURE__*/_react["default"].createElement("span", {
116
+ className: "selected-option-item mr-1 px-1"
117
+ }, hasIcon && /*#__PURE__*/_react["default"].createElement("img", {
118
+ src: _lib["default"],
119
+ width: '24px',
120
+ alt: "",
121
+ className: "mr-2"
122
+ }), /*#__PURE__*/_react["default"].createElement("span", {
123
+ className: "selected-option-item-name"
124
+ }, selectedOption.name))), !selectedOption && /*#__PURE__*/_react["default"].createElement("span", {
125
+ className: "select-placeholder"
126
+ }, placeholder), /*#__PURE__*/_react["default"].createElement("i", {
127
+ className: "sdocfont sdoc-font-down"
128
+ })), this.state.isShowSelectOptions && !isInModal && /*#__PURE__*/_react["default"].createElement(_selectOptionGroup["default"], {
129
+ selectedOption: selectedOption,
130
+ top: this.getSelectedOptionTop(),
131
+ options: options,
132
+ onSelectOption: this.onSelectOption,
133
+ searchPlaceholder: searchPlaceholder,
134
+ noOptionsPlaceholder: noOptionsPlaceholder,
135
+ onClickOutside: this.onClickOutside,
136
+ closeSelect: this.closeSelect,
137
+ getFilterOptions: this.getFilterOptions
138
+ }), this.state.isShowSelectOptions && isInModal && /*#__PURE__*/_react["default"].createElement(_modalPortal["default"], null, /*#__PURE__*/_react["default"].createElement(_selectOptionGroup["default"], {
139
+ hasIcon: hasIcon,
140
+ className: className,
141
+ selectedOption: selectedOption,
142
+ position: this.selector.getBoundingClientRect(),
143
+ isInModal: isInModal,
144
+ top: this.getSelectedOptionTop(),
145
+ options: options,
146
+ onSelectOption: this.onSelectOption,
147
+ searchPlaceholder: searchPlaceholder,
148
+ noOptionsPlaceholder: noOptionsPlaceholder,
149
+ onClickOutside: this.onClickOutside,
150
+ closeSelect: this.closeSelect,
151
+ getFilterOptions: this.getFilterOptions
152
+ })));
153
+ }
154
+ }]);
155
+ }(_react.Component);
156
+ var _default = exports["default"] = DropdownSelect;