@teambit/workspace 0.0.669 → 0.0.672
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/ui/workspace-components-drawer/workspace-components-drawer.module.scss +33 -0
- package/dist/ui/workspace-components-drawer/workspace-components.drawer.d.ts +2 -1
- package/dist/ui/workspace-components-drawer/workspace-components.drawer.js +97 -7
- package/dist/ui/workspace-components-drawer/workspace-components.drawer.js.map +1 -1
- package/package-tar/teambit-workspace-0.0.672.tgz +0 -0
- package/package.json +32 -30
- package/{preview-1646796119196.js → preview-1646931465104.js} +0 -0
- package/ui/workspace-components-drawer/workspace-components-drawer.module.scss +33 -0
- package/ui/workspace-components-drawer/workspace-components.drawer.tsx +82 -7
- package/package-tar/teambit-workspace-0.0.669.tgz +0 -0
|
@@ -6,3 +6,36 @@
|
|
|
6
6
|
.collapseIcon {
|
|
7
7
|
width: 16px;
|
|
8
8
|
}
|
|
9
|
+
|
|
10
|
+
.deprecateFilter {
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: row;
|
|
13
|
+
font-size: 14px;
|
|
14
|
+
justify-content: space-between;
|
|
15
|
+
padding: 8px;
|
|
16
|
+
margin: 4px 8px;
|
|
17
|
+
|
|
18
|
+
.filterIcon {
|
|
19
|
+
line-height: 16px;
|
|
20
|
+
display: flex;
|
|
21
|
+
|
|
22
|
+
.filterIconLabel {
|
|
23
|
+
margin: 0px 8px;
|
|
24
|
+
font-size: 12px;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.filterWidgetIcon {
|
|
30
|
+
margin-right: 12px;
|
|
31
|
+
padding: 4px;
|
|
32
|
+
|
|
33
|
+
&:hover {
|
|
34
|
+
background: white;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
&.open {
|
|
38
|
+
color: var(--bit-accent-color, #6c5ce7);
|
|
39
|
+
background-color: var(--bit-bg-heavy, #f6f6f6);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -6,9 +6,10 @@ export declare class WorkspaceComponentsDrawer implements DrawerType {
|
|
|
6
6
|
constructor(treeNodeSlot: ComponentTreeSlot);
|
|
7
7
|
id: string;
|
|
8
8
|
name: string;
|
|
9
|
-
|
|
9
|
+
widgets: JSX.Element[];
|
|
10
10
|
Context: ({ children }: {
|
|
11
11
|
children: any;
|
|
12
12
|
}) => JSX.Element;
|
|
13
|
+
Filters: JSX.Element[];
|
|
13
14
|
render: () => JSX.Element;
|
|
14
15
|
}
|
|
@@ -49,6 +49,16 @@ function _uiFoundationUi2() {
|
|
|
49
49
|
return data;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
function _evangelistElements() {
|
|
53
|
+
const data = require("@teambit/evangelist.elements.icon");
|
|
54
|
+
|
|
55
|
+
_evangelistElements = function () {
|
|
56
|
+
return data;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
return data;
|
|
60
|
+
}
|
|
61
|
+
|
|
52
62
|
function _react() {
|
|
53
63
|
const data = _interopRequireWildcard(require("react"));
|
|
54
64
|
|
|
@@ -89,6 +99,16 @@ function _designUiStyles2() {
|
|
|
89
99
|
return data;
|
|
90
100
|
}
|
|
91
101
|
|
|
102
|
+
function _designUiInput() {
|
|
103
|
+
const data = require("@teambit/design.ui.input.toggle");
|
|
104
|
+
|
|
105
|
+
_designUiInput = function () {
|
|
106
|
+
return data;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
return data;
|
|
110
|
+
}
|
|
111
|
+
|
|
92
112
|
function _workspaceContext() {
|
|
93
113
|
const data = require("../workspace/workspace-context");
|
|
94
114
|
|
|
@@ -115,7 +135,11 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
115
135
|
|
|
116
136
|
const WorkspaceTreeContext = /*#__PURE__*/(0, _react().createContext)({
|
|
117
137
|
collapsed: true,
|
|
118
|
-
setCollapsed: () => {}
|
|
138
|
+
setCollapsed: () => {},
|
|
139
|
+
activeFilters: [],
|
|
140
|
+
setActiveFilter: () => {},
|
|
141
|
+
filterOpen: false,
|
|
142
|
+
setFilterOpen: () => {}
|
|
119
143
|
});
|
|
120
144
|
|
|
121
145
|
class WorkspaceComponentsDrawer {
|
|
@@ -123,26 +147,53 @@ class WorkspaceComponentsDrawer {
|
|
|
123
147
|
this.treeNodeSlot = treeNodeSlot;
|
|
124
148
|
(0, _defineProperty2().default)(this, "id", 'workspace-components');
|
|
125
149
|
(0, _defineProperty2().default)(this, "name", 'COMPONENTS');
|
|
126
|
-
(0, _defineProperty2().default)(this, "
|
|
150
|
+
(0, _defineProperty2().default)(this, "widgets", [/*#__PURE__*/_react().default.createElement(FilterWidget, {
|
|
151
|
+
key: 'filter-widget'
|
|
152
|
+
}), /*#__PURE__*/_react().default.createElement(TreeToggleWidget, {
|
|
153
|
+
key: 'tree-toggle-widget'
|
|
154
|
+
})]);
|
|
127
155
|
(0, _defineProperty2().default)(this, "Context", ({
|
|
128
156
|
children
|
|
129
157
|
}) => {
|
|
130
158
|
const [collapsed, setCollapsed] = (0, _react().useState)(true);
|
|
159
|
+
const [activeFilters, setActiveFilters] = (0, _react().useState)([]);
|
|
160
|
+
const [filterOpen, setFilterOpen] = (0, _react().useState)(false);
|
|
161
|
+
|
|
162
|
+
const handleActiveFilterToggle = filterId => {
|
|
163
|
+
const isFilterActive = activeFilters.includes(filterId);
|
|
164
|
+
|
|
165
|
+
if (isFilterActive) {
|
|
166
|
+
setActiveFilters(list => list.filter(id => id !== filterId));
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
setActiveFilters(list => list.concat(filterId));
|
|
171
|
+
};
|
|
172
|
+
|
|
131
173
|
return /*#__PURE__*/_react().default.createElement(WorkspaceTreeContext.Provider, {
|
|
132
174
|
value: {
|
|
133
175
|
collapsed,
|
|
134
|
-
setCollapsed
|
|
176
|
+
setCollapsed,
|
|
177
|
+
activeFilters,
|
|
178
|
+
setActiveFilter: handleActiveFilterToggle,
|
|
179
|
+
filterOpen,
|
|
180
|
+
setFilterOpen
|
|
135
181
|
}
|
|
136
182
|
}, children);
|
|
137
183
|
});
|
|
184
|
+
(0, _defineProperty2().default)(this, "Filters", [/*#__PURE__*/_react().default.createElement(DeprecateFilter, {
|
|
185
|
+
key: 'deprecate-filter'
|
|
186
|
+
})]);
|
|
138
187
|
(0, _defineProperty2().default)(this, "render", () => {
|
|
139
188
|
const workspace = (0, _react().useContext)(_workspaceContext().WorkspaceContext);
|
|
140
189
|
const {
|
|
141
|
-
collapsed
|
|
190
|
+
collapsed,
|
|
191
|
+
activeFilters
|
|
142
192
|
} = (0, _react().useContext)(WorkspaceTreeContext);
|
|
143
193
|
const {
|
|
144
194
|
treeNodeSlot
|
|
145
195
|
} = this;
|
|
196
|
+
const showDeprecatedComponents = activeFilters.find(activeFilter => activeFilter === 'deprecate');
|
|
146
197
|
const TreeNodeRenderer = (0, _react().useCallback)(function TreeNode(props) {
|
|
147
198
|
const children = props.node.children;
|
|
148
199
|
if (!children) return /*#__PURE__*/_react().default.createElement(_uiFoundationUi2().ComponentView, (0, _extends2().default)({}, props, {
|
|
@@ -153,15 +204,20 @@ class WorkspaceComponentsDrawer {
|
|
|
153
204
|
return /*#__PURE__*/_react().default.createElement(_uiFoundationUi2().NamespaceTreeNode, props);
|
|
154
205
|
}, [treeNodeSlot]);
|
|
155
206
|
if (!workspace) return /*#__PURE__*/_react().default.createElement(_uiFoundationUi().FullLoader, null);
|
|
207
|
+
const components = showDeprecatedComponents ? workspace.components : workspace.components.filter(component => {
|
|
208
|
+
var _component$deprecatio;
|
|
156
209
|
|
|
157
|
-
|
|
210
|
+
return !((_component$deprecatio = component.deprecation) !== null && _component$deprecatio !== void 0 && _component$deprecatio.isDeprecate);
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
if (components.length === 0) {
|
|
158
214
|
return /*#__PURE__*/_react().default.createElement("span", {
|
|
159
215
|
className: (0, _classnames().default)(_designUiStyles().mutedItalic, _designUiStyles2().ellipsis, _workspaceComponentsDrawerModule().default.emptyWorkspace)
|
|
160
216
|
}, "Workspace is empty");
|
|
161
217
|
}
|
|
162
218
|
|
|
163
219
|
return /*#__PURE__*/_react().default.createElement(_uiFoundationUi2().ComponentTree, {
|
|
164
|
-
components:
|
|
220
|
+
components: components,
|
|
165
221
|
isCollapsed: collapsed,
|
|
166
222
|
TreeNode: TreeNodeRenderer
|
|
167
223
|
});
|
|
@@ -172,7 +228,7 @@ class WorkspaceComponentsDrawer {
|
|
|
172
228
|
|
|
173
229
|
exports.WorkspaceComponentsDrawer = WorkspaceComponentsDrawer;
|
|
174
230
|
|
|
175
|
-
function
|
|
231
|
+
function TreeToggleWidget() {
|
|
176
232
|
const {
|
|
177
233
|
collapsed,
|
|
178
234
|
setCollapsed
|
|
@@ -185,4 +241,38 @@ function Widget() {
|
|
|
185
241
|
});
|
|
186
242
|
}
|
|
187
243
|
|
|
244
|
+
function FilterWidget() {
|
|
245
|
+
const {
|
|
246
|
+
filterOpen,
|
|
247
|
+
setFilterOpen
|
|
248
|
+
} = (0, _react().useContext)(WorkspaceTreeContext);
|
|
249
|
+
return /*#__PURE__*/_react().default.createElement(_evangelistElements().Icon, {
|
|
250
|
+
className: (0, _classnames().default)(_workspaceComponentsDrawerModule().default.filterWidgetIcon, filterOpen && _workspaceComponentsDrawerModule().default.open),
|
|
251
|
+
of: "Ripple_filters",
|
|
252
|
+
onClick: () => setFilterOpen(!filterOpen)
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
function DeprecateFilter() {
|
|
257
|
+
const {
|
|
258
|
+
activeFilters,
|
|
259
|
+
setActiveFilter,
|
|
260
|
+
filterOpen
|
|
261
|
+
} = (0, _react().useContext)(WorkspaceTreeContext);
|
|
262
|
+
const isActive = activeFilters.includes('deprecate');
|
|
263
|
+
if (!filterOpen) return null;
|
|
264
|
+
return /*#__PURE__*/_react().default.createElement("div", {
|
|
265
|
+
className: (0, _classnames().default)(_workspaceComponentsDrawerModule().default.deprecateFilter, isActive && _workspaceComponentsDrawerModule().default.active)
|
|
266
|
+
}, /*#__PURE__*/_react().default.createElement("div", {
|
|
267
|
+
className: _workspaceComponentsDrawerModule().default.filterIcon
|
|
268
|
+
}, /*#__PURE__*/_react().default.createElement(_evangelistElements().Icon, {
|
|
269
|
+
of: "note-deprecated"
|
|
270
|
+
}), /*#__PURE__*/_react().default.createElement("span", {
|
|
271
|
+
className: _workspaceComponentsDrawerModule().default.filterIconLabel
|
|
272
|
+
}, "Deprecated")), /*#__PURE__*/_react().default.createElement("div", null, /*#__PURE__*/_react().default.createElement(_designUiInput().Toggle, {
|
|
273
|
+
checked: isActive,
|
|
274
|
+
onInputChanged: () => setActiveFilter('deprecate')
|
|
275
|
+
})));
|
|
276
|
+
}
|
|
277
|
+
|
|
188
278
|
//# sourceMappingURL=workspace-components.drawer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["workspace-components.drawer.tsx"],"names":["WorkspaceTreeContext","collapsed","setCollapsed","WorkspaceComponentsDrawer","constructor","treeNodeSlot","children","workspace","WorkspaceContext","TreeNodeRenderer","TreeNode","props","node","payload","ScopePayload","components","length","mutedItalic","ellipsis","styles","emptyWorkspace","
|
|
1
|
+
{"version":3,"sources":["workspace-components.drawer.tsx"],"names":["WorkspaceTreeContext","collapsed","setCollapsed","activeFilters","setActiveFilter","filterOpen","setFilterOpen","WorkspaceComponentsDrawer","constructor","treeNodeSlot","children","setActiveFilters","handleActiveFilterToggle","filterId","isFilterActive","includes","list","filter","id","concat","workspace","WorkspaceContext","showDeprecatedComponents","find","activeFilter","TreeNodeRenderer","TreeNode","props","node","payload","ScopePayload","components","component","deprecation","isDeprecate","length","mutedItalic","ellipsis","styles","emptyWorkspace","TreeToggleWidget","icon","collapseIcon","FilterWidget","filterWidgetIcon","open","DeprecateFilter","isActive","deprecateFilter","active","filterIcon","filterIconLabel"],"mappings":"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","sourcesContent":["import type { DrawerType } from '@teambit/ui-foundation.ui.tree.drawer';\nimport { FullLoader } from '@teambit/ui-foundation.ui.full-loader';\nimport {\n ComponentTree,\n PayloadType,\n ComponentView,\n ScopeTreeNode,\n NamespaceTreeNode,\n ScopePayload,\n} from '@teambit/ui-foundation.ui.side-bar';\nimport { Icon } from '@teambit/evangelist.elements.icon';\nimport { TreeNodeProps } from '@teambit/design.ui.tree';\nimport React, { useCallback, useContext, useState, createContext } from 'react';\nimport classNames from 'classnames';\nimport { ComponentTreeSlot } from '@teambit/component-tree';\nimport { mutedItalic } from '@teambit/design.ui.styles.muted-italic';\nimport { ellipsis } from '@teambit/design.ui.styles.ellipsis';\nimport { Toggle } from '@teambit/design.ui.input.toggle';\nimport { WorkspaceContext } from '../workspace/workspace-context';\nimport styles from './workspace-components-drawer.module.scss';\n\ntype WorkspaceTreeContextType = {\n collapsed: boolean;\n setCollapsed: (x: boolean) => void;\n filterOpen: boolean;\n setFilterOpen: (open: boolean) => void;\n activeFilters: string[];\n setActiveFilter: (filterId: string) => void;\n};\nconst WorkspaceTreeContext = createContext<WorkspaceTreeContextType>({\n collapsed: true,\n setCollapsed: () => {},\n activeFilters: [],\n setActiveFilter: () => {},\n filterOpen: false,\n setFilterOpen: () => {},\n});\n\nexport class WorkspaceComponentsDrawer implements DrawerType {\n constructor(private treeNodeSlot: ComponentTreeSlot) {}\n\n id = 'workspace-components';\n name = 'COMPONENTS';\n\n widgets = [<FilterWidget key={'filter-widget'} />, <TreeToggleWidget key={'tree-toggle-widget'} />];\n\n Context = ({ children }) => {\n const [collapsed, setCollapsed] = useState(true);\n const [activeFilters, setActiveFilters] = useState<string[]>([]);\n const [filterOpen, setFilterOpen] = useState<boolean>(false);\n\n const handleActiveFilterToggle = (filterId: string) => {\n const isFilterActive = activeFilters.includes(filterId);\n if (isFilterActive) {\n setActiveFilters((list) => list.filter((id) => id !== filterId));\n return;\n }\n setActiveFilters((list) => list.concat(filterId));\n };\n\n return (\n <WorkspaceTreeContext.Provider\n value={{\n collapsed,\n setCollapsed,\n activeFilters,\n setActiveFilter: handleActiveFilterToggle,\n filterOpen,\n setFilterOpen,\n }}\n >\n {children}\n </WorkspaceTreeContext.Provider>\n );\n };\n\n Filters = [<DeprecateFilter key={'deprecate-filter'} />];\n\n render = () => {\n const workspace = useContext(WorkspaceContext);\n const { collapsed, activeFilters } = useContext(WorkspaceTreeContext);\n const { treeNodeSlot } = this;\n const showDeprecatedComponents = activeFilters.find((activeFilter) => activeFilter === 'deprecate');\n\n const TreeNodeRenderer = useCallback(\n function TreeNode(props: TreeNodeProps<PayloadType>) {\n const children = props.node.children;\n\n if (!children) return <ComponentView {...props} treeNodeSlot={treeNodeSlot} />; // non collapse\n\n if (props.node.payload instanceof ScopePayload) return <ScopeTreeNode {...props} />;\n\n return <NamespaceTreeNode {...props} />;\n },\n [treeNodeSlot]\n );\n\n if (!workspace) return <FullLoader />;\n\n const components = showDeprecatedComponents\n ? workspace.components\n : workspace.components.filter((component) => !component.deprecation?.isDeprecate);\n\n if (components.length === 0) {\n return <span className={classNames(mutedItalic, ellipsis, styles.emptyWorkspace)}>Workspace is empty</span>;\n }\n\n return <ComponentTree components={components} isCollapsed={collapsed} TreeNode={TreeNodeRenderer} />;\n };\n}\n\nfunction TreeToggleWidget() {\n const { collapsed, setCollapsed } = useContext(WorkspaceTreeContext);\n const icon = collapsed\n ? 'https://static.bit.dev/bit-icons/expand.svg'\n : 'https://static.bit.dev/bit-icons/collapse.svg';\n return <img src={icon} className={styles.collapseIcon} onClick={() => setCollapsed(!collapsed)} />;\n}\n\nfunction FilterWidget() {\n const { filterOpen, setFilterOpen } = useContext(WorkspaceTreeContext);\n return (\n <Icon\n className={classNames(styles.filterWidgetIcon, filterOpen && styles.open)}\n of=\"Ripple_filters\"\n onClick={() => setFilterOpen(!filterOpen)}\n />\n );\n}\n\nfunction DeprecateFilter() {\n const { activeFilters, setActiveFilter, filterOpen } = useContext(WorkspaceTreeContext);\n const isActive = activeFilters.includes('deprecate');\n\n if (!filterOpen) return null;\n\n return (\n <div className={classNames(styles.deprecateFilter, isActive && styles.active)}>\n <div className={styles.filterIcon}>\n <Icon of=\"note-deprecated\" />\n <span className={styles.filterIconLabel}>Deprecated</span>\n </div>\n <div>\n <Toggle checked={isActive} onInputChanged={() => setActiveFilter('deprecate')} />\n </div>\n </div>\n );\n}\n"]}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/workspace",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.672",
|
|
4
4
|
"homepage": "https://bit.dev/teambit/workspace/workspace",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.workspace",
|
|
8
8
|
"name": "workspace",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.672"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"lodash": "4.17.21",
|
|
@@ -38,45 +38,47 @@
|
|
|
38
38
|
"core-js": "^3.0.0",
|
|
39
39
|
"@teambit/base-ui.surfaces.split-pane.hover-splitter": "1.0.0",
|
|
40
40
|
"@teambit/base-ui.surfaces.split-pane.split-pane": "1.0.0",
|
|
41
|
+
"@teambit/design.ui.input.toggle": "1.0.12",
|
|
42
|
+
"@teambit/evangelist.elements.icon": "1.0.2",
|
|
41
43
|
"@teambit/component-id": "0.0.401",
|
|
42
44
|
"@teambit/bit-error": "0.0.394",
|
|
43
45
|
"@teambit/legacy-bit-id": "0.0.398",
|
|
44
|
-
"@teambit/logger": "0.0.
|
|
45
|
-
"@teambit/scope": "0.0.
|
|
46
|
-
"@teambit/cli": "0.0.
|
|
47
|
-
"@teambit/isolator": "0.0.
|
|
48
|
-
"@teambit/component-tree": "0.0.
|
|
46
|
+
"@teambit/logger": "0.0.542",
|
|
47
|
+
"@teambit/scope": "0.0.672",
|
|
48
|
+
"@teambit/cli": "0.0.452",
|
|
49
|
+
"@teambit/isolator": "0.0.672",
|
|
50
|
+
"@teambit/component-tree": "0.0.460",
|
|
49
51
|
"@teambit/component.ui.component-status-resolver": "0.0.492",
|
|
50
|
-
"@teambit/lanes.ui.lanes": "0.0.
|
|
52
|
+
"@teambit/lanes.ui.lanes": "0.0.13",
|
|
51
53
|
"@teambit/harmony.modules.resolved-component": "0.0.484",
|
|
52
|
-
"@teambit/dependency-resolver": "0.0.
|
|
53
|
-
"@teambit/compiler": "0.0.
|
|
54
|
-
"@teambit/component": "0.0.
|
|
55
|
-
"@teambit/graphql": "0.0.
|
|
56
|
-
"@teambit/aspect-loader": "0.0.
|
|
57
|
-
"@teambit/bundler": "0.0.
|
|
58
|
-
"@teambit/envs": "0.0.
|
|
59
|
-
"@teambit/pubsub": "0.0.
|
|
60
|
-
"@teambit/ui": "0.0.
|
|
61
|
-
"@teambit/variants": "0.0.
|
|
54
|
+
"@teambit/dependency-resolver": "0.0.672",
|
|
55
|
+
"@teambit/compiler": "0.0.672",
|
|
56
|
+
"@teambit/component": "0.0.672",
|
|
57
|
+
"@teambit/graphql": "0.0.672",
|
|
58
|
+
"@teambit/aspect-loader": "0.0.672",
|
|
59
|
+
"@teambit/bundler": "0.0.672",
|
|
60
|
+
"@teambit/envs": "0.0.672",
|
|
61
|
+
"@teambit/pubsub": "0.0.672",
|
|
62
|
+
"@teambit/ui": "0.0.672",
|
|
63
|
+
"@teambit/variants": "0.0.545",
|
|
62
64
|
"@teambit/component-issues": "0.0.46",
|
|
63
|
-
"@teambit/config": "0.0.
|
|
65
|
+
"@teambit/config": "0.0.465",
|
|
64
66
|
"@teambit/harmony.modules.requireable-component": "0.0.484",
|
|
65
|
-
"@teambit/importer": "0.0.
|
|
67
|
+
"@teambit/importer": "0.0.101",
|
|
66
68
|
"@teambit/workspace.modules.match-pattern": "0.0.489",
|
|
67
|
-
"@teambit/command-bar": "0.0.
|
|
69
|
+
"@teambit/command-bar": "0.0.672",
|
|
68
70
|
"@teambit/design.ui.surfaces.menu.link-item": "0.0.379",
|
|
69
|
-
"@teambit/graph": "0.0.
|
|
70
|
-
"@teambit/react-router": "0.0.
|
|
71
|
-
"@teambit/sidebar": "0.0.
|
|
71
|
+
"@teambit/graph": "0.0.672",
|
|
72
|
+
"@teambit/react-router": "0.0.672",
|
|
73
|
+
"@teambit/sidebar": "0.0.672",
|
|
72
74
|
"@teambit/ui-foundation.ui.main-dropdown": "0.0.486",
|
|
73
75
|
"@teambit/ui-foundation.ui.menu": "0.0.486",
|
|
74
76
|
"@teambit/ui-foundation.ui.react-router.slot-router": "0.0.488",
|
|
75
|
-
"@teambit/ui-foundation.ui.tree.drawer": "0.0.
|
|
77
|
+
"@teambit/ui-foundation.ui.tree.drawer": "0.0.495",
|
|
76
78
|
"@teambit/toolbox.time.time-format": "0.0.483",
|
|
77
79
|
"@teambit/ui-foundation.ui.hooks.use-data-query": "0.0.487",
|
|
78
|
-
"@teambit/component-descriptor": "0.0.
|
|
79
|
-
"@teambit/deprecation": "0.0.
|
|
80
|
+
"@teambit/component-descriptor": "0.0.13",
|
|
81
|
+
"@teambit/deprecation": "0.0.672",
|
|
80
82
|
"@teambit/ui-foundation.ui.constants.z-indexes": "0.0.487",
|
|
81
83
|
"@teambit/ui-foundation.ui.buttons.collapser": "0.0.193",
|
|
82
84
|
"@teambit/ui-foundation.ui.corner": "0.0.494",
|
|
@@ -86,7 +88,7 @@
|
|
|
86
88
|
"@teambit/design.ui.styles.muted-italic": "0.0.35",
|
|
87
89
|
"@teambit/design.ui.tree": "0.0.5",
|
|
88
90
|
"@teambit/ui-foundation.ui.full-loader": "0.0.486",
|
|
89
|
-
"@teambit/ui-foundation.ui.side-bar": "0.0.
|
|
91
|
+
"@teambit/ui-foundation.ui.side-bar": "0.0.510",
|
|
90
92
|
"@teambit/explorer.ui.gallery.component-grid": "0.0.486",
|
|
91
93
|
"@teambit/workspace.ui.empty-workspace": "0.0.489",
|
|
92
94
|
"@teambit/workspace.ui.workspace-component-card": "0.0.495"
|
|
@@ -109,7 +111,7 @@
|
|
|
109
111
|
},
|
|
110
112
|
"peerDependencies": {
|
|
111
113
|
"@apollo/client": "^3.0.0",
|
|
112
|
-
"@teambit/legacy": "1.0.
|
|
114
|
+
"@teambit/legacy": "1.0.231",
|
|
113
115
|
"react-dom": "^16.8.0 || ^17.0.0",
|
|
114
116
|
"react": "^16.8.0 || ^17.0.0"
|
|
115
117
|
},
|
|
@@ -137,7 +139,7 @@
|
|
|
137
139
|
"react": "-"
|
|
138
140
|
},
|
|
139
141
|
"peerDependencies": {
|
|
140
|
-
"@teambit/legacy": "1.0.
|
|
142
|
+
"@teambit/legacy": "1.0.231",
|
|
141
143
|
"react-dom": "^16.8.0 || ^17.0.0",
|
|
142
144
|
"react": "^16.8.0 || ^17.0.0"
|
|
143
145
|
}
|
|
File without changes
|
|
@@ -6,3 +6,36 @@
|
|
|
6
6
|
.collapseIcon {
|
|
7
7
|
width: 16px;
|
|
8
8
|
}
|
|
9
|
+
|
|
10
|
+
.deprecateFilter {
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: row;
|
|
13
|
+
font-size: 14px;
|
|
14
|
+
justify-content: space-between;
|
|
15
|
+
padding: 8px;
|
|
16
|
+
margin: 4px 8px;
|
|
17
|
+
|
|
18
|
+
.filterIcon {
|
|
19
|
+
line-height: 16px;
|
|
20
|
+
display: flex;
|
|
21
|
+
|
|
22
|
+
.filterIconLabel {
|
|
23
|
+
margin: 0px 8px;
|
|
24
|
+
font-size: 12px;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.filterWidgetIcon {
|
|
30
|
+
margin-right: 12px;
|
|
31
|
+
padding: 4px;
|
|
32
|
+
|
|
33
|
+
&:hover {
|
|
34
|
+
background: white;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
&.open {
|
|
38
|
+
color: var(--bit-accent-color, #6c5ce7);
|
|
39
|
+
background-color: var(--bit-bg-heavy, #f6f6f6);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -8,18 +8,32 @@ import {
|
|
|
8
8
|
NamespaceTreeNode,
|
|
9
9
|
ScopePayload,
|
|
10
10
|
} from '@teambit/ui-foundation.ui.side-bar';
|
|
11
|
+
import { Icon } from '@teambit/evangelist.elements.icon';
|
|
11
12
|
import { TreeNodeProps } from '@teambit/design.ui.tree';
|
|
12
13
|
import React, { useCallback, useContext, useState, createContext } from 'react';
|
|
13
14
|
import classNames from 'classnames';
|
|
14
15
|
import { ComponentTreeSlot } from '@teambit/component-tree';
|
|
15
16
|
import { mutedItalic } from '@teambit/design.ui.styles.muted-italic';
|
|
16
17
|
import { ellipsis } from '@teambit/design.ui.styles.ellipsis';
|
|
18
|
+
import { Toggle } from '@teambit/design.ui.input.toggle';
|
|
17
19
|
import { WorkspaceContext } from '../workspace/workspace-context';
|
|
18
20
|
import styles from './workspace-components-drawer.module.scss';
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
type WorkspaceTreeContextType = {
|
|
23
|
+
collapsed: boolean;
|
|
24
|
+
setCollapsed: (x: boolean) => void;
|
|
25
|
+
filterOpen: boolean;
|
|
26
|
+
setFilterOpen: (open: boolean) => void;
|
|
27
|
+
activeFilters: string[];
|
|
28
|
+
setActiveFilter: (filterId: string) => void;
|
|
29
|
+
};
|
|
30
|
+
const WorkspaceTreeContext = createContext<WorkspaceTreeContextType>({
|
|
21
31
|
collapsed: true,
|
|
22
32
|
setCollapsed: () => {},
|
|
33
|
+
activeFilters: [],
|
|
34
|
+
setActiveFilter: () => {},
|
|
35
|
+
filterOpen: false,
|
|
36
|
+
setFilterOpen: () => {},
|
|
23
37
|
});
|
|
24
38
|
|
|
25
39
|
export class WorkspaceComponentsDrawer implements DrawerType {
|
|
@@ -28,19 +42,45 @@ export class WorkspaceComponentsDrawer implements DrawerType {
|
|
|
28
42
|
id = 'workspace-components';
|
|
29
43
|
name = 'COMPONENTS';
|
|
30
44
|
|
|
31
|
-
|
|
45
|
+
widgets = [<FilterWidget key={'filter-widget'} />, <TreeToggleWidget key={'tree-toggle-widget'} />];
|
|
32
46
|
|
|
33
47
|
Context = ({ children }) => {
|
|
34
48
|
const [collapsed, setCollapsed] = useState(true);
|
|
49
|
+
const [activeFilters, setActiveFilters] = useState<string[]>([]);
|
|
50
|
+
const [filterOpen, setFilterOpen] = useState<boolean>(false);
|
|
51
|
+
|
|
52
|
+
const handleActiveFilterToggle = (filterId: string) => {
|
|
53
|
+
const isFilterActive = activeFilters.includes(filterId);
|
|
54
|
+
if (isFilterActive) {
|
|
55
|
+
setActiveFilters((list) => list.filter((id) => id !== filterId));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
setActiveFilters((list) => list.concat(filterId));
|
|
59
|
+
};
|
|
60
|
+
|
|
35
61
|
return (
|
|
36
|
-
<WorkspaceTreeContext.Provider
|
|
62
|
+
<WorkspaceTreeContext.Provider
|
|
63
|
+
value={{
|
|
64
|
+
collapsed,
|
|
65
|
+
setCollapsed,
|
|
66
|
+
activeFilters,
|
|
67
|
+
setActiveFilter: handleActiveFilterToggle,
|
|
68
|
+
filterOpen,
|
|
69
|
+
setFilterOpen,
|
|
70
|
+
}}
|
|
71
|
+
>
|
|
72
|
+
{children}
|
|
73
|
+
</WorkspaceTreeContext.Provider>
|
|
37
74
|
);
|
|
38
75
|
};
|
|
39
76
|
|
|
77
|
+
Filters = [<DeprecateFilter key={'deprecate-filter'} />];
|
|
78
|
+
|
|
40
79
|
render = () => {
|
|
41
80
|
const workspace = useContext(WorkspaceContext);
|
|
42
|
-
const { collapsed } = useContext(WorkspaceTreeContext);
|
|
81
|
+
const { collapsed, activeFilters } = useContext(WorkspaceTreeContext);
|
|
43
82
|
const { treeNodeSlot } = this;
|
|
83
|
+
const showDeprecatedComponents = activeFilters.find((activeFilter) => activeFilter === 'deprecate');
|
|
44
84
|
|
|
45
85
|
const TreeNodeRenderer = useCallback(
|
|
46
86
|
function TreeNode(props: TreeNodeProps<PayloadType>) {
|
|
@@ -56,18 +96,53 @@ export class WorkspaceComponentsDrawer implements DrawerType {
|
|
|
56
96
|
);
|
|
57
97
|
|
|
58
98
|
if (!workspace) return <FullLoader />;
|
|
59
|
-
|
|
99
|
+
|
|
100
|
+
const components = showDeprecatedComponents
|
|
101
|
+
? workspace.components
|
|
102
|
+
: workspace.components.filter((component) => !component.deprecation?.isDeprecate);
|
|
103
|
+
|
|
104
|
+
if (components.length === 0) {
|
|
60
105
|
return <span className={classNames(mutedItalic, ellipsis, styles.emptyWorkspace)}>Workspace is empty</span>;
|
|
61
106
|
}
|
|
62
107
|
|
|
63
|
-
return <ComponentTree components={
|
|
108
|
+
return <ComponentTree components={components} isCollapsed={collapsed} TreeNode={TreeNodeRenderer} />;
|
|
64
109
|
};
|
|
65
110
|
}
|
|
66
111
|
|
|
67
|
-
function
|
|
112
|
+
function TreeToggleWidget() {
|
|
68
113
|
const { collapsed, setCollapsed } = useContext(WorkspaceTreeContext);
|
|
69
114
|
const icon = collapsed
|
|
70
115
|
? 'https://static.bit.dev/bit-icons/expand.svg'
|
|
71
116
|
: 'https://static.bit.dev/bit-icons/collapse.svg';
|
|
72
117
|
return <img src={icon} className={styles.collapseIcon} onClick={() => setCollapsed(!collapsed)} />;
|
|
73
118
|
}
|
|
119
|
+
|
|
120
|
+
function FilterWidget() {
|
|
121
|
+
const { filterOpen, setFilterOpen } = useContext(WorkspaceTreeContext);
|
|
122
|
+
return (
|
|
123
|
+
<Icon
|
|
124
|
+
className={classNames(styles.filterWidgetIcon, filterOpen && styles.open)}
|
|
125
|
+
of="Ripple_filters"
|
|
126
|
+
onClick={() => setFilterOpen(!filterOpen)}
|
|
127
|
+
/>
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function DeprecateFilter() {
|
|
132
|
+
const { activeFilters, setActiveFilter, filterOpen } = useContext(WorkspaceTreeContext);
|
|
133
|
+
const isActive = activeFilters.includes('deprecate');
|
|
134
|
+
|
|
135
|
+
if (!filterOpen) return null;
|
|
136
|
+
|
|
137
|
+
return (
|
|
138
|
+
<div className={classNames(styles.deprecateFilter, isActive && styles.active)}>
|
|
139
|
+
<div className={styles.filterIcon}>
|
|
140
|
+
<Icon of="note-deprecated" />
|
|
141
|
+
<span className={styles.filterIconLabel}>Deprecated</span>
|
|
142
|
+
</div>
|
|
143
|
+
<div>
|
|
144
|
+
<Toggle checked={isActive} onInputChanged={() => setActiveFilter('deprecate')} />
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
);
|
|
148
|
+
}
|
|
Binary file
|