@seafile/seafile-database 0.0.19 → 0.0.21

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 +27 -21
  2. package/dist/assets/css/dropdown-menu.css +96 -0
  3. package/dist/common/components/file-tag/index.js +2 -2
  4. package/dist/common/utils/icon-utils.js +9 -2
  5. package/dist/common/utils/utils.js +28 -0
  6. package/dist/components/cell-editors/index.js +2 -2
  7. package/dist/components/cell-editors/multiple-select-editor/index.js +2 -2
  8. package/dist/components/cell-editors/single-select-editor/index.js +2 -2
  9. package/dist/components/cell-editors/tags-editor/index.js +1 -2
  10. package/dist/components/context-menu/index.js +2 -2
  11. package/dist/components/data-process-setter/filter-setter.js +1 -2
  12. package/dist/components/data-process-setter/manage-setter.js +1 -2
  13. package/dist/components/data-process-setter/sort-setter.js +2 -2
  14. package/dist/components/dialogs/custom-modal-header/index.css +34 -0
  15. package/dist/components/dialogs/custom-modal-header/index.js +34 -0
  16. package/dist/components/dialogs/insert-view-dialog.js +104 -0
  17. package/dist/components/icons/arrow-down-icon.js +19 -0
  18. package/dist/components/icons/arrow-up-icon.js +19 -0
  19. package/dist/components/icons/close-icon.js +23 -0
  20. package/dist/components/icons/index.js +14 -1
  21. package/dist/components/icons/set-up-icon.js +22 -0
  22. package/dist/components/image-previewer/_hooks/metadata-details.js +1 -1
  23. package/dist/components/image-previewer/_hooks/metadata-status.js +2 -2
  24. package/dist/components/image-previewer/image-detail/index.js +1 -1
  25. package/dist/components/image-previewer/index.js +2 -2
  26. package/dist/components/popover/groupbys-popover/index.js +5 -5
  27. package/dist/components/searcher/index.js +3 -3
  28. package/dist/components/view-toolbar/card-view-toolbar/index.js +89 -0
  29. package/dist/components/view-toolbar/index.css +54 -1
  30. package/dist/components/view-toolbar/index.js +40 -48
  31. package/dist/components/view-toolbar/rows-toolbar/index.js +2 -2
  32. package/dist/components/view-toolbar/table-view-toolbar/index.js +1 -1
  33. package/dist/components/view-toolbar/view-items/index.css +55 -0
  34. package/dist/components/view-toolbar/view-items/index.js +98 -0
  35. package/dist/components/view-toolbar/view-items/views-popover.js +80 -0
  36. package/dist/constants/event-bus-type.js +3 -1
  37. package/dist/constants/view/index.js +32 -2
  38. package/dist/context.js +89 -34
  39. package/dist/database.js +11 -18
  40. package/dist/file-base.js +31 -0
  41. package/dist/global-settings.js +3 -1
  42. package/dist/hooks/collaborators.js +9 -3
  43. package/dist/hooks/{app-context.js → file-repo-context.js} +25 -20
  44. package/dist/hooks/file-view-context.js +69 -0
  45. package/dist/hooks/index.js +14 -14
  46. package/dist/hooks/metadata.js +45 -47
  47. package/dist/hooks/tagsData.js +8 -2
  48. package/dist/index.js +3 -3
  49. package/dist/locale/en.js +6 -1
  50. package/dist/locale/zh_CN.js +6 -1
  51. package/dist/store/data-processor.js +1 -0
  52. package/dist/views/card/card-items/card-item/formatter.js +45 -0
  53. package/dist/views/card/card-items/card-item/index.css +234 -0
  54. package/dist/views/card/card-items/card-item/index.js +206 -0
  55. package/dist/views/card/card-items/index.css +31 -0
  56. package/dist/views/card/card-items/index.js +189 -0
  57. package/dist/views/card/context-menu/index.js +165 -0
  58. package/dist/views/card/index.js +64 -0
  59. package/dist/views/card/settings/index.css +68 -0
  60. package/dist/views/card/settings/index.js +143 -0
  61. package/dist/views/index.js +5 -3
  62. package/dist/views/table/editors/editor-container/index.js +2 -2
  63. package/dist/views/table/formatters/file-name.js +3 -3
  64. package/dist/views/table/index.js +2 -3
  65. package/dist/views/table/table-main/index.js +2 -2
  66. package/dist/views/table/table-main/rows/row/cell/formatter.js +2 -2
  67. package/dist/views/table/table-main/rows/row/cell/index.js +2 -2
  68. package/dist/views/table/table-main/rows-header/cell/dropdown-menu/index.js +1 -1
  69. package/dist/views/table/table-main/rows-header/cell/index.js +1 -1
  70. package/dist/views/table/table-main/rows-header/index.js +2 -2
  71. package/package.json +5 -2
  72. package/dist/components/view-toolbar/views/all-views/index.css +0 -85
  73. package/dist/components/view-toolbar/views/all-views/index.js +0 -165
  74. package/dist/components/view-toolbar/views/index.css +0 -22
  75. package/dist/components/view-toolbar/views/index.js +0 -215
  76. package/dist/components/view-toolbar/views/view-item/index.css +0 -83
  77. package/dist/components/view-toolbar/views/view-item/index.js +0 -159
  78. package/dist/hooks/viewsData.js +0 -154
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/seafile-database",
3
- "version": "0.0.19",
3
+ "version": "0.0.21",
4
4
  "private": false,
