@seafile/seafile-database 0.0.21 → 0.0.23

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 (78) hide show
  1. package/dist/api/api.js +21 -27
  2. package/dist/common/components/file-tag/index.js +2 -2
  3. package/dist/common/utils/icon-utils.js +2 -9
  4. package/dist/common/utils/utils.js +0 -28
  5. package/dist/components/cell-editors/index.js +2 -2
  6. package/dist/components/cell-editors/multiple-select-editor/index.js +2 -2
  7. package/dist/components/cell-editors/single-select-editor/index.js +2 -2
  8. package/dist/components/cell-editors/tags-editor/index.js +2 -1
  9. package/dist/components/context-menu/index.js +2 -2
  10. package/dist/components/data-process-setter/filter-setter.js +2 -1
  11. package/dist/components/data-process-setter/manage-setter.js +2 -1
  12. package/dist/components/data-process-setter/sort-setter.js +2 -2
  13. package/dist/components/icons/index.js +1 -14
  14. package/dist/components/image-previewer/_hooks/metadata-details.js +1 -1
  15. package/dist/components/image-previewer/_hooks/metadata-status.js +2 -2
  16. package/dist/components/image-previewer/image-detail/index.js +1 -1
  17. package/dist/components/image-previewer/index.js +2 -2
  18. package/dist/components/popover/groupbys-popover/index.js +5 -5
  19. package/dist/components/searcher/index.js +3 -3
  20. package/dist/components/view-toolbar/index.css +1 -54
  21. package/dist/components/view-toolbar/index.js +48 -40
  22. package/dist/components/view-toolbar/rows-toolbar/index.js +2 -2
  23. package/dist/components/view-toolbar/table-view-toolbar/index.js +1 -1
  24. package/dist/components/view-toolbar/views/all-views/index.css +85 -0
  25. package/dist/components/view-toolbar/views/all-views/index.js +165 -0
  26. package/dist/components/view-toolbar/views/index.css +22 -0
  27. package/dist/components/view-toolbar/views/index.js +215 -0
  28. package/dist/components/view-toolbar/views/view-item/index.css +83 -0
  29. package/dist/components/view-toolbar/views/view-item/index.js +159 -0
  30. package/dist/constants/event-bus-type.js +1 -3
  31. package/dist/constants/view/index.js +2 -32
  32. package/dist/context.js +34 -79
  33. package/dist/database.js +18 -11
  34. package/dist/global-settings.js +1 -3
  35. package/dist/hooks/{file-repo-context.js → app-context.js} +20 -25
  36. package/dist/hooks/collaborators.js +3 -9
  37. package/dist/hooks/index.js +14 -14
  38. package/dist/hooks/metadata.js +47 -45
  39. package/dist/hooks/tagsData.js +2 -8
  40. package/dist/hooks/viewsData.js +114 -0
  41. package/dist/index.js +3 -3
  42. package/dist/locale/en.js +1 -6
  43. package/dist/locale/zh_CN.js +1 -6
  44. package/dist/store/data-processor.js +0 -1
  45. package/dist/views/index.js +3 -5
  46. package/dist/views/table/editors/editor-container/index.js +2 -2
  47. package/dist/views/table/formatters/file-name.js +3 -3
  48. package/dist/views/table/index.js +3 -2
  49. package/dist/views/table/table-main/index.js +2 -2
  50. package/dist/views/table/table-main/rows/row/cell/formatter.js +2 -2
  51. package/dist/views/table/table-main/rows/row/cell/index.js +2 -2
  52. package/dist/views/table/table-main/rows-header/cell/dropdown-menu/index.js +1 -1
  53. package/dist/views/table/table-main/rows-header/cell/index.js +1 -1
  54. package/dist/views/table/table-main/rows-header/index.js +2 -2
  55. package/package.json +1 -1
  56. package/dist/assets/css/dropdown-menu.css +0 -96
  57. package/dist/components/dialogs/custom-modal-header/index.css +0 -34
  58. package/dist/components/dialogs/custom-modal-header/index.js +0 -34
  59. package/dist/components/dialogs/insert-view-dialog.js +0 -104
  60. package/dist/components/icons/arrow-down-icon.js +0 -19
  61. package/dist/components/icons/arrow-up-icon.js +0 -19
  62. package/dist/components/icons/close-icon.js +0 -23
  63. package/dist/components/icons/set-up-icon.js +0 -22
  64. package/dist/components/view-toolbar/card-view-toolbar/index.js +0 -89
  65. package/dist/components/view-toolbar/view-items/index.css +0 -55
  66. package/dist/components/view-toolbar/view-items/index.js +0 -98
  67. package/dist/components/view-toolbar/view-items/views-popover.js +0 -80
  68. package/dist/file-base.js +0 -31
  69. package/dist/hooks/file-view-context.js +0 -69
  70. package/dist/views/card/card-items/card-item/formatter.js +0 -45
  71. package/dist/views/card/card-items/card-item/index.css +0 -234
  72. package/dist/views/card/card-items/card-item/index.js +0 -206
  73. package/dist/views/card/card-items/index.css +0 -31
  74. package/dist/views/card/card-items/index.js +0 -189
  75. package/dist/views/card/context-menu/index.js +0 -165
  76. package/dist/views/card/index.js +0 -64
  77. package/dist/views/card/settings/index.css +0 -68
  78. package/dist/views/card/settings/index.js +0 -143
