@seafile/seafile-database 0.0.24 → 0.0.26

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 (103) hide show
  1. package/dist/api/api.js +19 -21
  2. package/dist/assets/css/dropdown-menu.css +96 -0
  3. package/dist/assets/css/file-repo.css +3 -0
  4. package/dist/common/components/file-tag/index.js +2 -2
  5. package/dist/common/components/modal-portal.js +12 -0
  6. package/dist/common/utils/icon-utils.js +9 -2
  7. package/dist/common/utils/utils.js +28 -0
  8. package/dist/components/cell-editors/index.js +2 -2
  9. package/dist/components/cell-editors/multiple-select-editor/index.js +2 -2
  10. package/dist/components/cell-editors/single-select-editor/index.js +2 -2
  11. package/dist/components/cell-editors/tags-editor/index.js +1 -2
  12. package/dist/components/cell-formatter/creator.js +3 -2
  13. package/dist/components/context-menu/index.js +2 -2
  14. package/dist/components/data-process-setter/filter-setter.js +2 -3
  15. package/dist/components/data-process-setter/hide-column-setter.js +1 -1
  16. package/dist/components/data-process-setter/index.js +7 -0
  17. package/dist/components/data-process-setter/manage-setter.js +1 -2
  18. package/dist/components/data-process-setter/settings-setter.js +119 -0
  19. package/dist/components/data-process-setter/sort-setter.js +2 -2
  20. package/dist/components/data-process-setter/view-type-setter.js +53 -0
  21. package/dist/components/dialogs/custom-modal-header/index.css +34 -0
  22. package/dist/components/dialogs/custom-modal-header/index.js +34 -0
  23. package/dist/components/dialogs/insert-view-dialog.js +104 -0
  24. package/dist/components/hover-menu/index.css +85 -0
  25. package/dist/components/hover-menu/index.js +107 -0
  26. package/dist/components/icons/arrow-down-icon.js +19 -0
  27. package/dist/components/icons/arrow-right-icon.js +29 -0
  28. package/dist/components/icons/arrow-up-icon.js +19 -0
  29. package/dist/components/icons/card-icon.js +28 -0
  30. package/dist/components/icons/close-icon.js +23 -0
  31. package/dist/components/icons/index.js +23 -1
  32. package/dist/components/icons/set-up-icon.js +22 -0
  33. package/dist/components/icons/table-icon.js +19 -0
  34. package/dist/components/image-previewer/_hooks/metadata-details.js +1 -1
  35. package/dist/components/image-previewer/_hooks/metadata-status.js +2 -2
  36. package/dist/components/image-previewer/image-detail/index.js +1 -1
  37. package/dist/components/image-previewer/index.js +2 -2
  38. package/dist/components/popover/groupbys-popover/index.js +5 -5
  39. package/dist/components/popover/index.js +7 -0
  40. package/dist/components/popover/settings-popover/field-display-settings/field-item.js +110 -0
  41. package/dist/components/popover/settings-popover/field-display-settings/index.css +135 -0
  42. package/dist/components/popover/settings-popover/field-display-settings/index.js +119 -0
  43. package/dist/components/popover/settings-popover/index.css +52 -0
  44. package/dist/components/popover/settings-popover/index.js +99 -0
  45. package/dist/components/popover/sort-popover/index.js +1 -1
  46. package/dist/components/popover/view-type-popover/index.css +51 -0
  47. package/dist/components/popover/view-type-popover/index.js +64 -0
  48. package/dist/components/searcher/index.js +3 -3
  49. package/dist/components/view-toolbar/card-view-toolbar/index.js +89 -0
  50. package/dist/components/view-toolbar/index.css +54 -1
  51. package/dist/components/view-toolbar/index.js +40 -48
  52. package/dist/components/view-toolbar/rows-toolbar/index.js +2 -2
  53. package/dist/components/view-toolbar/table-view-toolbar/index.js +1 -1
  54. package/dist/components/view-toolbar/view-items/index.css +55 -0
  55. package/dist/components/view-toolbar/view-items/index.js +98 -0
  56. package/dist/components/view-toolbar/view-items/views-popover.js +80 -0
  57. package/dist/constants/event-bus-type.js +3 -1
  58. package/dist/constants/view/index.js +44 -2
  59. package/dist/context.js +60 -35
  60. package/dist/file-view-base.js +44 -0
  61. package/dist/file-view.js +140 -0
  62. package/dist/global-settings.js +3 -1
  63. package/dist/hooks/collaborators.js +9 -3
  64. package/dist/hooks/file-view-context.js +95 -0
  65. package/dist/hooks/index.js +14 -14
  66. package/dist/hooks/metadata.js +51 -47
  67. package/dist/hooks/tagsData.js +8 -2
  68. package/dist/hooks/view-context.js +69 -0
  69. package/dist/index.js +3 -3
  70. package/dist/locale/en.js +11 -1
  71. package/dist/locale/zh_CN.js +6 -1
  72. package/dist/store/data-processor.js +1 -0
  73. package/dist/store/index.js +8 -6
  74. package/dist/store/operations/apply.js +1 -1
  75. package/dist/store/server-operator.js +20 -7
  76. package/dist/views/card/card-items/card-item/formatter.js +45 -0
  77. package/dist/views/card/card-items/card-item/index.css +234 -0
  78. package/dist/views/card/card-items/card-item/index.js +206 -0
  79. package/dist/views/card/card-items/index.css +31 -0
  80. package/dist/views/card/card-items/index.js +189 -0
  81. package/dist/views/card/context-menu/index.js +165 -0
  82. package/dist/views/card/index.js +64 -0
  83. package/dist/views/card/settings/index.css +68 -0
  84. package/dist/views/card/settings/index.js +143 -0
  85. package/dist/views/index.js +5 -3
  86. package/dist/views/table/editors/editor-container/index.js +2 -2
  87. package/dist/views/table/formatters/file-name.js +3 -3
  88. package/dist/views/table/index.js +2 -3
  89. package/dist/views/table/table-main/index.js +2 -2
  90. package/dist/views/table/table-main/rows/row/cell/formatter.js +2 -2
  91. package/dist/views/table/table-main/rows/row/cell/index.js +2 -2
  92. package/dist/views/table/table-main/rows-header/cell/dropdown-menu/index.js +1 -1
  93. package/dist/views/table/table-main/rows-header/cell/index.js +1 -1
  94. package/dist/views/table/table-main/rows-header/index.js +2 -2
  95. package/package.json +3 -2
  96. package/dist/components/view-toolbar/views/all-views/index.css +0 -85
  97. package/dist/components/view-toolbar/views/all-views/index.js +0 -165
  98. package/dist/components/view-toolbar/views/index.css +0 -22
  99. package/dist/components/view-toolbar/views/index.js +0 -215
  100. package/dist/components/view-toolbar/views/view-item/index.css +0 -83
  101. package/dist/components/view-toolbar/views/view-item/index.js +0 -159
  102. package/dist/database.js +0 -53
  103. package/dist/hooks/viewsData.js +0 -114