5
5
  "description": "This is a seafile database components",
6
6
  "main": "dist/index.js",
@@ -31,7 +31,8 @@
31
31
  "prepare": "husky install",
32
32
  "lint": "lint-staged",
33
33
  "fix-locale": "eslint --ext .jsx,.js ./src/locale --fix",
34
- "translate": "node ./scripts/translate ./src"
34
+ "translate": "node ./scripts/translate ./src",
35
+ "mock": "nodemon ./mock/server.js"
35
36
  },
36
37
  "lint-staged": {
37
38
  "src/**/*.js": [
@@ -95,6 +96,7 @@
95
96
  "is-wsl": "^1.1.0",
96
97
  "jest": "29.7.0",
97
98
  "jest-environment-jsdom": "29.7.0",
99
+ "json-server": "0.17.4",
98
100
  "koa": "2.16.0",
99
101
  "koa-router": "7.3.0",
100
102
  "koa-send": "5.0.1",
@@ -102,6 +104,7 @@
102
104
  "lint-staged": "15.4.3",
103
105
  "mini-css-extract-plugin": "^2.4.5",
104
106
  "node-polyfill-webpack-plugin": "2.0.1",
107
+ "nodemon": "3.1.11",
105
108
  "postcss": "^8.4.31",
106
109
  "postcss-flexbugs-fixes": "^5.0.2",
107
110
  "postcss-loader": "^6.2.1",
@@ -1,85 +0,0 @@
1
- @import url('../view-item/index.css');
2
-
3
- .sea-metadata-views .sea-metadata-all-views-container {
4
- padding: 0 8px;
5
- }
6
-
7
- .sea-metadata-views .sea-metadata-all-views-container .sea-metadata-view-item {
8
- height: 24px;
9
- padding: 2px 4px;
10
- border-radius: 3px;
11
- }
12
-
13
- .sea-metadata-views .sea-metadata-all-views-container .sea-metadata-view-item:hover {
14
- background-color: #efefef;
15
- }
16
-
17
- .sea-metadata-views .sea-metadata-all-views-container .sea-metadata-view-item.active::before {
18
- display: none;
19
- }
20
-
21
- .sea-metadata-views .sea-metadata-all-views-container .sea-qa-icon-svg-down {
22
- width: 1rem !important;
23
- height: 1rem !important;
24
- color: #666;
25
- }
26
-
27
- .sea-metadata-views .sea-metadata-all-views-container .sea-metadata-view-item {
28
- width: 24px;
29
- height: 24px;
30
- padding: 4px 6px;
31
- }
32
-
33
- .sea-metadata-view-dropdown-menu .all-views-search-wrapper {
34
- padding: 8px 16px;
35
- }
36
-
37
- .sea-metadata-view-dropdown-menu .all-views-list-wrapper {
38
- max-height: 240px;
39
- min-height: 100px;
40
- overflow-y: auto;
41
- width: 300px;
42
- }
43
-
44
- .all-views-list-wrapper .dropdown-item.view-item {
45
- display: flex;
46
- justify-content: space-between;
47
- align-items: center;
48
- position: relative;
49
- }
50
-
51
- .all-views-list-wrapper .dropdown-item.view-item.sea-metadata-view-item-next-position-before::before {
52
- content: '';
53
- border: 0.5px solid #555;
54
- border-radius: 1px;
55
- position: absolute;
56
- top: 0px;
57
- left: 0px;
58
- width: 100%;
59
- }
60
-
61
- .all-views-list-wrapper .dropdown-item.view-item.sea-metadata-view-item-next-position-after::after {
62
- content: '';
63
- border: 0.5px solid #555;
64
- border-radius: 1px;
65
- position: absolute;
66
- bottom: 0px;
67
- left: 0px;
68
- width: 100%;
69
- }
70
-
71
- .all-views-list-wrapper .dropdown-item.view-item .view-item-left .sea-qa-icon-svg:hover {
72
- cursor: grab;
73
- }
74
-
75
- .all-views-list-wrapper .dropdown-item.view-item .view-item-right .sea-qa-icon-svg {
76
- margin-right: 0;
77
- }
78
-
79
- .all-views-list-wrapper .all-views-empty-tip {
80
- padding-left: 16px;
81
- }
82
-
83
- .all-views-list-wrapper .tip-default {
84
- font-size: 14px;
85
- }
@@ -1,165 +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 = require("react");
9
- var _classnames = _interopRequireDefault(require("classnames"));
10
- var _components = require("../../../../common/components");
11
- var _icons = _interopRequireDefault(require("../../../icons"));
12
- var _keyCodes = require("../../../../constants/keyCodes");
13
- var _translate = _interopRequireDefault(require("../../../../lang/translate"));
14
- require("./index.css");
15
- const AllViews = _ref => {
16
- let {
17
- viewID,
18
- allViews = [],
19
- isSelected,
20
- onMove,
21
- toggleView
22
- } = _ref;
23
- const [isShowDropdownMenu, setIsShowDropdownMenu] = (0, _react.useState)(false);
24
- const [dropRelativePosition, setDropRelativePosition] = (0, _react.useState)('');
25
- const [currentOverViewId, setCurrentOverViewId] = (0, _react.useState)('');
26
- const [searchValue, setSearchValue] = (0, _react.useState)('');
27
- const viewRef = (0, _react.useRef)(null);
28
- const menuStyle = (0, _react.useRef)({});
29
- const enteredCounter = (0, _react.useRef)(0);
30
- const onDragStart = (0, _react.useCallback)((event, viewId) => {
31
- event.stopPropagation();
32
- event.dataTransfer.setDragImage(event.target.parentNode, 10, 10);
33
- event.dataTransfer.effectAllowed = 'move';
34
- event.dataTransfer.setData('text/plain', viewId);
35
- }, []);
36
- const onDragEnter = (0, _react.useCallback)(event => {
37
- event.stopPropagation();
38
- enteredCounter.current = enteredCounter.current + 1;
39
- }, []);
40
- const onDragOver = (0, _react.useCallback)((event, viewId) => {
41
- if (event.dataTransfer.dropEffect === 'copy') return;
42
- event.stopPropagation();
43
- event.preventDefault();
44
- event.dataTransfer.dropEffect = 'move';
45
- const dropRelativePosition = event.nativeEvent.offsetY <= event.target.clientHeight / 2 ? 'before' : 'after';
46
- setDropRelativePosition(dropRelativePosition);
47
- setCurrentOverViewId(viewId);
48
- }, []);
49
- const onDragLeave = (0, _react.useCallback)(event => {
50
- event.stopPropagation();
51
- enteredCounter.current = enteredCounter.current - 1;
52
- if (!enteredCounter.current === 0) return;
53
- setDropRelativePosition('');
54
- setCurrentOverViewId('');
55
- }, []);
56
- const onDrop = (0, _react.useCallback)((event, viewId) => {
57
- event.stopPropagation();
58
- event.preventDefault();
59
- enteredCounter.current = 0;
60
- const moveViewID = event.dataTransfer.getData('text/plain');
61
- if (moveViewID !== viewId) {
62
- onMove && onMove(moveViewID, viewId, dropRelativePosition);
63
- }
64
- setDropRelativePosition('');
65
- setCurrentOverViewId('');
66
- }, [dropRelativePosition, onMove]);
67
- const openDropdownMenu = (0, _react.useCallback)(() => {
68
- const {
69
- left,
70
- bottom
71
- } = viewRef.current.getBoundingClientRect();
72
- menuStyle.current = {
73
- left,
74
- top: bottom + 12
75
- }; // 12 is (view item height) - (all views button height)
76
- setIsShowDropdownMenu(true);
77
- }, []);
78
- const closeDropdown = (0, _react.useCallback)(() => {
79
- setIsShowDropdownMenu(false);
80
- setSearchValue('');
81
- }, []);
82
- const views = (0, _react.useMemo)(() => {
83
- if (searchValue) {
84
- return allViews.filter(v => v.name.toLowerCase().includes(searchValue.toLowerCase()));
85
- }
86
- return allViews;
87
- }, [allViews, searchValue]);
88
- const onKeyDown = (0, _react.useCallback)(event => {
89
- if (event.keyCode === _keyCodes.KeyCodes.ChineseInputMethod || event.keyCode === _keyCodes.KeyCodes.LeftArrow || event.keyCode === _keyCodes.KeyCodes.RightArrow) {
90
- event.stopPropagation();
91
- }
92
- }, []);
93
- const onSearchValueChange = (0, _react.useCallback)(newSearchValue => {
94
- if (searchValue === newSearchValue) return;
95
- setSearchValue(newSearchValue);
96
- }, [searchValue]);
97
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
98
- className: "sea-metadata-view-container sea-metadata-all-views-container",
99
- onClick: openDropdownMenu
100
- }, /*#__PURE__*/React.createElement("div", {
101
- className: (0, _classnames.default)('sea-metadata-view-item', {
102
- 'active': isSelected
103
- }),
104
- ref: viewRef
105
- }, /*#__PURE__*/React.createElement("div", {
106
- className: "sea-metadata-view-item-operation-down"
107
- }, /*#__PURE__*/React.createElement(_icons.default, {
108
- symbol: "down"
109
- })))), isShowDropdownMenu && /*#__PURE__*/React.createElement(_components.ClickOutside, {
110
- onClickOutside: closeDropdown
111
- }, /*#__PURE__*/React.createElement("div", {
112
- className: "sea-qa-dropdown-menu dropdown-menu position-fixed sea-metadata-view-dropdown-menu",
113
- style: menuStyle.current
114
- }, /*#__PURE__*/React.createElement("div", {
115
- className: "all-views-search-wrapper"
116
- }, /*#__PURE__*/React.createElement(_components.SearchInput, {
117
- autoFocus: true,
118
- isShowSearchIcon: true,
119
- value: searchValue,
120
- size: 28,
121
- placeholder: _translate.default.gettext('Search view'),
122
- onKeyDown: onKeyDown,
123
- onChange: onSearchValueChange
124
- })), /*#__PURE__*/React.createElement("div", {
125
- className: "all-views-list-wrapper"
126
- }, views.map(view => {
127
- return /*#__PURE__*/React.createElement("div", {
128
- key: view._id,
129
- onClick: () => {
130
- toggleView(view._id);
131
- },
132
- className: (0, _classnames.default)('dropdown-item sea-qa-dropdown-item view-item', {
133
- 'sea-metadata-view-item-next-position-before': dropRelativePosition === 'before' && currentOverViewId === view._id,
134
- 'sea-metadata-view-item-next-position-after': dropRelativePosition === 'after' && currentOverViewId === view._id
135
- }),
136
- onDragStart: event => {
137
- onDragStart(event, view._id);
138
- },
139
- onDragEnter: onDragEnter,
140
- onDragOver: event => {
141
- onDragOver(event, view._id);
142
- },
143
- onDragLeave: event => {
144
- onDragLeave(event, view._id);
145
- },
146
- onDrop: event => {
147
- onDrop(event, view._id);
148
- }
149
- }, /*#__PURE__*/React.createElement("span", {
150
- className: "view-item-left",
151
- draggable: true
152
- }, /*#__PURE__*/React.createElement(_icons.default, {
153
- symbol: "drag"
154
- }), view.name), /*#__PURE__*/React.createElement("span", {
155
- className: "view-item-right"
156
- }, view._id === viewID && /*#__PURE__*/React.createElement(_icons.default, {
157
- symbol: "check"
158
- })));
159
- }), views.length === 0 && /*#__PURE__*/React.createElement("div", {
160
- className: "all-views-empty-tip"
161
- }, /*#__PURE__*/React.createElement("div", {
162
- className: "tip-default"
163
- }, _translate.default.gettext('No results')))))));
164
- };
165
- var _default = exports.default = AllViews;
@@ -1,22 +0,0 @@
1
- .sea-metadata-views {
2
- height: 100%;
3
- flex: 1;
4
- display: flex;
5
- align-items: center;
6
- padding: 0 8px 0 16px;
7
- overflow: hidden;
8
- }
9
-
10
- .sea-metadata-views .sea-metadata-views-nav-container {
11
- height: 100%;
12
- margin-right: 8px;
13
- overflow-x: scroll;
14
- overflow-y: hidden;
15
- position: relative;
16
- scrollbar-width: none;
17
- display: inline-flex;
18
- }
19
-
20
- .sea-metadata-views .sea-metadata-views-nav-scroll-btns .scroll-active {
21
- background-color: #efefef;
22
- }
@@ -1,215 +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 = require("react");
9
- var _classnames = _interopRequireDefault(require("classnames"));
10
- var _components = require("../../../common/components");
11
- var _typeDetection = require("../../../common/utils/type-detection");
12
- var _iconButton = _interopRequireDefault(require("../../icon-button"));
13
- var _hooks = require("../../../hooks");
14
- var _appContext = require("../../../hooks/app-context");
15
- var _translate = _interopRequireDefault(require("../../../lang/translate"));
16
- var _allViews = _interopRequireDefault(require("./all-views"));
17
- var _viewItem = _interopRequireDefault(require("./view-item"));
18
- require("./index.css");
19
- const Views = _ref => {
20
- var _getViewById;
21
- let {
22
- view,
23
- toggleView
24
- } = _ref;
25
- const {
26
- context
27
- } = (0, _appContext.useAppContext)();
28
- const [canScrollPrev, setCanScrollPrev] = (0, _react.useState)(false);
29
- const [canScrollNext, setCanScrollNext] = (0, _react.useState)(false);
30
- const [canViewsScroll, setViewsScroll] = (0, _react.useState)(true);
31
- const [isShowViewNameDialog, setIsShowViewNameDialog] = (0, _react.useState)(false);
32
- const isRenameRef = (0, _react.useRef)(false);
33
- const viewsNavContainerRef = (0, _react.useRef)(null);
34
- const {
35
- isLoading,
36
- viewsData,
37
- viewID,
38
- insertView,
39
- modifyView,
40
- moveView,
41
- duplicateView,
42
- deleteView,
43
- getViewById
44
- } = (0, _hooks.useViewsData)();
45
- const allViews = (0, _react.useMemo)(() => {
46
- if (isLoading) return [];
47
- const {
48
- navigation,
49
- views
50
- } = viewsData;
51
- if (!navigation || !views) return [];
52
- return navigation.map(n => views.find(v => v._id === n._id));
53
- }, [isLoading, viewsData]);
54
- const isSelected = (0, _react.useMemo)(() => {
55
- if (viewID && !allViews.find(v => v._id === viewID)) return true;
56
- return false;
57
- }, [allViews, viewID]);
58
- const openViewNameDialog = (0, _react.useCallback)(isRename => {
59
- isRenameRef.current = Boolean(isRename);
60
- setIsShowViewNameDialog(true);
61
- }, []);
62
- const closeViewNameDialog = (0, _react.useCallback)(() => {
63
- isRenameRef.current = false;
64
- setIsShowViewNameDialog(false);
65
- }, []);
66
- const checkAvailableScrollType = (0, _react.useCallback)(() => {
67
- let {
68
- offsetWidth,
69
- scrollWidth,
70
- scrollLeft
71
- } = viewsNavContainerRef.current;
72
- let _canScrollPrev = false;
73
- let _canScrollNext = false;
74
- if (scrollLeft > 0) {
75
- _canScrollPrev = true;
76
- }
77
- if (scrollLeft + offsetWidth + 1 < scrollWidth) {
78
- _canScrollNext = true;
79
- }
80
- if (_canScrollPrev !== canScrollPrev || _canScrollNext !== canScrollNext) {
81
- setCanScrollPrev(_canScrollPrev);
82
- setCanScrollNext(_canScrollNext);
83
- }
84
- }, [canScrollPrev, canScrollNext]);
85
- const isContainerOverflowing = (0, _react.useCallback)(() => {
86
- if (!viewsNavContainerRef.current) {
87
- return false;
88
- }
89
- const container = viewsNavContainerRef.current;
90
- const containerWidth = container.offsetWidth;
91
- const childrenTotalWidth = container.scrollWidth;
92
- return childrenTotalWidth > containerWidth;
93
- }, []);
94
- (0, _react.useEffect)(() => {
95
- setViewsScroll(isContainerOverflowing());
96
- const handleResize = () => {
97
- setViewsScroll(isContainerOverflowing());
98
- };
99
- window.addEventListener('resize', handleResize);
100
- return () => window.removeEventListener('resize', handleResize);
101
- }, [isContainerOverflowing]);
102
- const onScroll = (0, _react.useCallback)(() => {
103
- checkAvailableScrollType();
104
- }, [checkAvailableScrollType]);
105
- const onWheel = (0, _react.useCallback)(event => {
106
- const {
107
- wheelDeltaX,
108
- wheelDeltaY
109
- } = event.nativeEvent;
110
- // Mouse wheel scrolls, wheelDeltaY is not 0, wheelDeltaX is 0 (scroll up and down)
111
- if (wheelDeltaY !== 0 && wheelDeltaX === 0) {
112
- let tablesScrollLeft = viewsNavContainerRef.current.scrollLeft - wheelDeltaY;
113
- if (tablesScrollLeft <= 0 && viewsNavContainerRef.current.scrollLeft > 0) {
114
- viewsNavContainerRef.current.scrollLeft = 0;
115
- return;
116
- }
117
- if (tablesScrollLeft > 0 && tablesScrollLeft < viewsNavContainerRef.current.clientWidth) {
118
- viewsNavContainerRef.current.scrollLeft = tablesScrollLeft;
119
- }
120
- }
121
- }, []);
122
- const onScrollControlClick = (0, _react.useCallback)(type => {
123
- const {
124
- offsetWidth,
125
- scrollWidth,
126
- scrollLeft
127
- } = viewsNavContainerRef.current;
128
- let targetScrollLeft;
129
- if (type === 'left') {
130
- if (scrollLeft === 0) return;
131
- targetScrollLeft = Math.max(scrollLeft - offsetWidth, 0);
132
- } else if (type === 'right') {
133
- if (scrollLeft + offsetWidth === scrollWidth) return;
134
- targetScrollLeft = Math.min(scrollLeft + offsetWidth, scrollWidth - offsetWidth);
135
- }
136
- let timer = null;
137
- const startScrollLeft = scrollLeft;
138
- const distance = targetScrollLeft - startScrollLeft;
139
- const stepCount = 20;
140
- let currentStep = 0;
141
- timer = setInterval(() => {
142
- currentStep++;
143
- const progress = currentStep / stepCount;
144
- const easeProgress = 1 - Math.pow(1 - progress, 3);
145
- const newScrollLeft = startScrollLeft + distance * easeProgress;
146
- viewsNavContainerRef.current.scrollLeft = newScrollLeft;
147
- if (currentStep >= stepCount) {
148
- viewsNavContainerRef.current.scrollLeft = targetScrollLeft;
149
- clearInterval(timer);
150
- }
151
- }, 16);
152
- }, []);
153
- (0, _react.useEffect)(() => {
154
- checkAvailableScrollType();
155
- }, [allViews, checkAvailableScrollType]);
156
- const deleteAble = allViews.length > 1 && context.canDeleteView();
157
- const moveAble = context.canMoveView();
158
- const duplicateAble = context.canDuplicateView();
159
- const modifyAble = context.canModifyView();
160
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
161
- className: "sea-metadata-views"
162
- }, /*#__PURE__*/React.createElement("div", {
163
- className: "sea-metadata-views-nav-container",
164
- ref: viewsNavContainerRef,
165
- onScroll: onScroll,
166
- onWheel: onWheel
167
- }, allViews.map(v => {
168
- const isSelect = (0, _typeDetection.isFunction)(toggleView) && v._id === viewID;
169
- return /*#__PURE__*/React.createElement(_viewItem.default, {
170
- key: v._id,
171
- isSelect: isSelect,
172
- view: v,
173
- modifyAble: modifyAble,
174
- deleteAble: deleteAble,
175
- moveAble: moveAble,
176
- duplicateAble: duplicateAble,
177
- onSelect: toggleView,
178
- onModify: () => openViewNameDialog(true),
179
- onMove: moveView,
180
- onDelete: deleteView,
181
- onDuplicate: duplicateView
182
- });
183
- })), canViewsScroll && /*#__PURE__*/React.createElement("div", {
184
- className: "sea-metadata-views-nav-scroll-btns d-flex align-items-center mr-2"
185
- }, /*#__PURE__*/React.createElement(_allViews.default, {
186
- viewID: viewID,
187
- allViews: allViews,
188
- isSelected: isSelected,
189
- onMove: moveView,
190
- toggleView: toggleView
191
- }), /*#__PURE__*/React.createElement(_iconButton.default, {
192
- icon: "left",
193
- className: (0, _classnames.default)('scroll-control-btn scroll-prev', {
194
- 'scroll-active': canScrollPrev
195
- }),
196
- onClick: () => onScrollControlClick('left')
197
- }), /*#__PURE__*/React.createElement(_iconButton.default, {
198
- icon: "right",
199
- className: (0, _classnames.default)('scroll-control-btn scroll-next ml-2', {
200
- 'scroll-active': canScrollNext
201
- }),
202
- onClick: () => onScrollControlClick('right')
203
- })), context.canInsertView() && /*#__PURE__*/React.createElement(_iconButton.default, {
204
- icon: "add",
205
- onClick: () => openViewNameDialog()
206
- })), isShowViewNameDialog && /*#__PURE__*/React.createElement(_components.CustomizeNameDialog, {
207
- title: isRenameRef.current ? _translate.default.gettext('Rename view') : _translate.default.gettext('New view'),
208
- value: isRenameRef.current ? ((_getViewById = getViewById(view._id)) === null || _getViewById === void 0 ? void 0 : _getViewById.name) || '' : '',
209
- onToggle: closeViewNameDialog,
210
- onSubmit: isRenameRef.current ? name => modifyView(view._id, {
211
- name
212
- }) : insertView
213
- }));
214
- };
215
- var _default = exports.default = Views;
@@ -1,83 +0,0 @@
1
- .sea-metadata-views .sea-metadata-view-container {
2
- padding: 0 12px;
3
- display: flex;
4
- align-items: center;
5
- height: 100%;
6
- flex-shrink: 0;
7
- position: relative;
8
- }
9
-
10
- .sea-metadata-views .sea-metadata-view-container:first-child {
11
- padding-left: 0;
12
- }
13
-
14
- .sea-metadata-views .sea-metadata-view-next-position-before::before,
15
- .sea-metadata-views .sea-metadata-view-next-position-after::after {
16
- content: '';
17
- border: 1px solid #555;
18
- border-radius: 1px;
19
- position: absolute;
20
- top: 4px;
21
- bottom: 4px;
22
- }
23
-
24
- .sea-metadata-views .sea-metadata-view-next-position-before::before {
25
- left: 0;
26
- }
27
-
28
- .sea-metadata-views .sea-metadata-view-next-position-after::after {
29
- right: -2px;
30
- }
31
-
32
- .sea-metadata-views .sea-metadata-view-item {
33
- height: 100%;
34
- display: flex;
35
- align-items: center;
36
- gap: 4px;
37
- cursor: pointer;
38
- flex-shrink: 0;
39
- }
40
-
41
- .sea-metadata-views .sea-metadata-view-item.disabled {
42
- cursor: default;
43
- }
44
-
45
- .sea-metadata-views .sea-metadata-view-item.active {
46
- color: #ED7109;
47
- position: relative;
48
- transition: color .3;
49
- }
50
-
51
- .sea-metadata-views .sea-metadata-view-item.active::before {
52
- content: '';
53
- position: absolute;
54
- bottom: 0;
55
- left: 0;
56
- width: 100%;
57
- height: 2px;
58
- background-color: #ED7109;
59
- }
60
-
61
- .sea-metadata-views .sea-metadata-view-item-operation-down {
62
- height: 12px;
63
- width: 12px;
64
- display: flex;
65
- align-items: center;
66
- justify-content: center;
67
- }
68
-
69
- .sea-metadata-view-dropdown-menu {
70
- display: block;
71
- }
72
-
73
- .sea-metadata-view-dropdown-menu .dropdown-item .sea-qa-icon-svg {
74
- margin-right: 10px;
75
- height: 14px;
76
- width: 14px;
77
- color: #666;
78
- margin-top: -2px;
79
- }
80
-
81
- .sea-metadata-view-dropdown-menu .dropdown-item:hover .sea-qa-icon-svg {
82
- color: #FFF;
83
- }