@@ -1,80 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = ViewsPopover;
9
- var _react = _interopRequireWildcard(require("react"));
10
- var _classnames = _interopRequireDefault(require("classnames"));
11
- var _components = require("../../../common/components");
12
- var _icons = _interopRequireDefault(require("../../icons"));
13
- var _keyCodes = require("../../../constants/keyCodes");
14
- var _hooks = require("../../../hooks");
15
- var _translate = _interopRequireDefault(require("../../../lang/translate"));
16
- require("../../../assets/css/dropdown-menu.css");
17
- function ViewsPopover(_ref) {
18
- let {
19
- menuStyle,
20
- onViewsPopoverToggle,
21
- onAddViewDialogToggle
22
- } = _ref;
23
- const {
24
- views,
25
- currentViewId,
26
- setCurrentViewId
27
- } = (0, _hooks.useViewContext)();
28
- const [searchValue, setSearchValue] = (0, _react.useState)('');
29
- const onKeyDown = (0, _react.useCallback)(event => {
30
- if (event.keyCode === _keyCodes.KeyCodes.ChineseInputMethod || event.keyCode === _keyCodes.KeyCodes.LeftArrow || event.keyCode === _keyCodes.KeyCodes.RightArrow) {
31
- event.stopPropagation();
32
- }
33
- }, []);
34
- const onSearchValueChange = (0, _react.useCallback)(newSearchValue => {
35
- if (searchValue === newSearchValue) return;
36
- setSearchValue(newSearchValue);
37
- }, [searchValue]);
38
- const toggleView = (0, _react.useCallback)(id => {
39
- setCurrentViewId(id);
40
- onViewsPopoverToggle();
41
- }, [onViewsPopoverToggle, setCurrentViewId]);
42
- return /*#__PURE__*/_react.default.createElement(_components.ClickOutside, {
43
- onClickOutside: onViewsPopoverToggle
44
- }, /*#__PURE__*/_react.default.createElement("div", {
45
- className: "sea-database-dropdown-menu dropdown-menu position-fixed sea-database-views-dropdown-menu",
46
- style: menuStyle
47
- }, /*#__PURE__*/_react.default.createElement("div", {
48
- className: "sea-database-views-search-wrapper"
49
- }, /*#__PURE__*/_react.default.createElement(_components.SearchInput, {
50
- autoFocus: true,
51
- isShowSearchIcon: true,
52
- value: searchValue,
53
- size: 28,
54
- placeholder: _translate.default.gettext('Search view'),
55
- onKeyDown: onKeyDown,
56
- onChange: onSearchValueChange
57
- })), /*#__PURE__*/_react.default.createElement("div", {
58
- className: "sea-database-views-list-wrapper"
59
- }, views.map(view => {
60
- return /*#__PURE__*/_react.default.createElement("div", {
61
- key: view._id,
62
- onClick: () => {
63
- toggleView(view._id);
64
- },
65
- className: (0, _classnames.default)('sea-database-dropdown-menu-item view-item')
66
- }, /*#__PURE__*/_react.default.createElement("span", {
67
- className: "view-item-left",
68
- draggable: true
69
- }, /*#__PURE__*/_react.default.createElement(_icons.default, {
70
- symbol: "drag"
71
- }), view.name), /*#__PURE__*/_react.default.createElement("span", {
72
- className: "view-item-right"
73
- }, view._id === currentViewId && /*#__PURE__*/_react.default.createElement(_icons.default, {
74
- symbol: "check"
75
- })));
76
- })), /*#__PURE__*/_react.default.createElement(_components.CommonAddTool, {
77
- callBack: onAddViewDialogToggle,
78
- footerName: _translate.default.gettext('Add view')
79
- })));
80
- }
package/dist/file-base.js DELETED
@@ -1,31 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
- var _react = _interopRequireWildcard(require("react"));
10
- var _database = _interopRequireDefault(require("./database"));
11
- var _globalSettings = _interopRequireDefault(require("./global-settings"));
12
- var _hooks = require("./hooks");
13
- var _translate = _interopRequireDefault(require("./lang/translate"));
14
- const FileBase = _ref => {
15
- let {
16
- settings,
17
- fixedColumnCount = 1
18
- } = _ref;
19
- (0, _react.useEffect)(() => {
20
- _translate.default.initTranslate(settings);
21
- _globalSettings.default.initSettings(settings);
22
- // eslint-disable-next-line react-hooks/exhaustive-deps
23
- }, []);
24
- return /*#__PURE__*/_react.default.createElement(_hooks.FileRepoContextProvider, {
25
- settings: settings
26
- }, /*#__PURE__*/_react.default.createElement(_hooks.ViewContextProvider, null, /*#__PURE__*/_react.default.createElement(_hooks.CollaboratorsProvider, null, /*#__PURE__*/_react.default.createElement(_hooks.TagsDataProvider, null, /*#__PURE__*/_react.default.createElement(_hooks.TypesDataProvider, null, /*#__PURE__*/_react.default.createElement(_hooks.SelectedRowsProvider, null, /*#__PURE__*/_react.default.createElement(_hooks.MetadataProvider, null, /*#__PURE__*/_react.default.createElement(_database.default, {
27
- settings: settings,
28
- fixedColumnCount: fixedColumnCount
29
- }))))))));
30
- };
31
- var _default = exports.default = FileBase;
@@ -1,69 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.useViewContext = exports.ViewContextProvider = void 0;
8
- var _react = _interopRequireWildcard(require("react"));
9
- var _components = require("../common/components");
10
- var _fileRepoContext = require("./file-repo-context");
11
- /* eslint-disable react/prop-types */
12
-
13
- const ViewContext = /*#__PURE__*/_react.default.createContext(null);
14
- const ViewContextProvider = _ref => {
15
- let {
16
- settings,
17
- children
18
- } = _ref;
19
- const [isLoading, setIsLoading] = (0, _react.useState)(true);
20
- const {
21
- fileRepo,
22
- context
23
- } = (0, _fileRepoContext.useFileRepoContext)();
24
- const [views, setViews] = (0, _react.useState)([]);
25
- const [currentViewId, setCurrentViewId] = (0, _react.useState)('');
26
- (0, _react.useEffect)(() => {
27
- const initViewContext = async () => {
28
- const views = fileRepo.views;
29
- const currentView = views[views.length - 1];
30
- const {
31
- linked_repo_id: repoID
32
- } = currentView;
33
- const res = await context.getRepo(repoID);
34
- const repo = res.data;
35
- context.addRepoSetting(repo);
36
- setViews(views);
37
- setCurrentViewId(currentView._id);
38
- setIsLoading(false);
39
- };
40
- initViewContext();
41
- // eslint-disable-next-line react-hooks/exhaustive-deps
42
- }, []);
43
- const insertView = (0, _react.useCallback)(view => {
44
- setViews([...views, view]);
45
- setCurrentViewId(view._id);
46
- }, [views]);
47
- if (isLoading) {
48
- return /*#__PURE__*/_react.default.createElement("div", {
49
- className: 'sea-metadata'
50
- }, /*#__PURE__*/_react.default.createElement(_components.CenteredLoading, null));
51
- }
52
- return /*#__PURE__*/_react.default.createElement(ViewContext.Provider, {
53
- value: {
54
- views,
55
- currentViewId,
56
- setCurrentViewId,
57
- insertView
58
- }
59
- }, children);
60
- };
61
- exports.ViewContextProvider = ViewContextProvider;
62
- const useViewContext = () => {
63
- const context = (0, _react.useContext)(ViewContext);
64
- if (!context) {
65
- throw new Error('\'AppContext\' is null');
66
- }
67
- return context;
68
- };
69
- exports.useViewContext = useViewContext;
@@ -1,45 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = void 0;
8
- var _react = _interopRequireDefault(require("react"));
9
- var _iconUtils = require("../../../../common/utils/icon-utils");
10
- var _cellFormatter = _interopRequireDefault(require("../../../../components/cell-formatter"));
11
- var _constants = require("../../../../constants");
12
- var _fileName = _interopRequireDefault(require("../../../table/formatters/file-name"));
13
- const SPECIAL_FILE_ICON = ['excel.png', 'md.png', 'ppt.png', 'sdoc_notification.ico', 'sdoc.png', 'txt.png', 'word.png'];
14
- const Formatter = _ref => {
15
- let {
16
- value,
17
- column,
18
- record,
19
- tagsData,
20
- ...params
21
- } = _ref;
22
- let className = '';
23
- if (column.type === _constants.CellType.FILE_NAME && value) {
24
- const icon = (0, _iconUtils.getFileIconName)(value);
25
- if (SPECIAL_FILE_ICON.includes(icon)) {
26
- className = 'sf-metadata-special-file-name-formatter';
27
- }
28
- }
29
- if (column.type === _constants.CellType.FILE_NAME) {
30
- return /*#__PURE__*/_react.default.createElement(_fileName.default, Object.assign({
31
- row: record,
32
- column: column,
33
- value: value
34
- }, params));
35
- }
36
- return /*#__PURE__*/_react.default.createElement(_cellFormatter.default, Object.assign({}, params, {
37
- readonly: true,
38
- className: className,
39
- value: value,
40
- column: column,
41
- row: record,
42
- tagsData: tagsData
43
- }));
44
- };
45
- var _default = exports.default = Formatter;
@@ -1,234 +0,0 @@
1
- .sf-metadata-card-item {
2
- min-width: 0;
3
- height: fit-content;
4
- background: #f9f9f9;
5
- border: 1px solid var(--bs-border-secondary-color);
6
- border-radius: 6px;
7
- box-shadow: 0 2px 6px rgba(0, 0, 0, .08);
8
- display: flex;
9
- flex-direction: column;
10
- overflow: hidden;
11
- user-select: none;
12
- transition: box-shadow .15s ease, border-color .15s ease, background-color .15s ease;
13
- cursor: pointer;
14
- }
15
-
16
- .sf-metadata-card-item.selected {
17
- border-color: #ff9800;
18
- }
19
-
20
- .sf-metadata-card-item:hover {
21
- box-shadow: 0 0 6px #0000002e;
22
- }
23
-
24
- .sf-metadata-card-item-image-container {
25
- position: relative;
26
- width: 100%;
27
- overflow: hidden;
28
- min-height: 150px;
29
- border-bottom: 1px solid var(--bs-border-secondary-color);
30
- }
31
-
32
- /* Use pseudo-element to establish aspect ratio (3:2) so height is always reserved */
33
- .sf-metadata-card-item-image-container::before {
34
- content: '';
35
- display: block;
36
- padding-top: 66.6667%;
37
- }
38
-
39
- .sf-metadata-card-item-image-container .sf-metadata-card-item-image {
40
- width: 100%;
41
- height: 100%;
42
- position: absolute;
43
- top: 0;
44
- left: 0;
45
- object-fit: contain;
46
- object-position: center;
47
- }
48
-
49
- .sf-metadata-card-item-image-scroll-wrapper {
50
- position: absolute;
51
- left: 0;
52
- top: 0;
53
- width: 100%;
54
- height: 100%;
55
- padding: 16px;
56
- overflow-y: auto;
57
- overflow-x: hidden;
58
- scrollbar-width: thin;
59
- scrollbar-color: transparent transparent;
60
- }
61
-
62
- .sf-metadata-card-item-image-scroll-wrapper.show-scrollbar {
63
- scrollbar-color: rgba(0, 0, 0, 0.2) transparent;
64
- }
65
-
66
- [data-bs-theme="dark"] .sf-metadata-card-item-image-scroll-wrapper.show-scrollbar {
67
- scrollbar-color: rgba(255, 255, 255, 0.2) transparent;
68
- }
69
-
70
- .sf-metadata-card-item-image-scroll-wrapper::-webkit-scrollbar {
71
- width: 6px;
72
- }
73
-
74
- .sf-metadata-card-item-image-scroll-wrapper::-webkit-scrollbar-track {
75
- background: transparent;
76
- }
77
-
78
- .sf-metadata-card-item-image-scroll-wrapper::-webkit-scrollbar-thumb {
79
- background: transparent;
80
- border-radius: 3px;
81
- }
82
-
83
- .sf-metadata-card-item-image-scroll-wrapper.show-scrollbar::-webkit-scrollbar-thumb {
84
- background: rgba(0, 0, 0, 0.2);
85
- }
86
-
87
- .sf-metadata-card-item-image-scroll-wrapper.show-scrollbar::-webkit-scrollbar-thumb:hover {
88
- background: rgba(0, 0, 0, 0.3);
89
- }
90
-
91
- [data-bs-theme="dark"] .sf-metadata-card-item-image-scroll-wrapper.show-scrollbar::-webkit-scrollbar-thumb {
92
- background: rgba(255, 255, 255, 0.2);
93
- }
94
-
95
- [data-bs-theme="dark"] .sf-metadata-card-item-image-scroll-wrapper.show-scrollbar::-webkit-scrollbar-thumb:hover {
96
- background: rgba(255, 255, 255, 0.3);
97
- }
98
-
99
- .sf-metadata-card-item-image-scroll-wrapper .sf-metadata-card-item-doc-thumbnail {
100
- width: 100%;
101
- height: auto;
102
- display: block;
103
- object-fit: contain;
104
- object-position: top center;
105
- }
106
-
107
- .sf-metadata-card-item-text-container {
108
- padding: 12px 16px 16px;
109
- background-color: var(--bs-body-bg);
110
- }
111
-
112
- .sf-metadata-card-item-text-container .sf-metadata-file-name {
113
- font-weight: 500;
114
- }
115
-
116
- .sf-metadata-card-item-text-container .sf-metadata-card-last-modified-info {
117
- width: 100%;
118
- display: flex;
119
- justify-content: space-between;
120
- align-items: center;
121
- }
122
-
123
- .sf-metadata-card-item-text-container .sf-metadata-card-last-modified-info .collaborator-item {
124
- color: var(--bs-body-color);
125
- background-color: transparent;
126
- padding: 0;
127
- }
128
-
129
- .sf-metadata-card-item-text-container .sf-metadata-card-last-modified-info .ctime-formatter {
130
- color: #666;
131
- flex-shrink: 0;
132
- }
133
-
134
- .sf-metadata-card-item .sf-metadata-card-item-field {
135
- margin-top: 10px;
136
- }
137
-
138
- .sf-metadata-card-item .sf-metadata-card-item-field-name {
139
- display: block;
140
- color: #666;
141
- font-size: 12px;
142
- margin-bottom: 4px;
143
- }
144
-
145
- .sf-metadata-card-item .sf-metadata-card-item-field .sf-metadata-record-cell-empty {
146
- display: inline-block;
147
- background-color: #f0f0f0;
148
- border-radius: 4px;
149
- height: 8px;
150
- width: 20px;
151
- }
152
-
153
- .sf-metadata-card-item .sf-metadata-ui {
154
- overflow: hidden;
155
- text-overflow: ellipsis;
156
- white-space: nowrap;
157
- line-height: 1.2;
158
- font-size: 13px;
159
- }
160
-
161
- .sf-metadata-card-item .sf-metadata-date-formatter,
162
- .sf-metadata-card-item .sf-metadata-number-formatter {
163
- text-align: left;
164
- }
165
-
166
- .sf-metadata-card-item .sf-metadata-text-formatter {
167
- overflow: hidden;
168
- text-overflow: ellipsis;
169
- white-space: nowrap;
170
- }
171
-
172
- .sf-metadata-card-item .file-name-formatter {
173
- margin-bottom: 8px;
174
- }
175
-
176
- .sf-metadata-card-item .file-name-formatter .sf-metadata-file-icon {
177
- transform: translateY(-1px);
178
- max-width: 100%;
179
- height: auto;
180
- }
181
-
182
- .sf-metadata-card-item .sf-metadata-card-item-field .collaborators-formatter {
183
- display: flex;
184
- flex-wrap: wrap;
185
- }
186
-
187
- .sf-metadata-card-item .sf-metadata-card-item-field .collaborators-formatter .collaborator-item {
188
- margin-top: 2px;
189
- margin-bottom: 2px;
190
- }
191
-
192
- .sf-metadata-card-item .sf-metadata-card-item-field .sf-metadata-checkbox-formatter {
193
- justify-content: flex-start;
194
- padding-left: 2px;
195
- }
196
-
197
- .sf-metadata-card-item .sf-metadata-card-item-field .sf-metadata-multiple-select-formatter {
198
- flex-wrap: wrap;
199
- }
200
-
201
- .sf-metadata-card-item .sf-metadata-card-item-field .sf-metadata-multiple-select-formatter .sf-metadata-ui-select-option {
202
- margin-top: 2px;
203
- margin-bottom: 2px;
204
- }
205
-
206
- .sf-metadata-view-card-items-container-text-wrap .sf-metadata-card-item-field .text-formatter {
207
- white-space: normal;
208
- max-height: 68px;
209
- }
210
-
211
- .sf-metadata-card-item .long-text-formatter,
212
- .sf-metadata-view-card-items-container-text-wrap .sf-metadata-card-item-field .long-text-formatter {
213
- display: -webkit-box;
214
- -webkit-box-orient: vertical;
215
- -webkit-line-clamp: 2;
216
- line-clamp: 2;
217
- overflow: hidden;
218
- line-height: 1.5;
219
- white-space: normal;
220
- }
221
-
222
- [data-bs-theme="dark"] .sf-metadata-card-item {
223
- background-color: rgba(19, 19, 19, 1);
224
- border-color: var(--bs-border-secondary-color);
225
- }
226
-
227
- [data-bs-theme="dark"] .sf-metadata-card-item.selected {
228
- border-color: #ff9800;
229
- }
230
-
231
- [data-bs-theme="dark"] .sf-metadata-card-item:hover {
232
- box-shadow: none;
233
- border-color: rgba(255, 255, 255, 0.2);
234
- }
@@ -1,206 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
- var _react = _interopRequireWildcard(require("react"));
10
- var _classnames = _interopRequireDefault(require("classnames"));
11
- var _iconUtils = require("../../../../common/utils/icon-utils");
12
- var _utils = require("../../../../common/utils/utils");
13
- var _globalSettings = _interopRequireDefault(require("../../../../global-settings"));
14
- var _hooks = require("../../../../hooks");
15
- var _cell = require("../../../../utils/cell");
16
- var _row = require("../../../../utils/row");
17
- var _formatter = _interopRequireDefault(require("./formatter"));
18
- require("./index.css");
19
- const CardItem = _ref => {
20
- let {
21
- isSelected,
22
- record,
23
- tagsData,
24
- fileNameColumn,
25
- mtimeColumn,
26
- modifierColumn,
27
- displayColumns,
28
- displayEmptyValue,
29
- displayColumnName,
30
- onOpenFile,
31
- onSelectCard,
32
- onContextMenu
33
- } = _ref;
34
- const {
35
- context
36
- } = (0, _hooks.useFileRepoContext)();
37
- const [isUsingIcon, setIsUsingIcon] = (0, _react.useState)(false);
38
- const [showScrollbar, setShowScrollbar] = (0, _react.useState)(false);
39
- const imgRef = (0, _react.useRef)(null);
40
- const containerRef = (0, _react.useRef)(null);
41
- const hoverTimerRef = (0, _react.useRef)(null);
42
- const fileNameValue = (0, _cell.getCellValueByColumn)(record, fileNameColumn);
43
- const mtimeValue = (0, _cell.getCellValueByColumn)(record, mtimeColumn);
44
- const modifierValue = (0, _cell.getCellValueByColumn)(record, modifierColumn);
45
-
46
- // for the big image
47
- const parentDir = (0, _react.useMemo)(() => (0, _cell.getParentDirFromRecord)(record), [record]);
48
- const isDir = (0, _react.useMemo)(() => (0, _row.checkIsDir)(record), [record]);
49
- const shouldUseThumbnail = (0, _react.useMemo)(() => {
50
- if (isDir) return false;
51
- const value = fileNameValue;
52
- const enableSeadoc = _globalSettings.default.getSetting('enableSeadoc');
53
- const enableThumbnailServer = _globalSettings.default.getSetting('enableThumbnailServer');
54
- return _utils.Utils.imageCheck(value) || _utils.Utils.pdfCheck(value) || _utils.Utils.videoCheck(value) || _utils.Utils.isEditableSdocFile(value, enableSeadoc) && enableThumbnailServer;
55
- }, [isDir, fileNameValue]);
56
- const isDocumentFile = (0, _react.useMemo)(() => {
57
- if (!shouldUseThumbnail || isUsingIcon) return false;
58
- const value = fileNameValue;
59
- const enableSeadoc = _globalSettings.default.getSetting('enableSeadoc');
60
- return _utils.Utils.pdfCheck(value) || _utils.Utils.isEditableSdocFile(value, enableSeadoc);
61
- }, [shouldUseThumbnail, fileNameValue, isUsingIcon]);
62
- const imageURLs = (0, _react.useMemo)(() => {
63
- if (isDir) {
64
- const iconURL = (0, _iconUtils.getFolderIconUrl)();
65
- return {
66
- URL: iconURL,
67
- iconURL: iconURL
68
- };
69
- }
70
- const value = fileNameValue;
71
- const fileIconURL = (0, _iconUtils.getFileIconUrl)(value);
72
- if (shouldUseThumbnail) {
73
- const path = _utils.Utils.encodePath(_utils.Utils.joinPath(parentDir, value));
74
- const siteRoot = _globalSettings.default.getSetting('siteRoot');
75
- const thumbnailSizeForOriginal = _globalSettings.default.getSetting('thumbnailSizeForOriginal');
76
- const repoID = context.getViewSetting('repoID');
77
- const thumbnailURL = `${siteRoot}thumbnail/${repoID}/${thumbnailSizeForOriginal}${path}?mtime=${(0, _cell.getFileMTimeFromRecord)(record)}`;
78
- return {
79
- URL: thumbnailURL,
80
- iconURL: fileIconURL
81
- };
82
- }
83
- return {
84
- URL: fileIconURL,
85
- iconURL: fileIconURL
86
- };
87
- }, [isDir, fileNameValue, shouldUseThumbnail, parentDir, context, record]);
88
- const onLoadError = (0, _react.useCallback)(() => {
89
- setIsUsingIcon(true);
90
- imgRef.current.src = imageURLs.iconURL;
91
- }, [imageURLs]);
92
- const handleClickCard = (0, _react.useCallback)(event => {
93
- event.preventDefault();
94
- event.stopPropagation();
95
- event.nativeEvent.stopImmediatePropagation();
96
- onSelectCard(record);
97
- }, [record, onSelectCard]);
98
- const handleFilenameClick = (0, _react.useCallback)(event => {
99
- event.stopPropagation();
100
- event.nativeEvent.stopImmediatePropagation();
101
- const canPreview = context.canPreview();
102
- if (!canPreview) return;
103
- onOpenFile(record);
104
- }, [context, onOpenFile, record]);
105
- const handleImageContainerMouseEnter = (0, _react.useCallback)(() => {
106
- if (!isDocumentFile) return;
107
- if (hoverTimerRef.current) {
108
- clearTimeout(hoverTimerRef.current);
109
- }
110
- hoverTimerRef.current = setTimeout(() => {
111
- setShowScrollbar(true);
112
- }, 500);
113
- }, [isDocumentFile]);
114
- const handleImageContainerMouseLeave = (0, _react.useCallback)(() => {
115
- if (hoverTimerRef.current) {
116
- clearTimeout(hoverTimerRef.current);
117
- hoverTimerRef.current = null;
118
- }
119
- setShowScrollbar(false);
120
- }, []);
121
- const handleImageContainerScroll = (0, _react.useCallback)(event => {
122
- event.stopPropagation();
123
- }, []);
124
- const scrollable = isDocumentFile && !isUsingIcon;
125
- return /*#__PURE__*/_react.default.createElement("article", {
126
- "data-id": record._id,
127
- className: (0, _classnames.default)('sf-metadata-card-item', {
128
- 'selected': isSelected
129
- }),
130
- onClick: handleClickCard,
131
- onContextMenu: onContextMenu,
132
- tabIndex: "0",
133
- onKeyDown: _utils.Utils.onKeyDown
134
- }, /*#__PURE__*/_react.default.createElement("div", {
135
- ref: containerRef,
136
- className: "sf-metadata-card-item-image-container",
137
- onMouseEnter: handleImageContainerMouseEnter,
138
- onMouseLeave: handleImageContainerMouseLeave
139
- }, scrollable ? /*#__PURE__*/_react.default.createElement("div", {
140
- className: (0, _classnames.default)('sf-metadata-card-item-image-scroll-wrapper', {
141
- 'show-scrollbar': showScrollbar
142
- }),
143
- onScroll: handleImageContainerScroll
144
- }, /*#__PURE__*/_react.default.createElement("img", {
145
- loading: "lazy",
146
- className: "sf-metadata-card-item-doc-thumbnail",
147
- ref: imgRef,
148
- src: imageURLs.URL,
149
- onError: onLoadError,
150
- alt: ""
151
- })) : /*#__PURE__*/_react.default.createElement("img", {
152
- loading: "lazy",
153
- className: "sf-metadata-card-item-image",
154
- ref: imgRef,
155
- src: imageURLs.URL,
156
- onError: onLoadError,
157
- alt: ""
158
- })), /*#__PURE__*/_react.default.createElement("div", {
159
- className: "sf-metadata-card-item-text-container"
160
- }, /*#__PURE__*/_react.default.createElement(_formatter.default, {
161
- value: fileNameValue,
162
- column: fileNameColumn,
163
- record: record,
164
- hideIcon: true,
165
- onFileNameClick: handleFilenameClick,
166
- tagsData: tagsData
167
- }), /*#__PURE__*/_react.default.createElement("div", {
168
- className: "sf-metadata-card-last-modified-info"
169
- }, /*#__PURE__*/_react.default.createElement(_formatter.default, {
170
- value: modifierValue,
171
- column: modifierColumn,
172
- record: record,
173
- tagsData: tagsData
174
- }), /*#__PURE__*/_react.default.createElement(_formatter.default, {
175
- value: mtimeValue,
176
- format: "relativeTime",
177
- column: mtimeColumn,
178
- record: record,
179
- tagsData: tagsData
180
- })), displayColumns.map(column => {
181
- const value = (0, _cell.getCellValueByColumn)(record, column);
182
- if (!displayEmptyValue && !(0, _cell.isValidCellValue)(value)) {
183
- if (displayColumnName) {
184
- return /*#__PURE__*/_react.default.createElement("div", {
185
- className: "sf-metadata-card-item-field",
186
- key: column.key
187
- }, /*#__PURE__*/_react.default.createElement("span", {
188
- className: "sf-metadata-card-item-field-name"
189
- }, column.name));
190
- }
191
- return null;
192
- }
193
- return /*#__PURE__*/_react.default.createElement("div", {
194
- className: "sf-metadata-card-item-field",
195
- key: column.key
196
- }, displayColumnName && /*#__PURE__*/_react.default.createElement("span", {
197
- className: "sf-metadata-card-item-field-name"
198
- }, column.name), /*#__PURE__*/_react.default.createElement(_formatter.default, {
199
- value: value,
200
- column: column,
201
- record: record,
202
- tagsData: tagsData
203
- }));
204
- })));
205
- };
206
- var _default = exports.default = CardItem;
@@ -1,31 +0,0 @@
1
- .sf-metadata-view-card-items-container {
2
- height: auto;
3
- --sf-card-min-width: 240px;
4
- --sf-card-max-width: 1fr;
5
- --sf-card-gap: 20px;
6
- padding: 20px;
7
- display: grid;
8
- grid-template-columns: repeat(auto-fill, minmax(var(--sf-card-min-width), var(--sf-card-max-width)));
9
- gap: var(--sf-card-gap);
10
- align-content: start;
11
- }
12
-
13
- @media (max-width: 1200px) {
14
- .sf-metadata-view-card-items-container {
15
- --sf-card-min-width: 210px;
16
- }
17
- }
18
-
19
- @media (max-width: 900px) {
20
- .sf-metadata-view-card-items-container {
21
- --sf-card-min-width: 190px;
22
- }
23
- }
24
-
25
- @media (max-width: 600px) {
26
- .sf-metadata-view-card-items-container {
27
- --sf-card-min-width: 160px;
28
- padding: 12px;
29
- --sf-card-gap: 12px;
30
- }
31
- }