@@ -0,0 +1,64 @@
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 _components = require("../../../common/components");
11
+ var _icons = _interopRequireDefault(require("../../icons"));
12
+ var _constants = require("../../../constants");
13
+ var _translate = _interopRequireDefault(require("../../../lang/translate"));
14
+ require("./index.css");
15
+ const ViewTypePopover = _ref => {
16
+ let {
17
+ target,
18
+ type,
19
+ onChangeType,
20
+ hidePopover
21
+ } = _ref;
22
+ const onChangeViewType = (0, _react.useCallback)(type => {
23
+ onChangeType(type);
24
+ hidePopover();
25
+ }, [onChangeType, hidePopover]);
26
+ return /*#__PURE__*/_react.default.createElement(_components.CustomizePopover, {
27
+ target: target,
28
+ popoverClassName: "sea-metadata-view-type-popover",
29
+ hidePopover: hidePopover,
30
+ hidePopoverWithEsc: hidePopover,
31
+ modifiers: [{
32
+ name: 'preventOverflow',
33
+ options: {
34
+ boundary: document.body
35
+ }
36
+ }, {
37
+ name: 'offset',
38
+ options: {
39
+ offset: [-6, 8]
40
+ }
41
+ }]
42
+ }, /*#__PURE__*/_react.default.createElement("div", {
43
+ className: "sea-metadata-view-type-wrapper"
44
+ }, _constants.VIEW_TYPE_OPTIONS.map((item, index) => /*#__PURE__*/_react.default.createElement("div", {
45
+ className: "sea-metadata-view-type-item",
46
+ onClick: () => onChangeViewType(item.value),
47
+ key: index
48
+ }, /*#__PURE__*/_react.default.createElement("span", {
49
+ className: "sea-metadata-view-type-item-left"
50
+ }, /*#__PURE__*/_react.default.createElement(_icons.default, {
51
+ className: "sea-metadata-icon",
52
+ symbol: item.icon,
53
+ title: item.name
54
+ }), /*#__PURE__*/_react.default.createElement("span", {
55
+ className: "ml-2"
56
+ }, item.name)), /*#__PURE__*/_react.default.createElement("span", {
57
+ className: "sea-metadata-view-type-item-right"
58
+ }, type === item.value && /*#__PURE__*/_react.default.createElement(_icons.default, {
59
+ className: "sea-metadata-icon",
60
+ symbol: "check",
61
+ title: _translate.default.gettext('Selected')
62
+ }))))));
63
+ };
64
+ var _default = exports.default = ViewTypePopover;
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.default = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _searchInput = _interopRequireDefault(require("../../common/components/search-input"));
11
- var _appContext = require("../../hooks/app-context");
11
+ var _hooks = require("../../hooks");
12
12
  var _translate = _interopRequireDefault(require("../../lang/translate"));
