@seafile/sdoc-editor 2.0.182 → 2.0.183
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.
- package/dist/api/seafile-api.js +6 -0
- package/dist/comment/components/global-comment/global-comment-header.js +69 -7
- package/dist/comment/components/global-comment/index.css +20 -0
- package/dist/comment/components/global-comment/index.js +5 -7
- package/dist/comment/constants/index.js +0 -1
- package/dist/comment/hooks/comment-hooks/use-comment-list.js +0 -5
- package/dist/constants/index.js +2 -1
- package/dist/context.js +6 -0
- package/dist/extension/commons/select-file-dialog/index.css +65 -15
- package/dist/extension/commons/select-file-dialog/index.js +113 -40
- package/dist/extension/commons/select-file-dialog/list-view/index.css +71 -0
- package/dist/extension/commons/select-file-dialog/list-view/index.js +146 -0
- package/dist/extension/commons/select-file-dialog/{local-files → tree-view}/index.css +1 -2
- package/dist/extension/commons/select-file-dialog/{local-files → tree-view}/index.js +30 -16
- package/dist/extension/plugins/sdoc-link/hover-menu/index.js +1 -1
- package/package.json +2 -2
- package/dist/comment/components/global-comment/global-comment-body-header.js +0 -91
package/dist/api/seafile-api.js
CHANGED
|
@@ -305,6 +305,12 @@ var SeafileAPI = /*#__PURE__*/function () {
|
|
|
305
305
|
var url = "/api/v2.1/seadoc/access-token-by-uuid/".concat(docUuid, "/");
|
|
306
306
|
return this.req.get(url);
|
|
307
307
|
}
|
|
308
|
+
}, {
|
|
309
|
+
key: "getFileMetadataInfo",
|
|
310
|
+
value: function getFileMetadataInfo(docUuid, fileType) {
|
|
311
|
+
var url = '/api/v2.1/seadoc/search-metadata-records/' + docUuid + '/?search_type=' + fileType;
|
|
312
|
+
return this.req.get(url);
|
|
313
|
+
}
|
|
308
314
|
}]);
|
|
309
315
|
}();
|
|
310
316
|
var _default = exports["default"] = SeafileAPI;
|
|
@@ -11,22 +11,54 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
|
|
|
11
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
12
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
13
13
|
var _reactI18next = require("react-i18next");
|
|
14
|
+
var _reactstrap = require("reactstrap");
|
|
14
15
|
var _tooltip = _interopRequireDefault(require("../../../components/tooltip"));
|
|
15
16
|
var _constants = require("../../../constants");
|
|
16
17
|
var _context2 = _interopRequireDefault(require("../../../context"));
|
|
17
18
|
var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
18
19
|
var _mouseEvent = require("../../../utils/mouse-event");
|
|
19
|
-
var
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
var _constants2 = require("../../constants");
|
|
21
|
+
var CommentTypeDropdownItem = function CommentTypeDropdownItem(_ref) {
|
|
22
|
+
var type = _ref.type,
|
|
23
|
+
setCommentType = _ref.setCommentType,
|
|
24
|
+
commentType = _ref.commentType;
|
|
23
25
|
var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
|
|
24
26
|
t = _useTranslation.t;
|
|
27
|
+
var handleCommentTypeChanged = (0, _react.useCallback)(function (event, type) {
|
|
28
|
+
(0, _mouseEvent.eventStopPropagation)(event);
|
|
29
|
+
setCommentType(type);
|
|
30
|
+
|
|
31
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
32
|
+
}, []);
|
|
33
|
+
var isSelected = commentType === type;
|
|
34
|
+
return /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownItem, {
|
|
35
|
+
className: "sdoc-dropdown-menu-item",
|
|
36
|
+
tag: 'div',
|
|
37
|
+
onClick: function onClick(event) {
|
|
38
|
+
return handleCommentTypeChanged(event, type);
|
|
39
|
+
}
|
|
40
|
+
}, isSelected && /*#__PURE__*/_react["default"].createElement("i", {
|
|
41
|
+
className: "sdoc-file-checked sdocfont sdoc-check-mark"
|
|
42
|
+
}), t(type));
|
|
43
|
+
};
|
|
44
|
+
var GlobalCommentHeader = function GlobalCommentHeader(_ref2) {
|
|
45
|
+
var toggle = _ref2.toggle,
|
|
46
|
+
activeCommentGroup = _ref2.activeCommentGroup,
|
|
47
|
+
setCurrentCommentGroup = _ref2.setCurrentCommentGroup,
|
|
48
|
+
commentType = _ref2.commentType,
|
|
49
|
+
setCommentType = _ref2.setCommentType,
|
|
50
|
+
commentList = _ref2.commentList;
|
|
51
|
+
var _useTranslation2 = (0, _reactI18next.useTranslation)('sdoc-editor'),
|
|
52
|
+
t = _useTranslation2.t;
|
|
25
53
|
var panelHeaderRef = (0, _react.useRef)(null);
|
|
26
54
|
var _useState = (0, _react.useState)(false),
|
|
27
55
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
28
56
|
isMounted = _useState2[0],
|
|
29
57
|
setIsMounted = _useState2[1];
|
|
58
|
+
var _useState3 = (0, _react.useState)(false),
|
|
59
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
60
|
+
isDropdownOpen = _useState4[0],
|
|
61
|
+
setDropdownOpen = _useState4[1];
|
|
30
62
|
(0, _react.useEffect)(function () {
|
|
31
63
|
if (panelHeaderRef.current) {
|
|
32
64
|
setIsMounted(true);
|
|
@@ -37,7 +69,7 @@ var GlobalCommentHeader = function GlobalCommentHeader(_ref) {
|
|
|
37
69
|
setCurrentCommentGroup(null);
|
|
38
70
|
}, [setCurrentCommentGroup]);
|
|
39
71
|
var toggleReadAll = (0, _react.useCallback)(/*#__PURE__*/function () {
|
|
40
|
-
var
|
|
72
|
+
var _ref3 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regenerator2["default"])().m(function _callee(event) {
|
|
41
73
|
var res, notifications, eventBus, _t;
|
|
42
74
|
return (0, _regenerator2["default"])().w(function (_context) {
|
|
43
75
|
while (1) switch (_context.p = _context.n) {
|
|
@@ -67,7 +99,7 @@ var GlobalCommentHeader = function GlobalCommentHeader(_ref) {
|
|
|
67
99
|
}, _callee, null, [[1, 4]]);
|
|
68
100
|
}));
|
|
69
101
|
return function (_x) {
|
|
70
|
-
return
|
|
102
|
+
return _ref3.apply(this, arguments);
|
|
71
103
|
};
|
|
72
104
|
}(), []);
|
|
73
105
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
@@ -84,10 +116,40 @@ var GlobalCommentHeader = function GlobalCommentHeader(_ref) {
|
|
|
84
116
|
}
|
|
85
117
|
})), /*#__PURE__*/_react["default"].createElement("span", {
|
|
86
118
|
className: "title"
|
|
87
|
-
}, activeCommentGroup ? t('Comment_details') : t('
|
|
119
|
+
}, activeCommentGroup ? t('Comment_details') : "".concat(t(commentType)).concat(commentList.length > 0 ? " (".concat(commentList.length, ")") : ''))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
88
120
|
ref: panelHeaderRef,
|
|
89
121
|
className: "comments-panel-header-right"
|
|
90
122
|
}, !activeCommentGroup && /*#__PURE__*/_react["default"].createElement("div", {
|
|
123
|
+
id: "comment-types",
|
|
124
|
+
className: "sdoc-icon-btn",
|
|
125
|
+
onClick: function onClick() {
|
|
126
|
+
return setDropdownOpen(!isDropdownOpen);
|
|
127
|
+
}
|
|
128
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
129
|
+
className: "sdocfont sdoc-filter1"
|
|
130
|
+
}), isMounted && /*#__PURE__*/_react["default"].createElement(_tooltip["default"], {
|
|
131
|
+
target: "comment-types"
|
|
132
|
+
}, t('Comment_filter')), /*#__PURE__*/_react["default"].createElement(_reactstrap.Dropdown, {
|
|
133
|
+
isOpen: isDropdownOpen,
|
|
134
|
+
toggle: function toggle() {
|
|
135
|
+
return setDropdownOpen(!isDropdownOpen);
|
|
136
|
+
}
|
|
137
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownMenu, {
|
|
138
|
+
className: "sdoc-dropdown-menu sdoc-comment-filter-dropdown",
|
|
139
|
+
container: "comment-types"
|
|
140
|
+
}, /*#__PURE__*/_react["default"].createElement(CommentTypeDropdownItem, {
|
|
141
|
+
type: _constants2.COMMENT_TYPES.ALL,
|
|
142
|
+
setCommentType: setCommentType,
|
|
143
|
+
commentType: commentType
|
|
144
|
+
}), /*#__PURE__*/_react["default"].createElement(CommentTypeDropdownItem, {
|
|
145
|
+
type: _constants2.COMMENT_TYPES.RESOLVED,
|
|
146
|
+
setCommentType: setCommentType,
|
|
147
|
+
commentType: commentType
|
|
148
|
+
}), /*#__PURE__*/_react["default"].createElement(CommentTypeDropdownItem, {
|
|
149
|
+
type: _constants2.COMMENT_TYPES.UNRESOLVED,
|
|
150
|
+
setCommentType: setCommentType,
|
|
151
|
+
commentType: commentType
|
|
152
|
+
})))), !activeCommentGroup && /*#__PURE__*/_react["default"].createElement("div", {
|
|
91
153
|
id: "sdoc-read-all-btn",
|
|
92
154
|
className: "sdoc-icon-btn",
|
|
93
155
|
onClick: toggleReadAll
|
|
@@ -64,6 +64,26 @@
|
|
|
64
64
|
display: flex;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
.comments-panel-header-right .sdoc-comment-filter-dropdown {
|
|
68
|
+
position: absolute;
|
|
69
|
+
right: 72px;
|
|
70
|
+
top: 36px !important;
|
|
71
|
+
left: unset !important;
|
|
72
|
+
box-shadow: 0 4px 10px #eee;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.comments-panel-header-right .sdoc-dropdown-menu-item {
|
|
76
|
+
position: relative;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.comments-panel-header-right .sdoc-file-checked {
|
|
80
|
+
position: absolute;
|
|
81
|
+
left: 7px;
|
|
82
|
+
color: #798d99;
|
|
83
|
+
font-size: 12px;
|
|
84
|
+
font-weight: 400;
|
|
85
|
+
}
|
|
86
|
+
|
|
67
87
|
.sdoc-comment-drawer .comments-panel-header-right .sdoc-icon-btn:not(:last-child) {
|
|
68
88
|
margin-right: 4px;
|
|
69
89
|
}
|
|
@@ -22,7 +22,6 @@ var _constants = require("../../constants");
|
|
|
22
22
|
var _useCommentList2 = _interopRequireDefault(require("../../hooks/comment-hooks/use-comment-list"));
|
|
23
23
|
var _commentItemCollapseWrapper = _interopRequireDefault(require("../comment-item-collapse-wrapper"));
|
|
24
24
|
var _commentItemWrapper = _interopRequireDefault(require("../comment-item-wrapper"));
|
|
25
|
-
var _globalCommentBodyHeader = _interopRequireDefault(require("./global-comment-body-header"));
|
|
26
25
|
var _globalCommentEditor = _interopRequireDefault(require("./global-comment-editor"));
|
|
27
26
|
var _globalCommentHeader = _interopRequireDefault(require("./global-comment-header"));
|
|
28
27
|
require("./index.css");
|
|
@@ -190,14 +189,13 @@ var GlobalComment = function GlobalComment(_ref) {
|
|
|
190
189
|
}, /*#__PURE__*/_react["default"].createElement(_globalCommentHeader["default"], {
|
|
191
190
|
toggle: closePlugin,
|
|
192
191
|
activeCommentGroup: activeCommentGroup,
|
|
193
|
-
setCurrentCommentGroup: setCurrentCommentGroup
|
|
194
|
-
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
195
|
-
className: "comments-panel-body"
|
|
196
|
-
}, !activeCommentGroup && /*#__PURE__*/_react["default"].createElement(_globalCommentBodyHeader["default"], {
|
|
197
|
-
commentList: commentList,
|
|
192
|
+
setCurrentCommentGroup: setCurrentCommentGroup,
|
|
198
193
|
commentType: commentType,
|
|
199
|
-
setCommentType: setCommentType
|
|
194
|
+
setCommentType: setCommentType,
|
|
195
|
+
commentList: commentList
|
|
200
196
|
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
197
|
+
className: "comments-panel-body"
|
|
198
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
201
199
|
ref: contentRef,
|
|
202
200
|
className: "comments-panel-body__content"
|
|
203
201
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.UP = exports.POPOVER_ADDING_HEIGHT = exports.LINE_HEIGHT = exports.FONT_SIZE_WIDTH = exports.DOWN = exports.DOC_NOTIFICATION_REDUCER_TYPE = exports.DOC_COMMENT_ELEMENT_ID = exports.COMMENT_URL_CLASSNAME = exports.COMMENT_TYPES = void 0;
|
|
7
7
|
var COMMENT_TYPES = exports.COMMENT_TYPES = {
|
|
8
|
-
DOC: 'Doc_comments',
|
|
9
8
|
ALL: 'All_comments',
|
|
10
9
|
RESOLVED: 'Resolved_comments',
|
|
11
10
|
UNRESOLVED: 'Unresolved_comments'
|
|
@@ -42,11 +42,6 @@ var useCommentList = function useCommentList() {
|
|
|
42
42
|
return !item.resolved;
|
|
43
43
|
});
|
|
44
44
|
setCommentList(_commentList3);
|
|
45
|
-
} else if (commentType === _constants.COMMENT_TYPES.DOC) {
|
|
46
|
-
var _commentList4 = comment_list.filter(function (comment) {
|
|
47
|
-
return comment.detail.element_id === _constants.DOC_COMMENT_ELEMENT_ID;
|
|
48
|
-
});
|
|
49
|
-
setCommentList(_commentList4);
|
|
50
45
|
}
|
|
51
46
|
}, [commentType, comment_list]);
|
|
52
47
|
return {
|
package/dist/constants/index.js
CHANGED
|
@@ -77,7 +77,8 @@ var INTERNAL_EVENT = exports.INTERNAL_EVENT = {
|
|
|
77
77
|
IMAGE_COLUMN_TOGGLE: 'Image_column_toggle',
|
|
78
78
|
CREATE_WHITEBOARD_FILE: 'create_whiteboard_file',
|
|
79
79
|
GENERATE_EXDRAW_READ_ONLY_LINK: 'generate_exdraw_read_only_link',
|
|
80
|
-
TRANSFER_PREVIEW_FILE_ID: 'transfer_preview_file_id'
|
|
80
|
+
TRANSFER_PREVIEW_FILE_ID: 'transfer_preview_file_id',
|
|
81
|
+
FILE_METADATA_COMPONENT: 'file_metadata_component'
|
|
81
82
|
};
|
|
82
83
|
var PAGE_EDIT_AREA_WIDTH = exports.PAGE_EDIT_AREA_WIDTH = 672; // 672 = 794 - 2[borderLeft + borderRight] - 120[paddingLeft + paddingRight]
|
|
83
84
|
var COMMENT_EDITOR_EDIT_AREA_WIDTH = exports.COMMENT_EDITOR_EDIT_AREA_WIDTH = 364;
|
package/dist/context.js
CHANGED
|
@@ -384,6 +384,12 @@ var Context = /*#__PURE__*/function () {
|
|
|
384
384
|
value: function getTokenByDocUuid(docUuid) {
|
|
385
385
|
return this.api.getTokenByDocUuid(docUuid);
|
|
386
386
|
}
|
|
387
|
+
}, {
|
|
388
|
+
key: "getFileMetadataInfo",
|
|
389
|
+
value: function getFileMetadataInfo(fileType) {
|
|
390
|
+
var docUuid = this.getDocUuid();
|
|
391
|
+
return this.api.getFileMetadataInfo(docUuid, fileType);
|
|
392
|
+
}
|
|
387
393
|
}]);
|
|
388
394
|
}();
|
|
389
395
|
var context = new Context();
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
.sdoc-file-select-dialog {
|
|
2
|
-
max-width:
|
|
2
|
+
max-width: 700px;
|
|
3
3
|
}
|
|
4
4
|
|
|
5
5
|
.sdoc-file-select-dialog .sdoc-file-select-modal {
|
|
6
|
-
width:
|
|
6
|
+
width: 700px;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
.sdoc-file-select-dialog .sdoc-file-select-footer {
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
display: flex;
|
|
38
38
|
align-items: center;
|
|
39
39
|
justify-content: center;
|
|
40
|
-
margin: auto;
|
|
40
|
+
margin: auto 0;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
.search-container {
|
|
@@ -78,13 +78,6 @@
|
|
|
78
78
|
cursor: pointer;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
.sdoc-files-search-popover-container {
|
|
82
|
-
display: flex;
|
|
83
|
-
justify-content: center;
|
|
84
|
-
align-items: center;
|
|
85
|
-
width: 200px;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
81
|
.sdoc-search-wrapper {
|
|
89
82
|
position: relative;
|
|
90
83
|
display: flex;
|
|
@@ -94,10 +87,9 @@
|
|
|
94
87
|
|
|
95
88
|
.sdoc-search-input {
|
|
96
89
|
flex: 1;
|
|
97
|
-
height:
|
|
98
|
-
padding: 0
|
|
90
|
+
height: 38px;
|
|
91
|
+
padding: 0 35px;
|
|
99
92
|
line-height: 28px;
|
|
100
|
-
|
|
101
93
|
}
|
|
102
94
|
|
|
103
95
|
.sdoc-search-input::placeholder {
|
|
@@ -128,10 +120,68 @@
|
|
|
128
120
|
|
|
129
121
|
.sdoc-files-search-popover-container .sdoc-search-wrapper .sdoc-search {
|
|
130
122
|
position: absolute;
|
|
131
|
-
left:
|
|
123
|
+
left: 10px;
|
|
132
124
|
}
|
|
133
125
|
|
|
134
126
|
.sdoc-files-search-popover-container .sdoc-search-wrapper .sdoc-close {
|
|
135
127
|
position: absolute;
|
|
136
|
-
right:
|
|
128
|
+
right: 9px;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.sdoc-file-select-container .sdoc-file-select-wrapper {
|
|
132
|
+
display: flex;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.sdoc-file-select-wrapper .sdoc-file-metadata-wrapper {
|
|
136
|
+
display: flex;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.sdoc-file-left-panel {
|
|
140
|
+
width: 100%;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.sdoc-file-left-panel .sdoc-files-search-popover-container {
|
|
144
|
+
padding: 8px 16px 0 16px;
|
|
145
|
+
display: flex;
|
|
146
|
+
justify-content: center;
|
|
147
|
+
align-items: center;
|
|
148
|
+
width: 100%;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.modal-header-container .modal-operation-container {
|
|
152
|
+
display: flex;
|
|
153
|
+
align-items: center;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.toggle-view {
|
|
157
|
+
display: flex;
|
|
158
|
+
margin-right: 0.5rem;
|
|
159
|
+
border: 1px solid #eee;
|
|
160
|
+
border-radius: 3px;
|
|
161
|
+
height: 36px;
|
|
162
|
+
padding: 3px;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.toggle-view-container {
|
|
166
|
+
display: flex;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.toggle-view .sdoc-tree-view,
|
|
170
|
+
.toggle-view .sdoc-list-view {
|
|
171
|
+
min-width: 66px;
|
|
172
|
+
width: fit-content;
|
|
173
|
+
border-radius: 2px;
|
|
174
|
+
display: flex;
|
|
175
|
+
justify-content: center;
|
|
176
|
+
align-items: center;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.toggle-view .sdoc-tree-view.active,
|
|
180
|
+
.toggle-view .sdoc-list-view.active {
|
|
181
|
+
background-color: #f5f5f5;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.toggle-view .sdoc-tree-view:hover,
|
|
185
|
+
.toggle-view .sdoc-list-view:hover {
|
|
186
|
+
background-color: #f0f0f0;
|
|
137
187
|
}
|
|
@@ -11,12 +11,17 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm
|
|
|
11
11
|
var _react = _interopRequireWildcard(require("react"));
|
|
12
12
|
var _reactI18next = require("react-i18next");
|
|
13
13
|
var _reactstrap = require("reactstrap");
|
|
14
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
14
15
|
var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
15
16
|
var _toast = _interopRequireDefault(require("../../../components/toast"));
|
|
17
|
+
var _constants = require("../../../constants");
|
|
16
18
|
var _context = _interopRequireDefault(require("../../../context"));
|
|
19
|
+
var _useCollaborators = require("../../../hooks/use-collaborators");
|
|
17
20
|
var _commonUtils = require("../../../utils/common-utils");
|
|
18
|
-
var
|
|
19
|
-
var
|
|
21
|
+
var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
22
|
+
var _constants2 = require("../../constants");
|
|
23
|
+
var _listView = _interopRequireDefault(require("./list-view"));
|
|
24
|
+
var _treeView = _interopRequireDefault(require("./tree-view"));
|
|
20
25
|
require("./index.css");
|
|
21
26
|
var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
22
27
|
var editor = _ref.editor,
|
|
@@ -43,18 +48,29 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
43
48
|
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
|
44
49
|
isOpenSearch = _useState8[0],
|
|
45
50
|
setIsOpenSearch = _useState8[1];
|
|
51
|
+
var _useState9 = (0, _react.useState)(null),
|
|
52
|
+
_useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
|
|
53
|
+
FileMetadataComponent = _useState0[0],
|
|
54
|
+
setFileMetadataComponent = _useState0[1];
|
|
55
|
+
var _useState1 = (0, _react.useState)(true),
|
|
56
|
+
_useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
|
|
57
|
+
isTreeView = _useState10[0],
|
|
58
|
+
setIsTreeView = _useState10[1];
|
|
59
|
+
var searchRef = (0, _react.useRef)(null);
|
|
60
|
+
var repoID = _context["default"].getSetting('repoID');
|
|
61
|
+
var enableMetadata = _context["default"].getSetting('enableMetadata');
|
|
46
62
|
var modalTitle;
|
|
47
63
|
switch (dialogType) {
|
|
48
|
-
case
|
|
64
|
+
case _constants2.ELEMENT_TYPE.FILE_LINK:
|
|
49
65
|
modalTitle = 'Select_file';
|
|
50
66
|
break;
|
|
51
|
-
case
|
|
67
|
+
case _constants2.ELEMENT_TYPE.SDOC_LINK:
|
|
52
68
|
modalTitle = 'Select_sdoc_document';
|
|
53
69
|
break;
|
|
54
|
-
case
|
|
70
|
+
case _constants2.ELEMENT_TYPE.VIDEO:
|
|
55
71
|
modalTitle = 'Select_video_file';
|
|
56
72
|
break;
|
|
57
|
-
case
|
|
73
|
+
case _constants2.ELEMENT_TYPE.WHITEBOARD:
|
|
58
74
|
modalTitle = 'Link_Excalidraw_file';
|
|
59
75
|
break;
|
|
60
76
|
default:
|
|
@@ -72,23 +88,23 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
72
88
|
var _ref4 = insertWhiteboardFile || {},
|
|
73
89
|
insertWhiteboard = _ref4.insertWhiteboard;
|
|
74
90
|
switch (dialogType) {
|
|
75
|
-
case
|
|
91
|
+
case _constants2.ELEMENT_TYPE.FILE_LINK:
|
|
76
92
|
insertFileLinkCallback && insertFileLinkCallback(editor, fileInfo.name, fileInfo.file_uuid);
|
|
77
93
|
break;
|
|
78
|
-
case
|
|
94
|
+
case _constants2.ELEMENT_TYPE.SDOC_LINK:
|
|
79
95
|
insertSdocFileLinkCallback && insertSdocFileLinkCallback(editor, fileInfo.name, fileInfo.file_uuid);
|
|
80
96
|
break;
|
|
81
|
-
case
|
|
82
|
-
var
|
|
97
|
+
case _constants2.ELEMENT_TYPE.VIDEO:
|
|
98
|
+
var _repoID = _context["default"].getSetting('repoID');
|
|
83
99
|
var fileServerRoot = _context["default"].getSetting('fileServerRoot');
|
|
84
100
|
// Get seafile's video download url as src
|
|
85
|
-
var url = "".concat(fileServerRoot, "repos/").concat(
|
|
101
|
+
var url = "".concat(fileServerRoot, "repos/").concat(_repoID, "/files").concat(fileInfo.path, "/?op=download");
|
|
86
102
|
var encodedUrl = encodeURI(url);
|
|
87
103
|
insertVideo && insertVideo(editor, [{
|
|
88
104
|
name: fileInfo.name
|
|
89
105
|
}], [encodedUrl]);
|
|
90
106
|
break;
|
|
91
|
-
case
|
|
107
|
+
case _constants2.ELEMENT_TYPE.WHITEBOARD:
|
|
92
108
|
insertWhiteboard && insertWhiteboard(editor, fileInfo.name, fileInfo.path);
|
|
93
109
|
break;
|
|
94
110
|
default:
|
|
@@ -101,14 +117,14 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
101
117
|
var fileInfo = (0, _objectSpread2["default"])({}, currentSelectedFile);
|
|
102
118
|
|
|
103
119
|
// Insert video element in sdoc
|
|
104
|
-
if (dialogType ===
|
|
120
|
+
if (dialogType === _constants2.ELEMENT_TYPE.VIDEO) {
|
|
105
121
|
insertFile(fileInfo);
|
|
106
122
|
closeDialog();
|
|
107
123
|
return;
|
|
108
124
|
}
|
|
109
125
|
|
|
110
126
|
// Insert whiteboard file in sdoc
|
|
111
|
-
if (dialogType ===
|
|
127
|
+
if (dialogType === _constants2.ELEMENT_TYPE.WHITEBOARD) {
|
|
112
128
|
insertFile(fileInfo);
|
|
113
129
|
closeDialog();
|
|
114
130
|
return;
|
|
@@ -134,11 +150,6 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
134
150
|
closeDialog();
|
|
135
151
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
136
152
|
}, [currentSelectedFile]);
|
|
137
|
-
var toggleSearch = (0, _react.useCallback)(function () {
|
|
138
|
-
setIsOpenSearch(function (prev) {
|
|
139
|
-
return !prev;
|
|
140
|
-
});
|
|
141
|
-
}, []);
|
|
142
153
|
var handleSearchInputChange = (0, _react.useCallback)(function (e) {
|
|
143
154
|
var keyword = e.target.value.toLowerCase();
|
|
144
155
|
setTemSearchContent(keyword);
|
|
@@ -146,9 +157,12 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
146
157
|
var executeSearch = (0, _react.useCallback)(function () {
|
|
147
158
|
if (!temSearchContent.trim()) {
|
|
148
159
|
setSearchContent('');
|
|
160
|
+
setIsOpenSearch(false);
|
|
149
161
|
return;
|
|
150
162
|
}
|
|
163
|
+
setCurrentSelectedFile(null);
|
|
151
164
|
setSearchContent(temSearchContent);
|
|
165
|
+
setIsOpenSearch(true);
|
|
152
166
|
}, [temSearchContent]);
|
|
153
167
|
var handleInputKeyDown = (0, _react.useCallback)(function (e) {
|
|
154
168
|
if ((0, _isHotkey["default"])('enter', e)) {
|
|
@@ -158,14 +172,52 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
158
172
|
if ((0, _isHotkey["default"])('escape', e)) {
|
|
159
173
|
e.preventDefault();
|
|
160
174
|
e.stopPropagation();
|
|
161
|
-
|
|
175
|
+
var el = searchRef.current;
|
|
176
|
+
if (!el) return;
|
|
177
|
+
el && el.blur();
|
|
178
|
+
el && (el.value = '');
|
|
179
|
+
setSearchContent('');
|
|
180
|
+
setIsOpenSearch(false);
|
|
162
181
|
}
|
|
182
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
163
183
|
}, [executeSearch, isOpenSearch]);
|
|
164
184
|
(0, _react.useEffect)(function () {
|
|
165
185
|
if (!isOpenSearch) {
|
|
166
186
|
setSearchContent('');
|
|
187
|
+
var el = searchRef.current;
|
|
188
|
+
el && (el.value = '');
|
|
167
189
|
}
|
|
168
190
|
}, [isOpenSearch]);
|
|
191
|
+
var dirent = (0, _react.useMemo)(function () {
|
|
192
|
+
return {
|
|
193
|
+
name: currentSelectedFile === null || currentSelectedFile === void 0 ? void 0 : currentSelectedFile.name,
|
|
194
|
+
type: currentSelectedFile ? 'file' : 'dir',
|
|
195
|
+
isLib: (currentSelectedFile === null || currentSelectedFile === void 0 ? void 0 : currentSelectedFile.path) === '/',
|
|
196
|
+
file_tags: [],
|
|
197
|
+
path: currentSelectedFile === null || currentSelectedFile === void 0 ? void 0 : currentSelectedFile.path
|
|
198
|
+
};
|
|
199
|
+
}, [currentSelectedFile]);
|
|
200
|
+
(0, _react.useEffect)(function () {
|
|
201
|
+
if (!repoID || !currentSelectedFile) return;
|
|
202
|
+
var eventBus = _eventBus["default"].getInstance();
|
|
203
|
+
eventBus.dispatch(_constants.INTERNAL_EVENT.FILE_METADATA_COMPONENT, function (component) {
|
|
204
|
+
setFileMetadataComponent(function () {
|
|
205
|
+
return component;
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
}, [repoID, currentSelectedFile, dirent]);
|
|
209
|
+
var onClickTreeView = (0, _react.useCallback)(function () {
|
|
210
|
+
setIsTreeView(true);
|
|
211
|
+
setIsOpenSearch(false);
|
|
212
|
+
setSearchContent('');
|
|
213
|
+
setCurrentSelectedFile(null);
|
|
214
|
+
}, []);
|
|
215
|
+
var onClickListView = (0, _react.useCallback)(function () {
|
|
216
|
+
setIsTreeView(false);
|
|
217
|
+
setIsOpenSearch(false);
|
|
218
|
+
setSearchContent('');
|
|
219
|
+
setCurrentSelectedFile(null);
|
|
220
|
+
}, []);
|
|
169
221
|
return /*#__PURE__*/_react["default"].createElement(_reactstrap.Modal, {
|
|
170
222
|
isOpen: true,
|
|
171
223
|
autoFocus: true,
|
|
@@ -179,42 +231,63 @@ var SelectSdocFileDialog = function SelectSdocFileDialog(_ref) {
|
|
|
179
231
|
}, /*#__PURE__*/_react["default"].createElement("h5", {
|
|
180
232
|
className: "modal-title-container"
|
|
181
233
|
}, t(modalTitle)), /*#__PURE__*/_react["default"].createElement("div", {
|
|
182
|
-
className: "
|
|
183
|
-
},
|
|
184
|
-
className: "
|
|
234
|
+
className: "modal-operation-container"
|
|
235
|
+
}, enableMetadata && /*#__PURE__*/_react["default"].createElement("div", {
|
|
236
|
+
className: "toggle-view"
|
|
237
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
238
|
+
className: (0, _classnames["default"])('sdocfont sdoc-tree-view', {
|
|
239
|
+
'active': isTreeView
|
|
240
|
+
}),
|
|
241
|
+
onClick: onClickTreeView
|
|
242
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
243
|
+
className: (0, _classnames["default"])('sdocfont sdoc-list-ul sdoc-list-view', {
|
|
244
|
+
'active': !isTreeView
|
|
245
|
+
}),
|
|
246
|
+
onClick: onClickListView
|
|
247
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
248
|
+
className: "sdocfont sdoc-close1 sdoc-close-dialog",
|
|
249
|
+
onClick: closeDialog
|
|
250
|
+
}))), /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalBody, {
|
|
251
|
+
className: "p-0"
|
|
252
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
253
|
+
className: "sdoc-file-select-container"
|
|
254
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
255
|
+
className: "sdoc-file-select-wrapper"
|
|
256
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
257
|
+
className: "sdoc-file-left-panel"
|
|
185
258
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
186
|
-
className: "sdocfont sdoc-find-replace sdoc-files-search-popover",
|
|
187
|
-
onClick: toggleSearch
|
|
188
|
-
})), isOpenSearch && /*#__PURE__*/_react["default"].createElement("div", {
|
|
189
259
|
className: "sdoc-files-search-popover-container"
|
|
190
260
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
191
261
|
className: "sdoc-search-wrapper"
|
|
192
262
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
193
263
|
className: "sdocfont sdoc-find-replace sdoc-search"
|
|
194
264
|
}), /*#__PURE__*/_react["default"].createElement(_reactstrap.Input, {
|
|
195
|
-
|
|
265
|
+
innerRef: searchRef,
|
|
196
266
|
className: "sdoc-search-input",
|
|
197
267
|
onKeyUp: handleInputKeyDown,
|
|
198
268
|
onChange: handleSearchInputChange,
|
|
199
269
|
id: "sdoc-search",
|
|
200
270
|
placeholder: t('Search')
|
|
201
|
-
}), /*#__PURE__*/_react["default"].createElement("
|
|
202
|
-
|
|
203
|
-
onClick: toggleSearch
|
|
204
|
-
})))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
205
|
-
className: "sdocfont sdoc-close1 sdoc-close-dialog",
|
|
206
|
-
onClick: closeDialog
|
|
207
|
-
})), /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalBody, {
|
|
208
|
-
className: "p-0"
|
|
209
|
-
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
210
|
-
className: "sdoc-file-select-container"
|
|
211
|
-
}, /*#__PURE__*/_react["default"].createElement(_localFiles["default"], {
|
|
212
|
-
fileType: _constants.FILE_TYPE[dialogType],
|
|
271
|
+
}))), isTreeView ? /*#__PURE__*/_react["default"].createElement(_treeView["default"], {
|
|
272
|
+
fileType: _constants2.FILE_TYPE[dialogType],
|
|
213
273
|
onSelectedFile: onSelectedFile,
|
|
214
274
|
toggle: closeDialog,
|
|
215
275
|
searchContent: searchContent,
|
|
216
276
|
isOpenSearch: isOpenSearch
|
|
217
|
-
})
|
|
277
|
+
}) : /*#__PURE__*/_react["default"].createElement(_listView["default"], {
|
|
278
|
+
fileType: _constants2.FILE_TYPE[dialogType],
|
|
279
|
+
onSelectedFile: onSelectedFile,
|
|
280
|
+
searchContent: searchContent,
|
|
281
|
+
isOpenSearch: isOpenSearch
|
|
282
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
283
|
+
className: "sdoc-file-metadata-wrapper"
|
|
284
|
+
}, FileMetadataComponent && repoID && currentSelectedFile && /*#__PURE__*/_react["default"].createElement(_useCollaborators.CollaboratorsProvider, {
|
|
285
|
+
repoID: repoID
|
|
286
|
+
}, /*#__PURE__*/_react["default"].createElement(FileMetadataComponent, {
|
|
287
|
+
repoID: repoID,
|
|
288
|
+
path: currentSelectedFile === null || currentSelectedFile === void 0 ? void 0 : currentSelectedFile.path,
|
|
289
|
+
dirent: dirent
|
|
290
|
+
})))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
218
291
|
className: "sdoc-file-select-footer"
|
|
219
292
|
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
220
293
|
color: "secondary",
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
.sdoc-files-list {
|
|
2
|
+
flex: 1;
|
|
3
|
+
padding: 8px 16px;
|
|
4
|
+
width: 100%;
|
|
5
|
+
height: 400px;
|
|
6
|
+
overflow-y: auto;
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.sdoc-file-wrapper {
|
|
12
|
+
border-radius: 4px;
|
|
13
|
+
cursor: pointer;
|
|
14
|
+
display: flex;
|
|
15
|
+
font-size: .8125rem;
|
|
16
|
+
height: auto;
|
|
17
|
+
padding: 10px 0 10px 8px;
|
|
18
|
+
position: relative;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.sdoc-file-wrapper:hover {
|
|
22
|
+
background-color: #f5f5f5;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.sdoc-file-wrapper .file-icon {
|
|
26
|
+
height: 36px;
|
|
27
|
+
width: 36px;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.sdoc-item-content {
|
|
31
|
+
display: flex;
|
|
32
|
+
flex-direction: column;
|
|
33
|
+
flex: 1 1;
|
|
34
|
+
margin-left: .25rem;
|
|
35
|
+
overflow: hidden;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.sdoc-item-name {
|
|
39
|
+
white-space: nowrap;
|
|
40
|
+
overflow: hidden;
|
|
41
|
+
text-overflow: ellipsis;
|
|
42
|
+
font-size: 14px;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.sdoc-item-path {
|
|
46
|
+
color: #666;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.sdoc-item-user-container {
|
|
50
|
+
display: flex;
|
|
51
|
+
color: #666;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.sdoc-item-user-container .item-divide {
|
|
55
|
+
margin: 0 5px;
|
|
56
|
+
transform: translateY(-1px);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.sdoc-files-list .sdoc-file-checked {
|
|
60
|
+
position: absolute;
|
|
61
|
+
right: 10px;
|
|
62
|
+
top: 30px;
|
|
63
|
+
color: #798d99;
|
|
64
|
+
font-size: 12px;
|
|
65
|
+
font-weight: 400;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.sdoc-files-list .sdoc-file-search-no-result {
|
|
69
|
+
display: flex;
|
|
70
|
+
justify-content: center;
|
|
71
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
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 _regenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/regenerator"));
|
|
10
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
|
|
11
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
13
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
14
|
+
var _reactI18next = require("react-i18next");
|
|
15
|
+
var _context2 = _interopRequireDefault(require("../../../../context"));
|
|
16
|
+
var _helpers = require("../helpers");
|
|
17
|
+
require("./index.css");
|
|
18
|
+
var ListView = function ListView(_ref) {
|
|
19
|
+
var onSelectedFile = _ref.onSelectedFile,
|
|
20
|
+
fileType = _ref.fileType,
|
|
21
|
+
t = _ref.t,
|
|
22
|
+
searchContent = _ref.searchContent,
|
|
23
|
+
isOpenSearch = _ref.isOpenSearch;
|
|
24
|
+
var _useState = (0, _react.useState)(null),
|
|
25
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
26
|
+
currentActiveItem = _useState2[0],
|
|
27
|
+
setCurrentActiveItem = _useState2[1];
|
|
28
|
+
var _useState3 = (0, _react.useState)([]),
|
|
29
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
30
|
+
allFileList = _useState4[0],
|
|
31
|
+
setAllFileList = _useState4[1];
|
|
32
|
+
var _useState5 = (0, _react.useState)([]),
|
|
33
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
34
|
+
fileList = _useState6[0],
|
|
35
|
+
setFileList = _useState6[1];
|
|
36
|
+
var _useState7 = (0, _react.useState)(''),
|
|
37
|
+
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
|
38
|
+
repoName = _useState8[0],
|
|
39
|
+
setRepoName = _useState8[1];
|
|
40
|
+
var onSelectFile = (0, _react.useCallback)(function (e, file) {
|
|
41
|
+
e && e.stopPropagation();
|
|
42
|
+
setCurrentActiveItem(file);
|
|
43
|
+
onSelectedFile(file);
|
|
44
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
45
|
+
}, []);
|
|
46
|
+
(0, _react.useEffect)(function () {
|
|
47
|
+
var getFileMetadata = /*#__PURE__*/function () {
|
|
48
|
+
var _ref2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regenerator2["default"])().m(function _callee() {
|
|
49
|
+
var res, sortedRecords, firstFile, filePath;
|
|
50
|
+
return (0, _regenerator2["default"])().w(function (_context) {
|
|
51
|
+
while (1) switch (_context.n) {
|
|
52
|
+
case 0:
|
|
53
|
+
_context.n = 1;
|
|
54
|
+
return _context2["default"].getFileMetadataInfo(fileType);
|
|
55
|
+
case 1:
|
|
56
|
+
res = _context.v;
|
|
57
|
+
setRepoName(res.data.repo_name);
|
|
58
|
+
sortedRecords = (0, _toConsumableArray2["default"])(res.data.records).sort(function (a, b) {
|
|
59
|
+
return new Date(b._mtime) - new Date(a._mtime);
|
|
60
|
+
});
|
|
61
|
+
setAllFileList(sortedRecords);
|
|
62
|
+
setFileList(sortedRecords);
|
|
63
|
+
firstFile = sortedRecords[0];
|
|
64
|
+
if (firstFile) {
|
|
65
|
+
filePath = (firstFile._parent_dir === '/' ? '' : firstFile._parent_dir) + '/' + firstFile._name;
|
|
66
|
+
onSelectFile(null, {
|
|
67
|
+
id: firstFile._id,
|
|
68
|
+
name: firstFile._name,
|
|
69
|
+
path: filePath
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
case 2:
|
|
73
|
+
return _context.a(2);
|
|
74
|
+
}
|
|
75
|
+
}, _callee);
|
|
76
|
+
}));
|
|
77
|
+
return function getFileMetadata() {
|
|
78
|
+
return _ref2.apply(this, arguments);
|
|
79
|
+
};
|
|
80
|
+
}();
|
|
81
|
+
getFileMetadata();
|
|
82
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
83
|
+
}, []);
|
|
84
|
+
(0, _react.useEffect)(function () {
|
|
85
|
+
if (!isOpenSearch || !searchContent.trim()) {
|
|
86
|
+
setFileList(allFileList);
|
|
87
|
+
}
|
|
88
|
+
if (searchContent.trim() && isOpenSearch) {
|
|
89
|
+
var keyword = searchContent.trim().toLowerCase();
|
|
90
|
+
var result = allFileList.filter(function (file) {
|
|
91
|
+
var _file$_name, _file$_parent_dir, _file$file_creator_ni;
|
|
92
|
+
var mtimeStr = new Date(file._mtime).toLocaleString().toLowerCase();
|
|
93
|
+
return ((_file$_name = file._name) === null || _file$_name === void 0 ? void 0 : _file$_name.toLowerCase().includes(keyword)) || ((_file$_parent_dir = file._parent_dir) === null || _file$_parent_dir === void 0 ? void 0 : _file$_parent_dir.toLowerCase().includes(keyword)) || mtimeStr.includes(keyword) || ((_file$file_creator_ni = file.file_creator_nickname) === null || _file$file_creator_ni === void 0 ? void 0 : _file$file_creator_ni.toLowerCase().includes(keyword)) || (repoName === null || repoName === void 0 ? void 0 : repoName.toLowerCase().includes(keyword));
|
|
94
|
+
});
|
|
95
|
+
setFileList(result);
|
|
96
|
+
}
|
|
97
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
98
|
+
}, [isOpenSearch, searchContent]);
|
|
99
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
100
|
+
className: "sdoc-files-list"
|
|
101
|
+
}, fileList.map(function (file) {
|
|
102
|
+
var fileTypeIcon = (0, _helpers.parcelFileTypeIcon)(file._name);
|
|
103
|
+
var dirPath = repoName + (file._parent_dir === '/' ? '' : file._parent_dir);
|
|
104
|
+
var date = new Date(file._mtime);
|
|
105
|
+
var fileAdjustTime = date.toLocaleString();
|
|
106
|
+
var username = file.file_creator_nickname;
|
|
107
|
+
var selected = (currentActiveItem === null || currentActiveItem === void 0 ? void 0 : currentActiveItem.id) === file._id;
|
|
108
|
+
var filePath = (file._parent_dir === '/' ? '' : file._parent_dir) + '/' + file._name;
|
|
109
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
110
|
+
key: file._id,
|
|
111
|
+
className: "sdoc-file-wrapper",
|
|
112
|
+
onClick: function onClick(e) {
|
|
113
|
+
return onSelectFile(e, {
|
|
114
|
+
id: file._id,
|
|
115
|
+
name: file._name,
|
|
116
|
+
path: filePath
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}, /*#__PURE__*/_react["default"].createElement("img", {
|
|
120
|
+
className: "file-icon",
|
|
121
|
+
src: fileTypeIcon,
|
|
122
|
+
alt: ""
|
|
123
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
124
|
+
className: "sdoc-item-content"
|
|
125
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
126
|
+
className: "sdoc-item-name ellipsis",
|
|
127
|
+
title: file._name
|
|
128
|
+
}, file._name), /*#__PURE__*/_react["default"].createElement("div", {
|
|
129
|
+
className: "sdoc-item-path ellipsis",
|
|
130
|
+
title: dirPath
|
|
131
|
+
}, dirPath), /*#__PURE__*/_react["default"].createElement("div", {
|
|
132
|
+
className: "sdoc-item-user-container ellipsis"
|
|
133
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
134
|
+
className: "item-user"
|
|
135
|
+
}, username), /*#__PURE__*/_react["default"].createElement("div", {
|
|
136
|
+
className: "item-divide"
|
|
137
|
+
}, "|"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
138
|
+
className: "item-adjust-time"
|
|
139
|
+
}, fileAdjustTime))), selected && /*#__PURE__*/_react["default"].createElement("i", {
|
|
140
|
+
className: "sdoc-file-checked sdocfont sdoc-check-mark"
|
|
141
|
+
}));
|
|
142
|
+
}), isOpenSearch && fileList.length === 0 && /*#__PURE__*/_react["default"].createElement("div", {
|
|
143
|
+
className: "sdoc-file-search-no-result"
|
|
144
|
+
}, t('No_results')));
|
|
145
|
+
};
|
|
146
|
+
var _default = exports["default"] = (0, _reactI18next.withTranslation)('sdoc-editor')(ListView);
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
right: 1px;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
.sdoc-file-checked {
|
|
47
|
+
.sdoc-files-tree .sdoc-file-checked {
|
|
48
48
|
position: absolute;
|
|
49
49
|
right: 10px;
|
|
50
50
|
color: #798d99;
|
|
@@ -94,7 +94,6 @@
|
|
|
94
94
|
|
|
95
95
|
.sdoc-folder-container.sdoc-folder-search-results .sdoc-file-info {
|
|
96
96
|
height: 59px;
|
|
97
|
-
width: 486px;
|
|
98
97
|
padding: 10px 50px;
|
|
99
98
|
flex-direction: column;
|
|
100
99
|
justify-content: center;
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports["default"] = void 0;
|
|
9
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
9
10
|
var _regeneratorValues2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/regeneratorValues"));
|
|
10
11
|
var _regenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/regenerator"));
|
|
11
12
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
|
|
@@ -19,7 +20,7 @@ var _context4 = _interopRequireDefault(require("../../../../context"));
|
|
|
19
20
|
var _commonUtils = require("../../../../utils/common-utils");
|
|
20
21
|
var _helpers = require("../helpers");
|
|
21
22
|
require("./index.css");
|
|
22
|
-
var
|
|
23
|
+
var TreeView = function TreeView(_ref) {
|
|
23
24
|
var onSelectedFile = _ref.onSelectedFile,
|
|
24
25
|
toggle = _ref.toggle,
|
|
25
26
|
fileType = _ref.fileType,
|
|
@@ -171,32 +172,38 @@ var LocalFiles = function LocalFiles(_ref) {
|
|
|
171
172
|
getTreeData(rootPath);
|
|
172
173
|
}
|
|
173
174
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
174
|
-
}, [isOpenSearch, searchContent
|
|
175
|
+
}, [isOpenSearch, searchContent]);
|
|
175
176
|
var onToggle = (0, _react.useCallback)(/*#__PURE__*/function () {
|
|
176
177
|
var _ref3 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regenerator2["default"])().m(function _callee2(e, item, treeData) {
|
|
177
178
|
return (0, _regenerator2["default"])().w(function (_context3) {
|
|
178
179
|
while (1) switch (_context3.n) {
|
|
179
180
|
case 0:
|
|
180
181
|
e && e.stopPropagation();
|
|
181
|
-
if (!
|
|
182
|
+
if (!isOpenSearch) {
|
|
182
183
|
_context3.n = 1;
|
|
183
184
|
break;
|
|
184
185
|
}
|
|
186
|
+
return _context3.a(2);
|
|
187
|
+
case 1:
|
|
188
|
+
if (!expandedFolder.has(item.indexId)) {
|
|
189
|
+
_context3.n = 2;
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
185
192
|
collapsedFolder(treeData, item.indexId);
|
|
186
193
|
expandedFolder["delete"](item.indexId);
|
|
187
|
-
_context3.n =
|
|
194
|
+
_context3.n = 4;
|
|
188
195
|
break;
|
|
189
|
-
case 1:
|
|
190
|
-
_context3.n = 2;
|
|
191
|
-
return getTreeData(item.path, item.indexId, treeData);
|
|
192
196
|
case 2:
|
|
193
|
-
|
|
197
|
+
_context3.n = 3;
|
|
198
|
+
return getTreeData(item.path, item.indexId, treeData);
|
|
194
199
|
case 3:
|
|
200
|
+
expandedFolder.add(item.indexId);
|
|
201
|
+
case 4:
|
|
195
202
|
onSelectedFile(null);
|
|
196
203
|
setCurrentActiveItem(item);
|
|
197
204
|
setExpandedFolder(new Set(Array.from(expandedFolder)));
|
|
198
205
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
199
|
-
case
|
|
206
|
+
case 5:
|
|
200
207
|
return _context3.a(2);
|
|
201
208
|
}
|
|
202
209
|
}, _callee2);
|
|
@@ -207,8 +214,11 @@ var LocalFiles = function LocalFiles(_ref) {
|
|
|
207
214
|
}(), [expandedFolder]);
|
|
208
215
|
var onSelectFile = (0, _react.useCallback)(function (e, file) {
|
|
209
216
|
e.stopPropagation();
|
|
210
|
-
|
|
211
|
-
|
|
217
|
+
var newFile = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, file), {}, {
|
|
218
|
+
path: file.path || file.fullpath
|
|
219
|
+
});
|
|
220
|
+
setCurrentActiveItem(newFile);
|
|
221
|
+
onSelectedFile(newFile);
|
|
212
222
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
213
223
|
}, []);
|
|
214
224
|
var getSearchFiles = (0, _react.useCallback)(function (searchContent, fileType) {
|
|
@@ -229,20 +239,24 @@ var LocalFiles = function LocalFiles(_ref) {
|
|
|
229
239
|
}, []);
|
|
230
240
|
var renderFileTree = (0, _react.useCallback)(function (data) {
|
|
231
241
|
if (!Array.isArray(data) || data.length === 0) return null;
|
|
242
|
+
if (isOpenSearch && !hasSearchResult) return null;
|
|
232
243
|
return data.map(function (item) {
|
|
233
244
|
var _item$fullpath, _item$children, _item$children2;
|
|
234
245
|
if (!item) return null;
|
|
235
246
|
var type = item.type,
|
|
236
247
|
indexId = item.indexId,
|
|
237
|
-
name = item.name
|
|
248
|
+
name = item.name,
|
|
249
|
+
file_uuid = item.file_uuid,
|
|
250
|
+
path = item.path,
|
|
251
|
+
fullpath = item.fullpath;
|
|
238
252
|
// Get file type icon
|
|
239
253
|
var fileTypeIcon = (0, _helpers.parcelFileTypeIcon)(name);
|
|
240
254
|
var result = (_item$fullpath = item.fullpath) === null || _item$fullpath === void 0 ? void 0 : _item$fullpath.split('/').filter(Boolean);
|
|
241
255
|
item.fullpath && result.pop();
|
|
242
256
|
var folderPath = item.fullpath && result.join('/');
|
|
243
|
-
var selected = (currentActiveItem === null || currentActiveItem === void 0 ? void 0 : currentActiveItem.
|
|
257
|
+
var selected = (currentActiveItem === null || currentActiveItem === void 0 ? void 0 : currentActiveItem.path) === (path || fullpath);
|
|
244
258
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
245
|
-
key: indexId,
|
|
259
|
+
key: indexId || file_uuid,
|
|
246
260
|
className: (0, _classnames["default"])('sdoc-folder-container', {
|
|
247
261
|
'sdoc-folder-search-results': hasSearchResult === true
|
|
248
262
|
})
|
|
@@ -292,11 +306,11 @@ var LocalFiles = function LocalFiles(_ref) {
|
|
|
292
306
|
})));
|
|
293
307
|
});
|
|
294
308
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
295
|
-
}, [treeData, currentActiveItem, expandedFolder]);
|
|
309
|
+
}, [treeData, currentActiveItem, expandedFolder, isOpenSearch, hasSearchResult]);
|
|
296
310
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
297
311
|
className: "sdoc-files-tree"
|
|
298
312
|
}, renderFileTree(treeData), isOpenSearch && !hasSearchResult && !isCurrentLibrary && /*#__PURE__*/_react["default"].createElement("div", {
|
|
299
313
|
className: "sdoc-file-search-no-result"
|
|
300
314
|
}, t('No_results')));
|
|
301
315
|
};
|
|
302
|
-
var _default = exports["default"] = (0, _reactI18next.withTranslation)('sdoc-editor')(
|
|
316
|
+
var _default = exports["default"] = (0, _reactI18next.withTranslation)('sdoc-editor')(TreeView);
|
|
@@ -154,7 +154,7 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
|
|
|
154
154
|
return handleOpenLinkPreview('sdoc-file-preview');
|
|
155
155
|
}
|
|
156
156
|
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
157
|
-
className: "sdocfont eye icon-font"
|
|
157
|
+
className: "sdocfont sodc-eye icon-font"
|
|
158
158
|
})), isShowTooltip && /*#__PURE__*/_react["default"].createElement(_tooltip["default"], {
|
|
159
159
|
target: "sdoc_link_preview",
|
|
160
160
|
placement: "top",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/sdoc-editor",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.183",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "jest",
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"publishConfig": {
|
|
72
72
|
"access": "public"
|
|
73
73
|
},
|
|
74
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "9b4bf8c3349fbe955d3119910cbad3c42f54f024"
|
|
75
75
|
}
|
|
@@ -1,91 +0,0 @@
|
|
|
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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
10
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
-
var _reactI18next = require("react-i18next");
|
|
12
|
-
var _reactstrap = require("reactstrap");
|
|
13
|
-
var _mouseEvent = require("../../../utils/mouse-event");
|
|
14
|
-
var _constants = require("../../constants");
|
|
15
|
-
var CommentTypeDropdownItem = function CommentTypeDropdownItem(_ref) {
|
|
16
|
-
var type = _ref.type,
|
|
17
|
-
setCommentType = _ref.setCommentType;
|
|
18
|
-
var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
|
|
19
|
-
t = _useTranslation.t;
|
|
20
|
-
var handleCommentTypeChanged = (0, _react.useCallback)(function (event, type) {
|
|
21
|
-
(0, _mouseEvent.eventStopPropagation)(event);
|
|
22
|
-
setCommentType(type);
|
|
23
|
-
|
|
24
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
25
|
-
}, []);
|
|
26
|
-
return /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownItem, {
|
|
27
|
-
className: "sdoc-dropdown-menu-item",
|
|
28
|
-
tag: 'div',
|
|
29
|
-
onClick: function onClick(event) {
|
|
30
|
-
return handleCommentTypeChanged(event, type);
|
|
31
|
-
}
|
|
32
|
-
}, t(type));
|
|
33
|
-
};
|
|
34
|
-
var GlobalCommentBodyHeader = function GlobalCommentBodyHeader(_ref2) {
|
|
35
|
-
var _ref2$commentList = _ref2.commentList,
|
|
36
|
-
commentList = _ref2$commentList === void 0 ? [] : _ref2$commentList,
|
|
37
|
-
commentType = _ref2.commentType,
|
|
38
|
-
setCommentType = _ref2.setCommentType;
|
|
39
|
-
var _useTranslation2 = (0, _reactI18next.useTranslation)('sdoc-editor'),
|
|
40
|
-
t = _useTranslation2.t;
|
|
41
|
-
var _useState = (0, _react.useState)(false),
|
|
42
|
-
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
43
|
-
isDropdownOpen = _useState2[0],
|
|
44
|
-
setDropdownOpen = _useState2[1];
|
|
45
|
-
var commentTip = null;
|
|
46
|
-
if (commentList.length === 1) {
|
|
47
|
-
commentTip = t('Total_1_comment');
|
|
48
|
-
} else if (commentList.length > 1) {
|
|
49
|
-
commentTip = t('Total_count_comments', {
|
|
50
|
-
count: commentList.length
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
var id = 'comment-type-controller';
|
|
54
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
55
|
-
className: "comments-panel-body__header"
|
|
56
|
-
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
57
|
-
className: "comments-types-count"
|
|
58
|
-
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
59
|
-
id: "comment-types",
|
|
60
|
-
className: "comment-type"
|
|
61
|
-
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Dropdown, {
|
|
62
|
-
isOpen: isDropdownOpen,
|
|
63
|
-
toggle: function toggle() {
|
|
64
|
-
return setDropdownOpen(!isDropdownOpen);
|
|
65
|
-
}
|
|
66
|
-
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownToggle, {
|
|
67
|
-
tag: 'div',
|
|
68
|
-
caret: true,
|
|
69
|
-
className: "d-flex align-items-center justify-content-center"
|
|
70
|
-
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
71
|
-
id: id
|
|
72
|
-
}, t(commentType))), /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownMenu, {
|
|
73
|
-
className: "sdoc-dropdown-menu sdoc-comment-filter-dropdown",
|
|
74
|
-
container: "comment-types"
|
|
75
|
-
}, /*#__PURE__*/_react["default"].createElement(CommentTypeDropdownItem, {
|
|
76
|
-
type: _constants.COMMENT_TYPES.ALL,
|
|
77
|
-
setCommentType: setCommentType
|
|
78
|
-
}), /*#__PURE__*/_react["default"].createElement(CommentTypeDropdownItem, {
|
|
79
|
-
type: _constants.COMMENT_TYPES.DOC,
|
|
80
|
-
setCommentType: setCommentType
|
|
81
|
-
}), /*#__PURE__*/_react["default"].createElement(CommentTypeDropdownItem, {
|
|
82
|
-
type: _constants.COMMENT_TYPES.RESOLVED,
|
|
83
|
-
setCommentType: setCommentType
|
|
84
|
-
}), /*#__PURE__*/_react["default"].createElement(CommentTypeDropdownItem, {
|
|
85
|
-
type: _constants.COMMENT_TYPES.UNRESOLVED,
|
|
86
|
-
setCommentType: setCommentType
|
|
87
|
-
})))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
88
|
-
className: "comment-count-tip"
|
|
89
|
-
}, commentTip)));
|
|
90
|
-
};
|
|
91
|
-
var _default = exports["default"] = GlobalCommentBodyHeader;
|