13
13
  var _constants = require("../../constants");
14
14
  var _keyCodes = require("../../constants/keyCodes");
@@ -20,7 +20,7 @@ const Searcher = _ref => {
20
20
  } = _ref;
21
21
  const {
22
22
  context
23
- } = (0, _appContext.useAppContext)();
23
+ } = (0, _hooks.useFileViewContext)();
24
24
  const [isSearchActive, setIsSearchActive] = (0, _react.useState)(false);
25
25
  const searchInputRef = (0, _react.useRef)(null);
26
26
  const onToggleSearch = (0, _react.useCallback)(() => {
@@ -52,7 +52,7 @@ const Searcher = _ref => {
52
52
  unsubscribeClearSearch();
53
53
  unsubscribeReSearch();
54
54
  };
55
- }, [onClear, onReSearch]);
55
+ }, [context.eventBus, onClear, onReSearch]);
56
56
  return /*#__PURE__*/_react.default.createElement("div", {
57
57
  className: "sea-metadata-searcher-container mr-2"
58
58
  }, !isSearchActive && /*#__PURE__*/_react.default.createElement(_iconButton.default, {
@@ -0,0 +1,89 @@
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 _utils = require("../../../common/utils/utils");
11
+ var _iconButton = _interopRequireDefault(require("../../icon-button"));
12
+ var _constants = require("../../../constants");
13
+ var _hooks = require("../../../hooks");
14
+ var _translate = _interopRequireDefault(require("../../../lang/translate"));
15
+ var _dataProcessSetter = require("../../data-process-setter");
16
+ const CardViewToolbar = _ref => {
17
+ let {
18
+ isCustomPermission,
19
+ readOnly,
20
+ view,
21
+ collaborators,
22
+ modifyFilters,
23
+ modifySorts,
24
+ onToggleDetail = () => {},
25
+ onCloseDetail = () => {}
26
+ } = _ref;
27
+ const {
28
+ context
29
+ } = (0, _hooks.useFileViewContext)();
30
+ const viewType = (0, _react.useMemo)(() => view.type, [view]);
31
+ const viewColumns = (0, _react.useMemo)(() => {
32
+ if (!view) return [];
33
+ return view.columns;
34
+ }, [view]);
35
+
36
+ // const filterColumns = useMemo(() => {
37
+ // return viewColumns.filter(c => c.key !== PRIVATE_COLUMN_KEY.FILE_TYPE);
38
+ // }, [viewColumns]);
39
+
40
+ const onToggleSettings = (0, _react.useCallback)(() => {
41
+ context.eventBus.dispatch(_constants.EVENT_BUS_TYPE.TOGGLE_CARD_SETTINGS);
42
+ onCloseDetail();
43
+ }, [context.eventBus, onCloseDetail]);
44
+ const toggleDetails = (0, _react.useCallback)(() => {
45
+ context.eventBus.dispatch(_constants.EVENT_BUS_TYPE.CLOSE_CARD_SETTINGS);
46
+ onToggleDetail();
47
+ }, [context.eventBus, onToggleDetail]);
48
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
49
+ className: "sea-metadata-tool-left-operations"
50
+ }, /*#__PURE__*/_react.default.createElement(_dataProcessSetter.FilterSetter, {
51
+ wrapperClass: "sea-metadata-view-tool-operation-btn sea-metadata-view-tool-filter mr-2",
52
+ filtersClassName: "sea-metadata-filters",
53
+ target: `sea-metadata-filter-popover-${view._id}`,
54
+ readOnly: readOnly,
55
+ filterConjunction: view.filter_conjunction,
56
+ basicFilters: view.basic_filters,
57
+ filters: view.filters,
58
+ columns: viewColumns,
59
+ modifyFilters: modifyFilters,
60
+ collaborators: collaborators,
61
+ viewType: viewType
62
+ }), /*#__PURE__*/_react.default.createElement(_dataProcessSetter.SortSetter, {
63
+ wrapperClass: "sea-metadata-view-tool-operation-btn sea-metadata-view-tool-sort mr-2",
64
+ target: `sea-metadata-sort-popover-${view._id}`,
65
+ readOnly: readOnly,
66
+ sorts: view.sorts,
67
+ type: viewType,
68
+ columns: viewColumns,
69
+ modifySorts: modifySorts
70
+ }), !readOnly && /*#__PURE__*/_react.default.createElement(_iconButton.default, {
71
+ icon: "set-up",
72
+ className: "sf-metadata-view-tool-operation-btn sea-metadata-view-tool-setting",
73
+ size: 24,
74
+ role: "button",
75
+ "aria-label": _translate.default.gettext('Settings'),
76
+ title: _translate.default.gettext('Settings'),
77
+ tabIndex: 0,
78
+ onClick: onToggleSettings,
79
+ onKeyDown: _utils.Utils.onKeyDown
80
+ }), !isCustomPermission && /*#__PURE__*/_react.default.createElement(_iconButton.default, {
81
+ className: "cur-view-path-btn ml-2",
82
+ icon: "info",
83
+ title: _translate.default.gettext('Properties'),
84
+ onClick: toggleDetails
85
+ })), /*#__PURE__*/_react.default.createElement("div", {
86
+ className: "sf-metadata-tool-right-operations"
87
+ }));
88
+ };
89
+ var _default = exports.default = CardViewToolbar;
@@ -9,7 +9,38 @@
9
9
  border-bottom: 1px solid var(--bs-border-secondary-color);
10
10
  }
11
11
 
12
- .sea-metadata-view-tools {
12
+ .sea-metadata-base-operations {
13
+ display: flex;
14
+ align-items: center;
15
+ flex-grow: 1;
16
+ white-space: break-spaces;
17
+ word-break: break-word;
18
+ min-width: 0px;
19
+ overflow: hidden;
20
+ font-weight: 700;
21
+ font-size: 22px;
22
+ -webkit-box-orient: vertical;
23
+ text-overflow: ellipsis;
24
+ margin-inline-end: 4px;
25
+
26
+ }
27
+
28
+ .sea-metadata-base-operations .base-operations__ops {
29
+ display: none;
30
+ }
31
+
32
+ .sea-metadata-base-operations:hover .base-operations__ops {
33
+ display: block;
34
+ }
35
+
36
+ .base-operations__ops .seafile-multicolor-icon-btn:hover {
37
+ cursor: pointer;
38
+ background-color: #efefef;
39
+ border-radius: 4px;
40
+ }
41
+
42
+ .sea-metadata-view-ribbon .sea-metadata-view-tools {
43
+ flex-grow: 1;
13
44
  flex-shrink: 0;
14
45
  flex-wrap: nowrap;
15
46
  display: flex;
@@ -64,3 +95,25 @@
64
95
  .sea-qa-icon-btn.sea-metadata-rows-tool-btn {
65
96
  width: auto;
66
97
  }
98
+
99
+ .sea-metadata-view-ribbon.multiple-view {
100
+ flex: 1;
101
+ display: flex;
102
+ flex-direction: column;
103
+ align-items: center;
104
+ justify-content: flex-start;
105
+ height: 79px;
106
+ }
107
+
108
+ .sea-metadata-view-ribbon.multiple-view .sea-metadata-base-operations {
109
+ width: 100%;
110
+ height: 30px;
111
+ }
112
+
113
+ .sea-metadata-view-ribbon.multiple-view .sea-metadata-view-tools-container {
114
+ width: 100%;
115
+ height: 49px;
116
+ display: flex;
117
+ align-items: center;
118
+ justify-content: space-between;
119
+ }
@@ -9,22 +9,25 @@ exports.default = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _constants = require("../../constants");
11
11
  var _hooks = require("../../hooks");
12
- var _appContext = require("../../hooks/app-context");
13
- var _row = require("../../utils/row");
14
- var _rowsToolbar = _interopRequireDefault(require("./rows-toolbar"));
12
+ var _iconButton = _interopRequireDefault(require("../icon-button"));
13
+ var _cardViewToolbar = _interopRequireDefault(require("./card-view-toolbar"));
15
14
  var _tableViewToolbar = _interopRequireDefault(require("./table-view-toolbar"));
16
- var _views = _interopRequireDefault(require("./views"));
15
+ var _viewItems = _interopRequireDefault(require("./view-items"));
17
16
  require("./index.css");
18
17
  const ViewToolBar = _ref => {
19
18
  let {
20
19
  fixedColumnCount,
21
20
  tools = _constants.VIEW_TOOLS,
22
- createRowsTools = null,
23
- toggleView
21
+ createRowsTools = null
24
22
  } = _ref;
25
23
  const {
24
+ fileRepo,
26
25
  context
27
- } = (0, _appContext.useAppContext)();
26
+ } = (0, _hooks.useFileViewContext)();
27
+ const {
28
+ views,
29
+ currentViewId
30
+ } = (0, _hooks.useViewContext)();
28
31
  const {
29
32
  collaborators
30
33
  } = (0, _hooks.useCollaborators)();
@@ -36,58 +39,40 @@ const ViewToolBar = _ref => {
36
39
  modifyRowHeight,
37
40
  modifyHiddenColumns,
38
41
  modifyColumnOrder,
39
- searchRows,
40
- deleteRows,
41
- modifyRows,
42
- updateLocalRow
42
+ searchRows
43
43
  } = (0, _hooks.useMetadata)();
44
- const {
45
- selectedRowIds
46
- } = (0, _hooks.useSelectedRows)();
47
44
  const selectNone = (0, _react.useCallback)(event => {
48
45
  event && event.stopPropagation();
49
46
  event && event.nativeEvent && event.nativeEvent.stopImmediatePropagation();
50
47
  context.eventBus.dispatch(_constants.EVENT_BUS_TYPE.SELECT_NONE);
51
- }, []);
48
+ }, [context.eventBus]);
52
49
  const onHeaderClick = (0, _react.useCallback)(() => {
53
50
  selectNone();
54
51
  }, [selectNone]);
55
- const renderLeftTools = (0, _react.useCallback)(view => {
56
- if (selectedRowIds.length > 0 && tools.includes(_constants.VIEW_TOOL.ROWS_TOOLS)) {
57
- const rows = (0, _row.getRowsByIds)(metadata, selectedRowIds);
58
- return /*#__PURE__*/_react.default.createElement(_rowsToolbar.default, {
59
- rows: rows,
60
- columns: (metadata === null || metadata === void 0 ? void 0 : metadata.columns) || [],
61
- selectNone: selectNone,
62
- deleteRows: deleteRows,
63
- modifyRows: modifyRows,
64
- updateLocalRow: updateLocalRow,
65
- createTools: createRowsTools
66
- });
67
- }
68
- if (tools.includes(_constants.VIEW_TOOL.VIEWS)) {
69
- return /*#__PURE__*/_react.default.createElement(_views.default, {
70
- view: view,
71
- toggleView: toggleView
72
- });
73
- }
74
- return /*#__PURE__*/_react.default.createElement("div", {
75
- className: "sea-metadata-views"
76
- });
77
- }, [selectedRowIds, tools, metadata, selectNone, deleteRows, modifyRows, updateLocalRow, createRowsTools, toggleView]);
78
- const view = metadata === null || metadata === void 0 ? void 0 : metadata.view;
79
- const viewType = view === null || view === void 0 ? void 0 : view.type;
80
- const readOnly = view && context.canModifyView ? !context.canModifyView(view) : true;
81
- return /*#__PURE__*/_react.default.createElement("div", {
82
- className: "sea-metadata-view-ribbon",
52
+ const viewType = (0, _react.useMemo)(() => {
53
+ const view = views.find(view => view._id === currentViewId);
54
+ return view.type;
55
+ }, [currentViewId, views]);
56
+ return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
57
+ className: "sea-metadata-view-ribbon multiple-view",
83
58
  onClick: onHeaderClick
84
- }, renderLeftTools(view), /*#__PURE__*/_react.default.createElement("div", {
59
+ }, /*#__PURE__*/_react.default.createElement("div", {
60
+ className: "sea-metadata-base-operations"
61
+ }, /*#__PURE__*/_react.default.createElement("div", {
62
+ className: "base-name mr-2"
63
+ }, fileRepo.name), /*#__PURE__*/_react.default.createElement("div", {
64
+ className: "base-operations__ops"
65
+ }, /*#__PURE__*/_react.default.createElement(_iconButton.default, {
66
+ size: 24,
67
+ icon: 'more'
68
+ }))), /*#__PURE__*/_react.default.createElement("div", {
69
+ className: "sea-metadata-view-tools-container"
70
+ }, /*#__PURE__*/_react.default.createElement(_viewItems.default, null), /*#__PURE__*/_react.default.createElement("div", {
85
71
  className: "sea-metadata-view-tools"
86
- }, view && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, viewType === _constants.VIEW_TYPE.TABLE && /*#__PURE__*/_react.default.createElement(_tableViewToolbar.default, {
87
- readOnly: readOnly,
72
+ }, viewType === _constants.VIEW_TYPE.TABLE && /*#__PURE__*/_react.default.createElement(_tableViewToolbar.default, {
88
73
  tools: tools,
89
74
  fixedColumnCount: fixedColumnCount,
90
- view: view,
75
+ view: metadata === null || metadata === void 0 ? void 0 : metadata.view,
91
76
  collaborators: collaborators,
92
77
  modifyFilters: modifyFilters,
93
78
  modifySorts: modifySorts,
@@ -96,6 +81,13 @@ const ViewToolBar = _ref => {
96
81
  modifyHiddenColumns: modifyHiddenColumns,
97
82
  modifyColumnOrder: modifyColumnOrder,
98
83
  searchRows: searchRows
99
- }))));
84
+ }), viewType === _constants.VIEW_TYPE.CARD && /*#__PURE__*/_react.default.createElement(_cardViewToolbar.default, {
85
+ isCustomPermission: true,
86
+ readOnly: false,
87
+ view: metadata === null || metadata === void 0 ? void 0 : metadata.view,
88
+ collaborators: collaborators,
89
+ modifyFilters: modifyFilters,
90
+ modifySorts: modifySorts
91
+ })))));
100
92
  };
101
93
  var _default = exports.default = ViewToolBar;
@@ -12,7 +12,7 @@ var _components = require("../../../common/components");
12
12
  var _typeDetection = require("../../../common/utils/type-detection");
13
13
  var _iconButton = _interopRequireDefault(require("../../icon-button"));
14
14
  var _icons = _interopRequireDefault(require("../../icons"));
15
- var _appContext = require("../../../hooks/app-context");
15
+ var _hooks = require("../../../hooks");
16
16
  var _translate = _interopRequireDefault(require("../../../lang/translate"));
17
17
  const RowsToolbar = _ref => {
18
18
  let {
@@ -26,7 +26,7 @@ const RowsToolbar = _ref => {
26
26
  } = _ref;
27
27
  const {
28
28
  context
29
- } = (0, _appContext.useAppContext)();
29
+ } = (0, _hooks.useFileViewContext)();
30
30
  const [isOpen, setIsOpen] = (0, _react.useState)(false);
31
31
  const [isSubOpen, setIsSubOpen] = (0, _react.useState)(false);
32
32
  const [subMenuKey, setSubMenuKey] = (0, _react.useState)('');
@@ -72,7 +72,7 @@ const TableViewToolbar = _ref => {
72
72
  wrapperClass: "sea-metadata-view-tool-hide-column mr-2",
73
73
  target: `sea-metadata-hide-column-popover-${view._id}`,
74
74
  readOnly: readOnly,
75
- columns: viewColumns.slice(fixedColumnCount),
75
+ columns: viewColumns === null || viewColumns === void 0 ? void 0 : viewColumns.slice(fixedColumnCount),
76
76
  hiddenColumns: view.hidden_columns || [],
77
77
  modifyHiddenColumns: modifyHiddenColumns,
78
78
  modifyColumnOrder: modifyColumnOrder
@@ -0,0 +1,55 @@
1
+ .sea-database-views-wrapper {
2
+ display: flex;
3
+ align-items: center;
4
+ flex-grow: 1;
5
+ position: relative;
6
+ }
7
+
8
+ .sea-database-views-wrapper .base-view-item {
9
+ display: flex;
10
+ align-items: center;
11
+ cursor: pointer;
12
+ }
13
+
14
+ .sea-database-views-wrapper .base-view-item .view-icons {
15
+ display: flex;
16
+ flex-direction: column;
17
+ align-items: center;
18
+ font-size: 8px;
19
+ cursor: pointer;
20
+ }
21
+
22
+ .sea-database-views-dropdown-menu {
23
+ display: block;
24
+ }
25
+
26
+ .sea-database-views-dropdown-menu .sea-database-views-search-wrapper {
27
+ padding: 8px 16px;
28
+ }
29
+
30
+ .sea-database-views-dropdown-menu .sea-database-views-list-wrapper {
31
+ max-height: 240px;
32
+ min-height: 100px;
33
+ overflow-y: auto;
34
+ width: 300px;
35
+ }
36
+
37
+ .sea-database-views-dropdown-menu .view-item {
38
+ display: flex;
39
+ justify-content: space-between;
40
+ align-items: center;
41
+ position: relative;
42
+ }
43
+
44
+ .sea-database-views-dropdown-menu .view-item .view-item-left .seafile-multicolor-icon:hover {
45
+ cursor: grab;
46
+ }
47
+
48
+ .sea-database-views-dropdown-menu .view-item .view-item-right {
49
+ margin-right: 0;
50
+ }
51
+
52
+ .sea-database-views-dropdown-menu .add-item-btn {
53
+ padding-top: 8px;
54
+ height: 32px;
55
+ }
@@ -0,0 +1,98 @@
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 = Views;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _components = require("../../../common/components");
11
+ var _utils = require("../../../common/utils/utils");
12
+ var _insertViewDialog = _interopRequireDefault(require("../../dialogs/insert-view-dialog"));
13
+ var _icons = _interopRequireDefault(require("../../icons"));
14
+ var _hooks = require("../../../hooks");
15
+ var _viewsPopover = _interopRequireDefault(require("./views-popover"));
16
+ require("./index.css");
17
+ function Views() {
18
+ const {
19
+ context
20
+ } = (0, _hooks.useFileViewContext)();
21
+ const {
22
+ views,
23
+ currentViewId,
24
+ insertView
25
+ } = (0, _hooks.useViewContext)();
26
+ const viewRef = (0, _react.useRef)(null);
27
+ const [menuStyle, setMenuStyle] = (0, _react.useState)(null);
28
+ const [isShowViewsPopover, setIsShowViewsPopover] = (0, _react.useState)(false);
29
+ const [isShowAddViewDialog, setIsShowAddViewDialog] = (0, _react.useState)(false);
30
+ const currentView = (0, _react.useMemo)(() => {
31
+ return views.find(view => view._id === currentViewId);
32
+ }, [currentViewId, views]);
33
+ const onOpenViewsPopover = (0, _react.useCallback)(event => {
34
+ event && event.stopPropagation();
35
+ if (isShowViewsPopover) {
36
+ setIsShowViewsPopover(false);
37
+ return;
38
+ }
39
+ const {
40
+ left,
41
+ bottom
42
+ } = viewRef.current.getBoundingClientRect();
43
+ setMenuStyle({
44
+ left,
45
+ top: bottom + 12
46
+ }); // 12 is (view item height) - (all views button height)
47
+ setIsShowViewsPopover(true);
48
+ }, [isShowViewsPopover]);
49
+ const onCloseViewsPopover = (0, _react.useCallback)(event => {
50
+ event && event.stopPropagation();
51
+ setIsShowViewsPopover(false);
52
+ }, []);
53
+ const onAddViewDialogToggle = (0, _react.useCallback)(() => {
54
+ setIsShowAddViewDialog(!isShowAddViewDialog);
55
+ setIsShowViewsPopover(false);
56
+ }, [isShowAddViewDialog]);
57
+ const onAddView = (0, _react.useCallback)((viewName, viewType) => {
58
+ context.insertView({
59
+ name: viewName,
60
+ type: viewType
61
+ }).then(res => {
62
+ const {
63
+ view
64
+ } = res.data;
65
+ insertView(view);
66
+ onAddViewDialogToggle();
67
+ }).catch(err => {
68
+ const errMessage = _utils.Utils.getErrorMsg(err);
69
+ _components.toaster.danger(errMessage);
70
+ });
71
+ }, [context, insertView, onAddViewDialogToggle]);
72
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
73
+ className: "sea-database-views-wrapper"
74
+ }, /*#__PURE__*/_react.default.createElement("div", {
75
+ ref: viewRef,
76
+ className: "base-view-item",
77
+ onClick: onOpenViewsPopover
78
+ }, /*#__PURE__*/_react.default.createElement("div", {
79
+ className: "view-name"
80
+ }, currentView.name), /*#__PURE__*/_react.default.createElement("div", {
81
+ className: "view-icons ml-2"
82
+ }, /*#__PURE__*/_react.default.createElement(_icons.default, {
83
+ width: "8px",
84
+ height: "8px",
85
+ symbol: 'arrow-up'
86
+ }), /*#__PURE__*/_react.default.createElement(_icons.default, {
87
+ width: "8px",
88
+ height: "8px",
89
+ symbol: 'arrow-down'
90
+ }))), isShowViewsPopover && /*#__PURE__*/_react.default.createElement(_viewsPopover.default, {
91
+ menuStyle: menuStyle,
92
+ onViewsPopoverToggle: onCloseViewsPopover,
93
+ onAddViewDialogToggle: onAddViewDialogToggle
94
+ }), isShowAddViewDialog && /*#__PURE__*/_react.default.createElement(_insertViewDialog.default, {
95
+ onAddView: onAddView,
96
+ toggleCancel: onAddViewDialogToggle
97
+ })));
98
+ }
@@ -0,0 +1,80 @@
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
+ }
@@ -66,5 +66,7 @@ const EVENT_BUS_TYPE = exports.EVENT_BUS_TYPE = {
66
66
  START_SEARCH_ROWS: 'start_search_rows',
67
67
  CLEAR_SEARCH_ROWS: 'clear_search_rows',
68
68
  RE_SEARCH_ROWS: 're_search_rows',
69
- DISPLAY_SORTS: 'display_sorts'
69
+ DISPLAY_SORTS: 'display_sorts',
70
+ // card
71
+ UPDATE_SELECTED_RECORD_IDS: 'update_selected_record_ids'
70
72
  };