@teambit/workspace 1.0.868 → 1.0.869
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/{preview-1768760493634.js → preview-1768842065064.js} +2 -2
- package/dist/ui/workspace/workspace-overview/index.d.ts +1 -0
- package/dist/ui/workspace/workspace-overview/index.js +19 -0
- package/dist/ui/workspace/workspace-overview/index.js.map +1 -1
- package/dist/ui/workspace/workspace-overview/namespace-sort.js +3 -0
- package/dist/ui/workspace/workspace-overview/namespace-sort.js.map +1 -1
- package/dist/ui/workspace/workspace-overview/use-query-param-with-default.d.ts +6 -0
- package/dist/ui/workspace/workspace-overview/use-query-param-with-default.js +102 -0
- package/dist/ui/workspace/workspace-overview/use-query-param-with-default.js.map +1 -0
- package/dist/ui/workspace/workspace-overview/use-workspace-aggregation.d.ts +2 -1
- package/dist/ui/workspace/workspace-overview/use-workspace-aggregation.js +1 -3
- package/dist/ui/workspace/workspace-overview/use-workspace-aggregation.js.map +1 -1
- package/dist/ui/workspace/workspace-overview/workspace-filter-panel.d.ts +6 -1
- package/dist/ui/workspace/workspace-overview/workspace-filter-panel.js +13 -19
- package/dist/ui/workspace/workspace-overview/workspace-filter-panel.js.map +1 -1
- package/dist/ui/workspace/workspace-overview/workspace-overview.js +21 -11
- package/dist/ui/workspace/workspace-overview/workspace-overview.js.map +1 -1
- package/dist/ui/workspace/workspace-overview/workspace-overview.module.scss +5 -3
- package/package.json +19 -19
- package/ui/workspace/workspace-overview/index.ts +1 -0
- package/ui/workspace/workspace-overview/namespace-sort.ts +3 -0
- package/ui/workspace/workspace-overview/use-query-param-with-default.ts +115 -0
- package/ui/workspace/workspace-overview/use-workspace-aggregation.ts +6 -5
- package/ui/workspace/workspace-overview/workspace-filter-panel.tsx +22 -27
- package/ui/workspace/workspace-overview/workspace-overview.module.scss +5 -3
- package/ui/workspace/workspace-overview/workspace-overview.tsx +26 -6
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.workspace_workspace@1.0.
|
|
2
|
-
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.workspace_workspace@1.0.
|
|
1
|
+
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.workspace_workspace@1.0.869/dist/workspace.composition.js';
|
|
2
|
+
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.workspace_workspace@1.0.869/dist/workspace.docs.mdx';
|
|
3
3
|
|
|
4
4
|
export const compositions = [compositions_0];
|
|
5
5
|
export const overview = [overview_0];
|
|
@@ -9,6 +9,18 @@ Object.defineProperty(exports, "WorkspaceOverview", {
|
|
|
9
9
|
return _workspaceOverview().WorkspaceOverview;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
+
Object.defineProperty(exports, "useListParamWithDefault", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _useQueryParamWithDefault().useListParamWithDefault;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "useQueryParamWithDefault", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _useQueryParamWithDefault().useQueryParamWithDefault;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
12
24
|
function _workspaceOverview() {
|
|
13
25
|
const data = require("./workspace-overview");
|
|
14
26
|
_workspaceOverview = function () {
|
|
@@ -16,5 +28,12 @@ function _workspaceOverview() {
|
|
|
16
28
|
};
|
|
17
29
|
return data;
|
|
18
30
|
}
|
|
31
|
+
function _useQueryParamWithDefault() {
|
|
32
|
+
const data = require("./use-query-param-with-default");
|
|
33
|
+
_useQueryParamWithDefault = function () {
|
|
34
|
+
return data;
|
|
35
|
+
};
|
|
36
|
+
return data;
|
|
37
|
+
}
|
|
19
38
|
|
|
20
39
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_workspaceOverview","data","require"],"sources":["index.ts"],"sourcesContent":["export { WorkspaceOverview } from './workspace-overview';\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_workspaceOverview","data","require","_useQueryParamWithDefault"],"sources":["index.ts"],"sourcesContent":["export { WorkspaceOverview } from './workspace-overview';\nexport { useQueryParamWithDefault, useListParamWithDefault } from './use-query-param-with-default';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAAA,mBAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,kBAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,0BAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,yBAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA","ignoreList":[]}
|
|
@@ -17,6 +17,9 @@ function getRootNamespace(ns) {
|
|
|
17
17
|
}
|
|
18
18
|
function namespacePriority(ns) {
|
|
19
19
|
const root = getRootNamespace(ns);
|
|
20
|
+
|
|
21
|
+
// internal namespaces (starting with _) go last
|
|
22
|
+
if (root.startsWith('_')) return 4;
|
|
20
23
|
if (PRIORITY_HIGH.includes(root)) return 0;
|
|
21
24
|
if (PRIORITY_MED.includes(root)) return 1;
|
|
22
25
|
if (PRIORITY_LOW.includes(root)) return 3;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PRIORITY_HIGH","exports","PRIORITY_MED","PRIORITY_LOW","getRootNamespace","ns","split","namespacePriority","root","includes","sortNamespacesAdvanced","list","sort","a","b","pa","pb","localeCompare","sortItemsByNamespace","items","na","component","id","namespace","nb","name"],"sources":["namespace-sort.ts"],"sourcesContent":["import type { WorkspaceItem } from './workspace-overview.types';\n\nexport const PRIORITY_HIGH = ['ui', 'pages'] as string[];\nexport const PRIORITY_MED = ['design'] as string[];\nexport const PRIORITY_LOW = ['entities', 'provider', 'hooks', 'icons'] as string[];\n\nexport function getRootNamespace(ns: string): string {\n if (!ns) return '';\n return ns.split('/')[0]!;\n}\n\nexport function namespacePriority(ns: string): number {\n const root = getRootNamespace(ns);\n\n if (PRIORITY_HIGH.includes(root)) return 0;\n if (PRIORITY_MED.includes(root)) return 1;\n if (PRIORITY_LOW.includes(root)) return 3;\n return 2;\n}\n\nexport function sortNamespacesAdvanced(list: string[]): string[] {\n return [...list].sort((a, b) => {\n const pa = namespacePriority(a);\n const pb = namespacePriority(b);\n if (pa !== pb) return pa - pb;\n return a.localeCompare(b);\n });\n}\n\nexport function sortItemsByNamespace(items: WorkspaceItem[]): WorkspaceItem[] {\n return [...items].sort((a, b) => {\n const na = a.component.id.namespace || '/';\n const nb = b.component.id.namespace || '/';\n\n const pa = namespacePriority(na);\n const pb = namespacePriority(nb);\n if (pa !== pb) return pa - pb;\n\n return a.component.id.name.localeCompare(b.component.id.name);\n });\n}\n"],"mappings":";;;;;;;;;;AAEO,MAAMA,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAG,CAAC,IAAI,EAAE,OAAO,CAAa;AACjD,MAAME,YAAY,GAAAD,OAAA,CAAAC,YAAA,GAAG,CAAC,QAAQ,CAAa;AAC3C,MAAMC,YAAY,GAAAF,OAAA,CAAAE,YAAA,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAa;AAE3E,SAASC,gBAAgBA,CAACC,EAAU,EAAU;EACnD,IAAI,CAACA,EAAE,EAAE,OAAO,EAAE;EAClB,OAAOA,EAAE,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzB;AAEO,SAASC,iBAAiBA,CAACF,EAAU,EAAU;EACpD,MAAMG,IAAI,GAAGJ,gBAAgB,CAACC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"names":["PRIORITY_HIGH","exports","PRIORITY_MED","PRIORITY_LOW","getRootNamespace","ns","split","namespacePriority","root","startsWith","includes","sortNamespacesAdvanced","list","sort","a","b","pa","pb","localeCompare","sortItemsByNamespace","items","na","component","id","namespace","nb","name"],"sources":["namespace-sort.ts"],"sourcesContent":["import type { WorkspaceItem } from './workspace-overview.types';\n\nexport const PRIORITY_HIGH = ['ui', 'pages'] as string[];\nexport const PRIORITY_MED = ['design'] as string[];\nexport const PRIORITY_LOW = ['entities', 'provider', 'hooks', 'icons'] as string[];\n\nexport function getRootNamespace(ns: string): string {\n if (!ns) return '';\n return ns.split('/')[0]!;\n}\n\nexport function namespacePriority(ns: string): number {\n const root = getRootNamespace(ns);\n\n // internal namespaces (starting with _) go last\n if (root.startsWith('_')) return 4;\n\n if (PRIORITY_HIGH.includes(root)) return 0;\n if (PRIORITY_MED.includes(root)) return 1;\n if (PRIORITY_LOW.includes(root)) return 3;\n return 2;\n}\n\nexport function sortNamespacesAdvanced(list: string[]): string[] {\n return [...list].sort((a, b) => {\n const pa = namespacePriority(a);\n const pb = namespacePriority(b);\n if (pa !== pb) return pa - pb;\n return a.localeCompare(b);\n });\n}\n\nexport function sortItemsByNamespace(items: WorkspaceItem[]): WorkspaceItem[] {\n return [...items].sort((a, b) => {\n const na = a.component.id.namespace || '/';\n const nb = b.component.id.namespace || '/';\n\n const pa = namespacePriority(na);\n const pb = namespacePriority(nb);\n if (pa !== pb) return pa - pb;\n\n return a.component.id.name.localeCompare(b.component.id.name);\n });\n}\n"],"mappings":";;;;;;;;;;AAEO,MAAMA,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAG,CAAC,IAAI,EAAE,OAAO,CAAa;AACjD,MAAME,YAAY,GAAAD,OAAA,CAAAC,YAAA,GAAG,CAAC,QAAQ,CAAa;AAC3C,MAAMC,YAAY,GAAAF,OAAA,CAAAE,YAAA,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAa;AAE3E,SAASC,gBAAgBA,CAACC,EAAU,EAAU;EACnD,IAAI,CAACA,EAAE,EAAE,OAAO,EAAE;EAClB,OAAOA,EAAE,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzB;AAEO,SAASC,iBAAiBA,CAACF,EAAU,EAAU;EACpD,MAAMG,IAAI,GAAGJ,gBAAgB,CAACC,EAAE,CAAC;;EAEjC;EACA,IAAIG,IAAI,CAACC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;EAElC,IAAIT,aAAa,CAACU,QAAQ,CAACF,IAAI,CAAC,EAAE,OAAO,CAAC;EAC1C,IAAIN,YAAY,CAACQ,QAAQ,CAACF,IAAI,CAAC,EAAE,OAAO,CAAC;EACzC,IAAIL,YAAY,CAACO,QAAQ,CAACF,IAAI,CAAC,EAAE,OAAO,CAAC;EACzC,OAAO,CAAC;AACV;AAEO,SAASG,sBAAsBA,CAACC,IAAc,EAAY;EAC/D,OAAO,CAAC,GAAGA,IAAI,CAAC,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;IAC9B,MAAMC,EAAE,GAAGT,iBAAiB,CAACO,CAAC,CAAC;IAC/B,MAAMG,EAAE,GAAGV,iBAAiB,CAACQ,CAAC,CAAC;IAC/B,IAAIC,EAAE,KAAKC,EAAE,EAAE,OAAOD,EAAE,GAAGC,EAAE;IAC7B,OAAOH,CAAC,CAACI,aAAa,CAACH,CAAC,CAAC;EAC3B,CAAC,CAAC;AACJ;AAEO,SAASI,oBAAoBA,CAACC,KAAsB,EAAmB;EAC5E,OAAO,CAAC,GAAGA,KAAK,CAAC,CAACP,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;IAC/B,MAAMM,EAAE,GAAGP,CAAC,CAACQ,SAAS,CAACC,EAAE,CAACC,SAAS,IAAI,GAAG;IAC1C,MAAMC,EAAE,GAAGV,CAAC,CAACO,SAAS,CAACC,EAAE,CAACC,SAAS,IAAI,GAAG;IAE1C,MAAMR,EAAE,GAAGT,iBAAiB,CAACc,EAAE,CAAC;IAChC,MAAMJ,EAAE,GAAGV,iBAAiB,CAACkB,EAAE,CAAC;IAChC,IAAIT,EAAE,KAAKC,EAAE,EAAE,OAAOD,EAAE,GAAGC,EAAE;IAE7B,OAAOH,CAAC,CAACQ,SAAS,CAACC,EAAE,CAACG,IAAI,CAACR,aAAa,CAACH,CAAC,CAACO,SAAS,CAACC,EAAE,CAACG,IAAI,CAAC;EAC/D,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface QueryParamOptions {
|
|
2
|
+
/** persist value to localStorage across sessions. Default: true */
|
|
3
|
+
persist?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function useQueryParamWithDefault<T extends string>(paramName: string, fallback: T, options?: QueryParamOptions): [T, (value: T | null) => void];
|
|
6
|
+
export declare function useListParamWithDefault(paramName: string, options?: QueryParamOptions): [string[], (values: string[]) => void];
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useListParamWithDefault = useListParamWithDefault;
|
|
7
|
+
exports.useQueryParamWithDefault = useQueryParamWithDefault;
|
|
8
|
+
function _react() {
|
|
9
|
+
const data = require("react");
|
|
10
|
+
_react = function () {
|
|
11
|
+
return data;
|
|
12
|
+
};
|
|
13
|
+
return data;
|
|
14
|
+
}
|
|
15
|
+
function _reactRouterDom() {
|
|
16
|
+
const data = require("react-router-dom");
|
|
17
|
+
_reactRouterDom = function () {
|
|
18
|
+
return data;
|
|
19
|
+
};
|
|
20
|
+
return data;
|
|
21
|
+
}
|
|
22
|
+
const STORAGE_KEY_PREFIX = 'workspace-overview:';
|
|
23
|
+
function useQueryParamWithDefault(paramName, fallback, options = {}) {
|
|
24
|
+
const {
|
|
25
|
+
persist = true
|
|
26
|
+
} = options;
|
|
27
|
+
const [searchParams, setSearchParams] = (0, _reactRouterDom().useSearchParams)();
|
|
28
|
+
const storageKey = STORAGE_KEY_PREFIX + paramName;
|
|
29
|
+
const value = (0, _react().useMemo)(() => {
|
|
30
|
+
const urlValue = searchParams.get(paramName);
|
|
31
|
+
if (urlValue) return urlValue;
|
|
32
|
+
if (persist) {
|
|
33
|
+
const stored = safeGetItem(storageKey);
|
|
34
|
+
if (stored) return stored;
|
|
35
|
+
}
|
|
36
|
+
return fallback;
|
|
37
|
+
}, [searchParams, paramName, storageKey, fallback, persist]);
|
|
38
|
+
const setValue = (0, _react().useCallback)(newValue => {
|
|
39
|
+
const newParams = new URLSearchParams(searchParams);
|
|
40
|
+
if (newValue === null) {
|
|
41
|
+
newParams.delete(paramName);
|
|
42
|
+
if (persist) safeRemoveItem(storageKey);
|
|
43
|
+
} else {
|
|
44
|
+
newParams.set(paramName, newValue);
|
|
45
|
+
if (persist) safeSetItem(storageKey, newValue);
|
|
46
|
+
}
|
|
47
|
+
setSearchParams(newParams);
|
|
48
|
+
}, [searchParams, setSearchParams, paramName, storageKey, persist]);
|
|
49
|
+
return [value, setValue];
|
|
50
|
+
}
|
|
51
|
+
function useListParamWithDefault(paramName, options = {}) {
|
|
52
|
+
const {
|
|
53
|
+
persist = false
|
|
54
|
+
} = options;
|
|
55
|
+
const [searchParams, setSearchParams] = (0, _reactRouterDom().useSearchParams)();
|
|
56
|
+
const storageKey = STORAGE_KEY_PREFIX + paramName;
|
|
57
|
+
const values = (0, _react().useMemo)(() => {
|
|
58
|
+
const urlValue = searchParams.get(paramName);
|
|
59
|
+
if (urlValue) return urlValue.split(',').filter(Boolean);
|
|
60
|
+
if (persist) {
|
|
61
|
+
const stored = safeGetItem(storageKey);
|
|
62
|
+
if (stored) return stored.split(',').filter(Boolean);
|
|
63
|
+
}
|
|
64
|
+
return [];
|
|
65
|
+
}, [searchParams, paramName, storageKey, persist]);
|
|
66
|
+
const setValues = (0, _react().useCallback)(newValues => {
|
|
67
|
+
const newParams = new URLSearchParams(searchParams);
|
|
68
|
+
const joined = newValues.filter(Boolean).join(',');
|
|
69
|
+
if (joined) {
|
|
70
|
+
newParams.set(paramName, joined);
|
|
71
|
+
if (persist) safeSetItem(storageKey, joined);
|
|
72
|
+
} else {
|
|
73
|
+
newParams.delete(paramName);
|
|
74
|
+
if (persist) safeRemoveItem(storageKey);
|
|
75
|
+
}
|
|
76
|
+
setSearchParams(newParams);
|
|
77
|
+
}, [searchParams, setSearchParams, paramName, storageKey, persist]);
|
|
78
|
+
return [values, setValues];
|
|
79
|
+
}
|
|
80
|
+
function safeGetItem(key) {
|
|
81
|
+
try {
|
|
82
|
+
return localStorage.getItem(key);
|
|
83
|
+
} catch {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function safeSetItem(key, value) {
|
|
88
|
+
try {
|
|
89
|
+
localStorage.setItem(key, value);
|
|
90
|
+
} catch {
|
|
91
|
+
// ignore storage errors
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function safeRemoveItem(key) {
|
|
95
|
+
try {
|
|
96
|
+
localStorage.removeItem(key);
|
|
97
|
+
} catch {
|
|
98
|
+
// ignore storage errors
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
//# sourceMappingURL=use-query-param-with-default.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","data","require","_reactRouterDom","STORAGE_KEY_PREFIX","useQueryParamWithDefault","paramName","fallback","options","persist","searchParams","setSearchParams","useSearchParams","storageKey","value","useMemo","urlValue","get","stored","safeGetItem","setValue","useCallback","newValue","newParams","URLSearchParams","delete","safeRemoveItem","set","safeSetItem","useListParamWithDefault","values","split","filter","Boolean","setValues","newValues","joined","join","key","localStorage","getItem","setItem","removeItem"],"sources":["use-query-param-with-default.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\nimport { useSearchParams } from 'react-router-dom';\n\nconst STORAGE_KEY_PREFIX = 'workspace-overview:';\n\nexport interface QueryParamOptions {\n /** persist value to localStorage across sessions. Default: true */\n persist?: boolean;\n}\n\nexport function useQueryParamWithDefault<T extends string>(\n paramName: string,\n fallback: T,\n options: QueryParamOptions = {}\n): [T, (value: T | null) => void] {\n const { persist = true } = options;\n const [searchParams, setSearchParams] = useSearchParams();\n const storageKey = STORAGE_KEY_PREFIX + paramName;\n\n const value = useMemo((): T => {\n const urlValue = searchParams.get(paramName);\n if (urlValue) return urlValue as T;\n\n if (persist) {\n const stored = safeGetItem(storageKey);\n if (stored) return stored as T;\n }\n\n return fallback;\n }, [searchParams, paramName, storageKey, fallback, persist]);\n\n const setValue = useCallback(\n (newValue: T | null) => {\n const newParams = new URLSearchParams(searchParams);\n\n if (newValue === null) {\n newParams.delete(paramName);\n if (persist) safeRemoveItem(storageKey);\n } else {\n newParams.set(paramName, newValue);\n if (persist) safeSetItem(storageKey, newValue);\n }\n\n setSearchParams(newParams);\n },\n [searchParams, setSearchParams, paramName, storageKey, persist]\n );\n\n return [value, setValue];\n}\n\nexport function useListParamWithDefault(\n paramName: string,\n options: QueryParamOptions = {}\n): [string[], (values: string[]) => void] {\n const { persist = false } = options;\n const [searchParams, setSearchParams] = useSearchParams();\n const storageKey = STORAGE_KEY_PREFIX + paramName;\n\n const values = useMemo((): string[] => {\n const urlValue = searchParams.get(paramName);\n if (urlValue) return urlValue.split(',').filter(Boolean);\n\n if (persist) {\n const stored = safeGetItem(storageKey);\n if (stored) return stored.split(',').filter(Boolean);\n }\n\n return [];\n }, [searchParams, paramName, storageKey, persist]);\n\n const setValues = useCallback(\n (newValues: string[]) => {\n const newParams = new URLSearchParams(searchParams);\n const joined = newValues.filter(Boolean).join(',');\n\n if (joined) {\n newParams.set(paramName, joined);\n if (persist) safeSetItem(storageKey, joined);\n } else {\n newParams.delete(paramName);\n if (persist) safeRemoveItem(storageKey);\n }\n\n setSearchParams(newParams);\n },\n [searchParams, setSearchParams, paramName, storageKey, persist]\n );\n\n return [values, setValues];\n}\n\nfunction safeGetItem(key: string): string | null {\n try {\n return localStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction safeSetItem(key: string, value: string): void {\n try {\n localStorage.setItem(key, value);\n } catch {\n // ignore storage errors\n }\n}\n\nfunction safeRemoveItem(key: string): void {\n try {\n localStorage.removeItem(key);\n } catch {\n // ignore storage errors\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
+
import { type ActiveFilters } from './filter-utils';
|
|
1
2
|
import type { WorkspaceItem, AggregationType, AggregationResult } from './workspace-overview.types';
|
|
2
|
-
export declare function useWorkspaceAggregation(items: WorkspaceItem[], aggregation: AggregationType): AggregationResult;
|
|
3
|
+
export declare function useWorkspaceAggregation(items: WorkspaceItem[], aggregation: AggregationType, filters: ActiveFilters): AggregationResult;
|
|
@@ -25,9 +25,7 @@ function _filterUtils() {
|
|
|
25
25
|
};
|
|
26
26
|
return data;
|
|
27
27
|
}
|
|
28
|
-
function useWorkspaceAggregation(items, aggregation) {
|
|
29
|
-
const search = new URLSearchParams(window.location.search);
|
|
30
|
-
const filters = (0, _filterUtils().parseActiveFilters)(search);
|
|
28
|
+
function useWorkspaceAggregation(items, aggregation, filters) {
|
|
31
29
|
const filtered = (0, _react().useMemo)(() => (0, _filterUtils().filterItems)(items, filters), [items, filters]);
|
|
32
30
|
if (aggregation === 'none') {
|
|
33
31
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","data","require","_namespaceSort","_filterUtils","useWorkspaceAggregation","items","aggregation","
|
|
1
|
+
{"version":3,"names":["_react","data","require","_namespaceSort","_filterUtils","useWorkspaceAggregation","items","aggregation","filters","filtered","useMemo","filterItems","groups","name","displayName","sortItemsByNamespace","groupType","availableAggregations","filteredCount","length","map","Map","item","ns","component","id","namespace","has","set","get","push","sortedKeys","sortNamespacesAdvanced","keys","scope","sortedScopes","sort","sc"],"sources":["use-workspace-aggregation.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { sortNamespacesAdvanced, sortItemsByNamespace } from './namespace-sort';\nimport { filterItems, type ActiveFilters } from './filter-utils';\nimport type { WorkspaceItem, AggregationType, AggregationGroup, AggregationResult } from './workspace-overview.types';\n\nexport function useWorkspaceAggregation(\n items: WorkspaceItem[],\n aggregation: AggregationType,\n filters: ActiveFilters\n): AggregationResult {\n const filtered = useMemo(() => filterItems(items, filters), [items, filters]);\n\n if (aggregation === 'none') {\n return {\n groups: [\n {\n name: 'all',\n displayName: '',\n items: sortItemsByNamespace(filtered),\n },\n ],\n groupType: 'none',\n availableAggregations: ['namespaces', 'scopes', 'none'],\n filteredCount: filtered.length,\n };\n }\n\n if (aggregation === 'namespaces') {\n const map = new Map<string, WorkspaceItem[]>();\n for (const item of filtered) {\n const ns = item.component.id.namespace || '/';\n if (!map.has(ns)) map.set(ns, []);\n map.get(ns)!.push(item);\n }\n\n const sortedKeys = sortNamespacesAdvanced([...map.keys()]);\n\n const groups: AggregationGroup[] = sortedKeys.map((ns) => ({\n name: ns,\n displayName: ns,\n items: sortItemsByNamespace(map.get(ns)!),\n }));\n\n return {\n groups,\n groupType: 'namespaces',\n availableAggregations: ['namespaces', 'scopes', 'none'],\n filteredCount: filtered.length,\n };\n }\n\n const map = new Map<string, WorkspaceItem[]>();\n for (const item of filtered) {\n const scope = item.component.id.scope;\n if (!map.has(scope)) map.set(scope, []);\n map.get(scope)!.push(item);\n }\n\n const sortedScopes = [...map.keys()].sort();\n\n const groups: AggregationGroup[] = sortedScopes.map((sc) => ({\n name: sc,\n displayName: sc,\n items: sortItemsByNamespace(map.get(sc)!),\n }));\n\n return {\n groups,\n groupType: 'scopes',\n availableAggregations: ['namespaces', 'scopes', 'none'],\n filteredCount: filtered.length,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import type { WorkspaceItem, AggregationType } from './workspace-overview.types';
|
|
2
2
|
export interface WorkspaceFilterPanelProps {
|
|
3
3
|
aggregation: AggregationType;
|
|
4
|
+
onAggregationChange: (agg: AggregationType) => void;
|
|
4
5
|
availableAggregations: AggregationType[];
|
|
5
6
|
items: WorkspaceItem[];
|
|
7
|
+
activeNamespaces: string[];
|
|
8
|
+
onNamespacesChange: (namespaces: string[]) => void;
|
|
9
|
+
activeScopes: string[];
|
|
10
|
+
onScopesChange: (scopes: string[]) => void;
|
|
6
11
|
}
|
|
7
|
-
export declare function WorkspaceFilterPanel({ aggregation, availableAggregations, items }: WorkspaceFilterPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export declare function WorkspaceFilterPanel({ aggregation, onAggregationChange, availableAggregations, items, activeNamespaces, onNamespacesChange, activeScopes, onScopesChange, }: WorkspaceFilterPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -11,13 +11,6 @@ function _react() {
|
|
|
11
11
|
};
|
|
12
12
|
return data;
|
|
13
13
|
}
|
|
14
|
-
function _reactRouterDom() {
|
|
15
|
-
const data = require("react-router-dom");
|
|
16
|
-
_reactRouterDom = function () {
|
|
17
|
-
return data;
|
|
18
|
-
};
|
|
19
|
-
return data;
|
|
20
|
-
}
|
|
21
14
|
function _designInputs() {
|
|
22
15
|
const data = require("@teambit/design.inputs.toggle-button");
|
|
23
16
|
_designInputs = function () {
|
|
@@ -48,37 +41,38 @@ const LABELS = {
|
|
|
48
41
|
};
|
|
49
42
|
function WorkspaceFilterPanel({
|
|
50
43
|
aggregation,
|
|
44
|
+
onAggregationChange,
|
|
51
45
|
availableAggregations,
|
|
52
|
-
items
|
|
46
|
+
items,
|
|
47
|
+
activeNamespaces,
|
|
48
|
+
onNamespacesChange,
|
|
49
|
+
activeScopes,
|
|
50
|
+
onScopesChange
|
|
53
51
|
}) {
|
|
54
|
-
const [searchParams, setSearchParams] = (0, _reactRouterDom().useSearchParams)();
|
|
55
52
|
const namespaceOptions = (0, _react().useMemo)(() => [...new Set(items.map(i => i.component.id.namespace || '/'))].map(v => ({
|
|
56
53
|
value: v
|
|
57
54
|
})), [items]);
|
|
58
55
|
const scopeOptions = (0, _react().useMemo)(() => [...new Set(items.map(i => i.component.id.scope))].map(v => ({
|
|
59
56
|
value: v
|
|
60
57
|
})), [items]);
|
|
61
|
-
const
|
|
58
|
+
const activeNsOptions = activeNamespaces.map(v => ({
|
|
62
59
|
value: v
|
|
63
60
|
}));
|
|
64
|
-
const
|
|
61
|
+
const activeScopeOptions = activeScopes.map(v => ({
|
|
65
62
|
value: v
|
|
66
63
|
}));
|
|
67
64
|
const applyNs = opts => {
|
|
68
65
|
const list = opts.map(o => o.value).filter(v => typeof v === 'string');
|
|
69
|
-
|
|
70
|
-
setSearchParams(searchParams);
|
|
66
|
+
onNamespacesChange(list);
|
|
71
67
|
};
|
|
72
68
|
const applyScopes = opts => {
|
|
73
69
|
const list = opts.map(o => o.value).filter(v => typeof v === 'string');
|
|
74
|
-
|
|
75
|
-
setSearchParams(searchParams);
|
|
70
|
+
onScopesChange(list);
|
|
76
71
|
};
|
|
77
72
|
const currentIndex = Math.max(0, availableAggregations.findIndex(a => a === aggregation));
|
|
78
73
|
const applyAgg = i => {
|
|
79
74
|
const agg = availableAggregations[i];
|
|
80
|
-
|
|
81
|
-
setSearchParams(searchParams);
|
|
75
|
+
onAggregationChange(agg);
|
|
82
76
|
};
|
|
83
77
|
return /*#__PURE__*/_react().default.createElement("div", {
|
|
84
78
|
className: _workspaceOverviewModule().default.filterPanel
|
|
@@ -88,14 +82,14 @@ function WorkspaceFilterPanel({
|
|
|
88
82
|
id: "namespaces",
|
|
89
83
|
placeholder: "Namespaces",
|
|
90
84
|
options: namespaceOptions,
|
|
91
|
-
activeOptions:
|
|
85
|
+
activeOptions: activeNsOptions,
|
|
92
86
|
onChange: applyNs,
|
|
93
87
|
isSearchable: true
|
|
94
88
|
}), /*#__PURE__*/_react().default.createElement(_componentFilters().BaseFilter, {
|
|
95
89
|
id: "scopes",
|
|
96
90
|
placeholder: "Scopes",
|
|
97
91
|
options: scopeOptions,
|
|
98
|
-
activeOptions:
|
|
92
|
+
activeOptions: activeScopeOptions,
|
|
99
93
|
onChange: applyScopes,
|
|
100
94
|
isSearchable: true
|
|
101
95
|
})), /*#__PURE__*/_react().default.createElement("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","data","_interopRequireWildcard","require","
|
|
1
|
+
{"version":3,"names":["_react","data","_interopRequireWildcard","require","_designInputs","_componentFilters","_workspaceOverviewModule","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","LABELS","namespaces","scopes","none","WorkspaceFilterPanel","aggregation","onAggregationChange","availableAggregations","items","activeNamespaces","onNamespacesChange","activeScopes","onScopesChange","namespaceOptions","useMemo","Set","map","component","id","namespace","v","value","scopeOptions","scope","activeNsOptions","activeScopeOptions","applyNs","opts","list","filter","applyScopes","currentIndex","Math","max","findIndex","a","applyAgg","agg","createElement","className","styles","filterPanel","leftFilters","BaseFilter","placeholder","options","activeOptions","onChange","isSearchable","rightAggToggle","ToggleButton","defaultIndex","onOptionSelect","idx","element"],"sources":["workspace-filter-panel.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { ToggleButton } from '@teambit/design.inputs.toggle-button';\nimport { BaseFilter } from '@teambit/component.filters.base-filter';\nimport type { WorkspaceItem, AggregationType } from './workspace-overview.types';\nimport styles from './workspace-overview.module.scss';\n\nexport interface WorkspaceFilterPanelProps {\n aggregation: AggregationType;\n onAggregationChange: (agg: AggregationType) => void;\n availableAggregations: AggregationType[];\n items: WorkspaceItem[];\n activeNamespaces: string[];\n onNamespacesChange: (namespaces: string[]) => void;\n activeScopes: string[];\n onScopesChange: (scopes: string[]) => void;\n}\n\nconst LABELS: Record<AggregationType, string> = {\n namespaces: 'Namespaces',\n scopes: 'Scopes',\n none: 'None',\n};\n\nexport function WorkspaceFilterPanel({\n aggregation,\n onAggregationChange,\n availableAggregations,\n items,\n activeNamespaces,\n onNamespacesChange,\n activeScopes,\n onScopesChange,\n}: WorkspaceFilterPanelProps) {\n const namespaceOptions = useMemo(\n () =>\n [...new Set(items.map((i) => i.component.id.namespace || '/'))].map((v) => ({\n value: v,\n })),\n [items]\n );\n\n const scopeOptions = useMemo(\n () =>\n [...new Set(items.map((i) => i.component.id.scope))].map((v) => ({\n value: v,\n })),\n [items]\n );\n\n const activeNsOptions = activeNamespaces.map((v) => ({ value: v }));\n const activeScopeOptions = activeScopes.map((v) => ({ value: v }));\n\n const applyNs = (opts) => {\n const list = opts.map((o) => o.value).filter((v): v is string => typeof v === 'string');\n onNamespacesChange(list);\n };\n\n const applyScopes = (opts) => {\n const list = opts.map((o) => o.value).filter((v): v is string => typeof v === 'string');\n onScopesChange(list);\n };\n\n const currentIndex = Math.max(\n 0,\n availableAggregations.findIndex((a) => a === aggregation)\n );\n\n const applyAgg = (i: number) => {\n const agg = availableAggregations[i];\n onAggregationChange(agg);\n };\n\n return (\n <div className={styles.filterPanel}>\n <div className={styles.leftFilters}>\n <BaseFilter\n id=\"namespaces\"\n placeholder=\"Namespaces\"\n options={namespaceOptions}\n activeOptions={activeNsOptions}\n onChange={applyNs}\n isSearchable\n />\n\n <BaseFilter\n id=\"scopes\"\n placeholder=\"Scopes\"\n options={scopeOptions}\n activeOptions={activeScopeOptions}\n onChange={applyScopes}\n isSearchable\n />\n </div>\n\n <div className={styles.rightAggToggle}>\n <ToggleButton\n defaultIndex={currentIndex}\n onOptionSelect={(idx) => applyAgg(idx)}\n options={availableAggregations.map((agg) => ({\n value: agg,\n element: LABELS[agg],\n }))}\n />\n </div>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -68,13 +68,6 @@ function _cloudHooks() {
|
|
|
68
68
|
};
|
|
69
69
|
return data;
|
|
70
70
|
}
|
|
71
|
-
function _reactRouterDom() {
|
|
72
|
-
const data = require("react-router-dom");
|
|
73
|
-
_reactRouterDom = function () {
|
|
74
|
-
return data;
|
|
75
|
-
};
|
|
76
|
-
return data;
|
|
77
|
-
}
|
|
78
71
|
function _workspaceUi2() {
|
|
79
72
|
const data = require("@teambit/workspace.ui.workspace-component-card");
|
|
80
73
|
_workspaceUi2 = function () {
|
|
@@ -117,6 +110,13 @@ function _useWorkspaceAggregation() {
|
|
|
117
110
|
};
|
|
118
111
|
return data;
|
|
119
112
|
}
|
|
113
|
+
function _useQueryParamWithDefault() {
|
|
114
|
+
const data = require("./use-query-param-with-default");
|
|
115
|
+
_useQueryParamWithDefault = function () {
|
|
116
|
+
return data;
|
|
117
|
+
};
|
|
118
|
+
return data;
|
|
119
|
+
}
|
|
120
120
|
function _workspaceFilterPanel() {
|
|
121
121
|
const data = require("./workspace-filter-panel");
|
|
122
122
|
_workspaceFilterPanel = function () {
|
|
@@ -168,14 +168,19 @@ function WorkspaceOverview() {
|
|
|
168
168
|
} || undefined
|
|
169
169
|
};
|
|
170
170
|
}));
|
|
171
|
-
const [
|
|
172
|
-
const
|
|
171
|
+
const [aggregation, setAggregation] = (0, _useQueryParamWithDefault().useQueryParamWithDefault)('aggregation', 'namespaces');
|
|
172
|
+
const [activeNamespaces, setActiveNamespaces] = (0, _react().useState)([]);
|
|
173
|
+
const [activeScopes, setActiveScopes] = (0, _react().useState)([]);
|
|
174
|
+
const filters = (0, _react().useMemo)(() => ({
|
|
175
|
+
namespaces: activeNamespaces,
|
|
176
|
+
scopes: activeScopes
|
|
177
|
+
}), [activeNamespaces, activeScopes]);
|
|
173
178
|
const {
|
|
174
179
|
groups,
|
|
175
180
|
groupType,
|
|
176
181
|
availableAggregations,
|
|
177
182
|
filteredCount
|
|
178
|
-
} = (0, _useWorkspaceAggregation().useWorkspaceAggregation)(items, aggregation);
|
|
183
|
+
} = (0, _useWorkspaceAggregation().useWorkspaceAggregation)(items, aggregation, filters);
|
|
179
184
|
const plugins = useCardPlugins({
|
|
180
185
|
compModelsById,
|
|
181
186
|
showPreview: isMinimal
|
|
@@ -184,8 +189,13 @@ function WorkspaceOverview() {
|
|
|
184
189
|
className: _workspaceOverviewModule().default.container
|
|
185
190
|
}, /*#__PURE__*/_react().default.createElement(_workspaceFilterPanel().WorkspaceFilterPanel, {
|
|
186
191
|
aggregation: aggregation,
|
|
192
|
+
onAggregationChange: setAggregation,
|
|
187
193
|
availableAggregations: availableAggregations,
|
|
188
|
-
items: items
|
|
194
|
+
items: items,
|
|
195
|
+
activeNamespaces: activeNamespaces,
|
|
196
|
+
onNamespacesChange: setActiveNamespaces,
|
|
197
|
+
activeScopes: activeScopes,
|
|
198
|
+
onScopesChange: setActiveScopes
|
|
189
199
|
}), filteredCount === 0 && /*#__PURE__*/_react().default.createElement(_workspaceUi().EmptyWorkspace, {
|
|
190
200
|
name: workspace.name
|
|
191
201
|
}), groups.map(group => /*#__PURE__*/_react().default.createElement("section", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","data","_interopRequireWildcard","require","_explorerUiGallery","_workspaceUi","_previewUi","_designUi","_componentId","_lodash","_interopRequireDefault","_scopes","_cloudHooks","_reactRouterDom","_workspaceUi2","_workspaceUi3","_designUi2","_workspaceContext","_linkPlugin","_useWorkspaceAggregation","_workspaceFilterPanel","_workspaceOverviewModule","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","WorkspaceOverview","workspace","useContext","WorkspaceContext","components","componentDescriptors","length","createElement","EmptyWorkspace","name","isMinimal","useWorkspaceMode","compModelsById","useMemo","Map","map","c","id","toString","uniqueScopes","Set","scope","cloudScopes","useCloudScopes","cloudMap","s","compDescriptorMap","d","items","compact","component","deprecation","isDeprecate","descriptor","cloudScope","ScopeID","isValid","fromString","undefined","componentDescriptor","searchParams","useSearchParams","aggregation","groups","groupType","availableAggregations","filteredCount","useWorkspaceAggregation","plugins","useCardPlugins","showPreview","className","styles","container","WorkspaceFilterPanel","group","key","agg","H3","aggregationTitle","displayName","ComponentGrid","cardGrid","item","WorkspaceComponentCard","shouldShowPreviewState","serverUrlsSignature","React","serversCount","Array","from","values","filter","comp","server","url","join","preview","Preview","shouldShowPreview","compModel","PreviewPlaceholder","previewBottomRight","PreviewBottomRight","env","envComponentId","ComponentID","rightPreviewPlugins","badge","Tooltip","delay","content","src","icon","envIcon","LinkPlugin","size"],"sources":["workspace-overview.tsx"],"sourcesContent":["import React, { useContext, useMemo } from 'react';\nimport { ComponentGrid } from '@teambit/explorer.ui.gallery.component-grid';\nimport { EmptyWorkspace } from '@teambit/workspace.ui.empty-workspace';\nimport { PreviewPlaceholder } from '@teambit/preview.ui.preview-placeholder';\nimport { Tooltip } from '@teambit/design.ui.tooltip';\nimport { ComponentID } from '@teambit/component-id';\nimport type { ComponentModel } from '@teambit/component';\nimport compact from 'lodash.compact';\nimport { ScopeID } from '@teambit/scopes.scope-id';\nimport { useCloudScopes } from '@teambit/cloud.hooks.use-cloud-scopes';\nimport { useSearchParams } from 'react-router-dom';\nimport { WorkspaceComponentCard } from '@teambit/workspace.ui.workspace-component-card';\nimport type { ComponentCardPluginType, PluginProps } from '@teambit/explorer.ui.component-card';\nimport { useWorkspaceMode } from '@teambit/workspace.ui.use-workspace-mode';\nimport { H3 } from '@teambit/design.ui.heading';\nimport { WorkspaceContext } from '../workspace-context';\nimport { LinkPlugin } from './link-plugin';\nimport { useWorkspaceAggregation } from './use-workspace-aggregation';\nimport { WorkspaceFilterPanel } from './workspace-filter-panel';\nimport styles from './workspace-overview.module.scss';\n\nexport function WorkspaceOverview() {\n const workspace = useContext(WorkspaceContext);\n const { components, componentDescriptors } = workspace;\n\n if (!components.length) return <EmptyWorkspace name={workspace.name} />;\n\n const { isMinimal } = useWorkspaceMode();\n const compModelsById = useMemo(() => new Map(components.map((c) => [c.id.toString(), c])), [components]);\n\n const uniqueScopes = [...new Set(components.map((c) => c.id.scope))];\n const { cloudScopes } = useCloudScopes(uniqueScopes);\n const cloudMap = new Map((cloudScopes || []).map((s) => [s.id.toString(), s]));\n\n const compDescriptorMap = new Map(componentDescriptors.map((d) => [d.id.toString(), d]));\n\n const items = compact(\n components.map((component) => {\n if (component.deprecation?.isDeprecate) return null;\n\n const descriptor = compDescriptorMap.get(component.id.toString());\n if (!descriptor) return null;\n\n const cloudScope = cloudMap.get(component.id.scope);\n const scope =\n cloudScope ||\n (ScopeID.isValid(component.id.scope) && { id: ScopeID.fromString(component.id.scope) }) ||\n undefined;\n\n return { component, componentDescriptor: descriptor, scope: (scope && { id: scope.id }) || undefined };\n })\n );\n\n const [searchParams] = useSearchParams();\n const aggregation = (searchParams.get('aggregation') as any) || 'namespaces';\n\n const { groups, groupType, availableAggregations, filteredCount } = useWorkspaceAggregation(items, aggregation);\n\n const plugins = useCardPlugins({ compModelsById, showPreview: isMinimal });\n\n return (\n <div className={styles.container}>\n <WorkspaceFilterPanel aggregation={aggregation} availableAggregations={availableAggregations} items={items} />\n\n {filteredCount === 0 && <EmptyWorkspace name={workspace.name} />}\n\n {groups.map((group) => (\n <section key={group.name} className={styles.agg}>\n {groupType !== 'none' && <H3 className={styles.aggregationTitle}>{group.displayName}</H3>}\n\n <ComponentGrid className={styles.cardGrid}>\n {group.items.map((item) => (\n <WorkspaceComponentCard\n key={item.component.id.toString()}\n component={item.component}\n componentDescriptor={item.componentDescriptor}\n scope={item.scope}\n plugins={plugins}\n shouldShowPreviewState={isMinimal}\n />\n ))}\n </ComponentGrid>\n </section>\n ))}\n </div>\n );\n}\n\nexport function useCardPlugins({\n compModelsById,\n showPreview,\n}: {\n compModelsById: Map<string, ComponentModel>;\n showPreview?: boolean;\n}): ComponentCardPluginType<PluginProps>[] {\n const serverUrlsSignature = React.useMemo(() => {\n const serversCount = Array.from(compModelsById.values())\n .filter((comp) => comp.server?.url)\n .map((comp) => comp.server?.url)\n .join(',');\n return serversCount;\n }, [compModelsById]);\n\n const plugins = React.useMemo(\n () => [\n {\n preview: function Preview({ component, shouldShowPreview }) {\n const compModel = compModelsById.get(component.id.toString());\n if (!compModel) return null;\n return (\n <PreviewPlaceholder\n componentDescriptor={component}\n component={compModel}\n shouldShowPreview={showPreview || shouldShowPreview}\n />\n );\n },\n },\n {\n previewBottomRight: function PreviewBottomRight({ component }) {\n const env = component.get('teambit.envs/envs');\n const envComponentId = env?.id ? ComponentID.fromString(env?.id) : undefined;\n\n return (\n <div className={styles.rightPreviewPlugins}>\n <div className={styles.badge}>\n <Tooltip delay={300} content={envComponentId?.name}>\n <img src={env?.icon} className={styles.envIcon} />\n </Tooltip>\n </div>\n </div>\n );\n },\n },\n new LinkPlugin(),\n ],\n [compModelsById.size, serverUrlsSignature, showPreview]\n );\n\n return plugins;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","data","_interopRequireWildcard","require","_explorerUiGallery","_workspaceUi","_previewUi","_designUi","_componentId","_lodash","_interopRequireDefault","_scopes","_cloudHooks","_workspaceUi2","_workspaceUi3","_designUi2","_workspaceContext","_linkPlugin","_useWorkspaceAggregation","_useQueryParamWithDefault","_workspaceFilterPanel","_workspaceOverviewModule","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","WorkspaceOverview","workspace","useContext","WorkspaceContext","components","componentDescriptors","length","createElement","EmptyWorkspace","name","isMinimal","useWorkspaceMode","compModelsById","useMemo","Map","map","c","id","toString","uniqueScopes","Set","scope","cloudScopes","useCloudScopes","cloudMap","s","compDescriptorMap","d","items","compact","component","deprecation","isDeprecate","descriptor","cloudScope","ScopeID","isValid","fromString","undefined","componentDescriptor","aggregation","setAggregation","useQueryParamWithDefault","activeNamespaces","setActiveNamespaces","useState","activeScopes","setActiveScopes","filters","namespaces","scopes","groups","groupType","availableAggregations","filteredCount","useWorkspaceAggregation","plugins","useCardPlugins","showPreview","className","styles","container","WorkspaceFilterPanel","onAggregationChange","onNamespacesChange","onScopesChange","group","key","agg","H3","aggregationTitle","displayName","ComponentGrid","cardGrid","item","WorkspaceComponentCard","shouldShowPreviewState","serverUrlsSignature","React","serversCount","Array","from","values","filter","comp","server","url","join","preview","Preview","shouldShowPreview","compModel","PreviewPlaceholder","previewBottomRight","PreviewBottomRight","env","envComponentId","ComponentID","rightPreviewPlugins","badge","Tooltip","delay","content","src","icon","envIcon","LinkPlugin","size"],"sources":["workspace-overview.tsx"],"sourcesContent":["import React, { useContext, useMemo, useState } from 'react';\nimport { ComponentGrid } from '@teambit/explorer.ui.gallery.component-grid';\nimport { EmptyWorkspace } from '@teambit/workspace.ui.empty-workspace';\nimport { PreviewPlaceholder } from '@teambit/preview.ui.preview-placeholder';\nimport { Tooltip } from '@teambit/design.ui.tooltip';\nimport { ComponentID } from '@teambit/component-id';\nimport type { ComponentModel } from '@teambit/component';\nimport compact from 'lodash.compact';\nimport { ScopeID } from '@teambit/scopes.scope-id';\nimport { useCloudScopes } from '@teambit/cloud.hooks.use-cloud-scopes';\nimport { WorkspaceComponentCard } from '@teambit/workspace.ui.workspace-component-card';\nimport type { ComponentCardPluginType, PluginProps } from '@teambit/explorer.ui.component-card';\nimport { useWorkspaceMode } from '@teambit/workspace.ui.use-workspace-mode';\nimport { H3 } from '@teambit/design.ui.heading';\nimport { WorkspaceContext } from '../workspace-context';\nimport { LinkPlugin } from './link-plugin';\nimport { useWorkspaceAggregation } from './use-workspace-aggregation';\nimport { useQueryParamWithDefault } from './use-query-param-with-default';\nimport type { AggregationType } from './workspace-overview.types';\nimport { WorkspaceFilterPanel } from './workspace-filter-panel';\nimport styles from './workspace-overview.module.scss';\n\nexport function WorkspaceOverview() {\n const workspace = useContext(WorkspaceContext);\n const { components, componentDescriptors } = workspace;\n\n if (!components.length) return <EmptyWorkspace name={workspace.name} />;\n\n const { isMinimal } = useWorkspaceMode();\n const compModelsById = useMemo(() => new Map(components.map((c) => [c.id.toString(), c])), [components]);\n\n const uniqueScopes = [...new Set(components.map((c) => c.id.scope))];\n const { cloudScopes } = useCloudScopes(uniqueScopes);\n const cloudMap = new Map((cloudScopes || []).map((s) => [s.id.toString(), s]));\n\n const compDescriptorMap = new Map(componentDescriptors.map((d) => [d.id.toString(), d]));\n\n const items = compact(\n components.map((component) => {\n if (component.deprecation?.isDeprecate) return null;\n\n const descriptor = compDescriptorMap.get(component.id.toString());\n if (!descriptor) return null;\n\n const cloudScope = cloudMap.get(component.id.scope);\n const scope =\n cloudScope ||\n (ScopeID.isValid(component.id.scope) && { id: ScopeID.fromString(component.id.scope) }) ||\n undefined;\n\n return { component, componentDescriptor: descriptor, scope: (scope && { id: scope.id }) || undefined };\n })\n );\n\n const [aggregation, setAggregation] = useQueryParamWithDefault<AggregationType>('aggregation', 'namespaces');\n const [activeNamespaces, setActiveNamespaces] = useState<string[]>([]);\n const [activeScopes, setActiveScopes] = useState<string[]>([]);\n\n const filters = useMemo(\n () => ({ namespaces: activeNamespaces, scopes: activeScopes }),\n [activeNamespaces, activeScopes]\n );\n\n const { groups, groupType, availableAggregations, filteredCount } = useWorkspaceAggregation(\n items,\n aggregation,\n filters\n );\n\n const plugins = useCardPlugins({ compModelsById, showPreview: isMinimal });\n\n return (\n <div className={styles.container}>\n <WorkspaceFilterPanel\n aggregation={aggregation}\n onAggregationChange={setAggregation}\n availableAggregations={availableAggregations}\n items={items}\n activeNamespaces={activeNamespaces}\n onNamespacesChange={setActiveNamespaces}\n activeScopes={activeScopes}\n onScopesChange={setActiveScopes}\n />\n\n {filteredCount === 0 && <EmptyWorkspace name={workspace.name} />}\n\n {groups.map((group) => (\n <section key={group.name} className={styles.agg}>\n {groupType !== 'none' && <H3 className={styles.aggregationTitle}>{group.displayName}</H3>}\n\n <ComponentGrid className={styles.cardGrid}>\n {group.items.map((item) => (\n <WorkspaceComponentCard\n key={item.component.id.toString()}\n component={item.component}\n componentDescriptor={item.componentDescriptor}\n scope={item.scope}\n plugins={plugins}\n shouldShowPreviewState={isMinimal}\n />\n ))}\n </ComponentGrid>\n </section>\n ))}\n </div>\n );\n}\n\nexport function useCardPlugins({\n compModelsById,\n showPreview,\n}: {\n compModelsById: Map<string, ComponentModel>;\n showPreview?: boolean;\n}): ComponentCardPluginType<PluginProps>[] {\n const serverUrlsSignature = React.useMemo(() => {\n const serversCount = Array.from(compModelsById.values())\n .filter((comp) => comp.server?.url)\n .map((comp) => comp.server?.url)\n .join(',');\n return serversCount;\n }, [compModelsById]);\n\n const plugins = React.useMemo(\n () => [\n {\n preview: function Preview({ component, shouldShowPreview }) {\n const compModel = compModelsById.get(component.id.toString());\n if (!compModel) return null;\n return (\n <PreviewPlaceholder\n componentDescriptor={component}\n component={compModel}\n shouldShowPreview={showPreview || shouldShowPreview}\n />\n );\n },\n },\n {\n previewBottomRight: function PreviewBottomRight({ component }) {\n const env = component.get('teambit.envs/envs');\n const envComponentId = env?.id ? ComponentID.fromString(env?.id) : undefined;\n\n return (\n <div className={styles.rightPreviewPlugins}>\n <div className={styles.badge}>\n <Tooltip delay={300} content={envComponentId?.name}>\n <img src={env?.icon} className={styles.envIcon} />\n </Tooltip>\n </div>\n </div>\n );\n },\n },\n new LinkPlugin(),\n ],\n [compModelsById.size, serverUrlsSignature, showPreview]\n );\n\n return plugins;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@import '@teambit/ui-foundation.ui.constants.z-indexes/z-indexes.module.scss';
|
|
2
|
+
|
|
1
3
|
.container {
|
|
2
4
|
padding: 24px 5% 150px 5%;
|
|
3
5
|
overflow-y: auto;
|
|
@@ -23,7 +25,7 @@
|
|
|
23
25
|
padding: 4px;
|
|
24
26
|
height: 15px;
|
|
25
27
|
margin-right: 4px;
|
|
26
|
-
z-index:
|
|
28
|
+
z-index: $nav-z-index;
|
|
27
29
|
border-radius: 8px;
|
|
28
30
|
margin-bottom: 4px;
|
|
29
31
|
box-shadow: 0px 2px 18px rgb(0 0 0 / 10%);
|
|
@@ -44,7 +46,7 @@
|
|
|
44
46
|
justify-content: space-between;
|
|
45
47
|
margin-bottom: 24px;
|
|
46
48
|
position: relative;
|
|
47
|
-
z-index:
|
|
49
|
+
z-index: $modal-z-index - 1;
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
.aggButtons {
|
|
@@ -129,7 +131,7 @@
|
|
|
129
131
|
}
|
|
130
132
|
|
|
131
133
|
.filterPanel :global(.menu) {
|
|
132
|
-
z-index:
|
|
134
|
+
z-index: $modal-z-index - 1 !important;
|
|
133
135
|
border-radius: 8px !important;
|
|
134
136
|
padding: 8px 0 !important;
|
|
135
137
|
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/workspace",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.869",
|
|
4
4
|
"homepage": "https://bit.cloud/teambit/workspace/workspace",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.workspace",
|
|
8
8
|
"name": "workspace",
|
|
9
|
-
"version": "1.0.
|
|
9
|
+
"version": "1.0.869"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"lodash": "4.17.21",
|
|
@@ -105,23 +105,23 @@
|
|
|
105
105
|
"@teambit/scopes.scope-id": "0.0.9",
|
|
106
106
|
"@teambit/workspace.ui.empty-workspace": "0.0.509",
|
|
107
107
|
"@teambit/workspace.ui.workspace-component-card": "0.0.567",
|
|
108
|
-
"@teambit/component": "1.0.
|
|
109
|
-
"@teambit/dependency-resolver": "1.0.
|
|
110
|
-
"@teambit/envs": "1.0.
|
|
111
|
-
"@teambit/objects": "0.0.
|
|
112
|
-
"@teambit/scope": "1.0.
|
|
113
|
-
"@teambit/graph": "1.0.
|
|
114
|
-
"@teambit/isolator": "1.0.
|
|
115
|
-
"@teambit/component-tree": "1.0.
|
|
116
|
-
"@teambit/watcher": "1.0.
|
|
117
|
-
"@teambit/aspect-loader": "1.0.
|
|
118
|
-
"@teambit/graphql": "1.0.
|
|
119
|
-
"@teambit/bundler": "1.0.
|
|
120
|
-
"@teambit/ui": "1.0.
|
|
121
|
-
"@teambit/command-bar": "1.0.
|
|
122
|
-
"@teambit/sidebar": "1.0.
|
|
123
|
-
"@teambit/pubsub": "1.0.
|
|
124
|
-
"@teambit/deprecation": "1.0.
|
|
108
|
+
"@teambit/component": "1.0.869",
|
|
109
|
+
"@teambit/dependency-resolver": "1.0.869",
|
|
110
|
+
"@teambit/envs": "1.0.869",
|
|
111
|
+
"@teambit/objects": "0.0.376",
|
|
112
|
+
"@teambit/scope": "1.0.869",
|
|
113
|
+
"@teambit/graph": "1.0.869",
|
|
114
|
+
"@teambit/isolator": "1.0.869",
|
|
115
|
+
"@teambit/component-tree": "1.0.869",
|
|
116
|
+
"@teambit/watcher": "1.0.869",
|
|
117
|
+
"@teambit/aspect-loader": "1.0.869",
|
|
118
|
+
"@teambit/graphql": "1.0.869",
|
|
119
|
+
"@teambit/bundler": "1.0.869",
|
|
120
|
+
"@teambit/ui": "1.0.869",
|
|
121
|
+
"@teambit/command-bar": "1.0.869",
|
|
122
|
+
"@teambit/sidebar": "1.0.869",
|
|
123
|
+
"@teambit/pubsub": "1.0.869",
|
|
124
|
+
"@teambit/deprecation": "1.0.869"
|
|
125
125
|
},
|
|
126
126
|
"devDependencies": {
|
|
127
127
|
"@types/lodash": "4.14.165",
|
|
@@ -12,6 +12,9 @@ export function getRootNamespace(ns: string): string {
|
|
|
12
12
|
export function namespacePriority(ns: string): number {
|
|
13
13
|
const root = getRootNamespace(ns);
|
|
14
14
|
|
|
15
|
+
// internal namespaces (starting with _) go last
|
|
16
|
+
if (root.startsWith('_')) return 4;
|
|
17
|
+
|
|
15
18
|
if (PRIORITY_HIGH.includes(root)) return 0;
|
|
16
19
|
if (PRIORITY_MED.includes(root)) return 1;
|
|
17
20
|
if (PRIORITY_LOW.includes(root)) return 3;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { useCallback, useMemo } from 'react';
|
|
2
|
+
import { useSearchParams } from 'react-router-dom';
|
|
3
|
+
|
|
4
|
+
const STORAGE_KEY_PREFIX = 'workspace-overview:';
|
|
5
|
+
|
|
6
|
+
export interface QueryParamOptions {
|
|
7
|
+
/** persist value to localStorage across sessions. Default: true */
|
|
8
|
+
persist?: boolean;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function useQueryParamWithDefault<T extends string>(
|
|
12
|
+
paramName: string,
|
|
13
|
+
fallback: T,
|
|
14
|
+
options: QueryParamOptions = {}
|
|
15
|
+
): [T, (value: T | null) => void] {
|
|
16
|
+
const { persist = true } = options;
|
|
17
|
+
const [searchParams, setSearchParams] = useSearchParams();
|
|
18
|
+
const storageKey = STORAGE_KEY_PREFIX + paramName;
|
|
19
|
+
|
|
20
|
+
const value = useMemo((): T => {
|
|
21
|
+
const urlValue = searchParams.get(paramName);
|
|
22
|
+
if (urlValue) return urlValue as T;
|
|
23
|
+
|
|
24
|
+
if (persist) {
|
|
25
|
+
const stored = safeGetItem(storageKey);
|
|
26
|
+
if (stored) return stored as T;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return fallback;
|
|
30
|
+
}, [searchParams, paramName, storageKey, fallback, persist]);
|
|
31
|
+
|
|
32
|
+
const setValue = useCallback(
|
|
33
|
+
(newValue: T | null) => {
|
|
34
|
+
const newParams = new URLSearchParams(searchParams);
|
|
35
|
+
|
|
36
|
+
if (newValue === null) {
|
|
37
|
+
newParams.delete(paramName);
|
|
38
|
+
if (persist) safeRemoveItem(storageKey);
|
|
39
|
+
} else {
|
|
40
|
+
newParams.set(paramName, newValue);
|
|
41
|
+
if (persist) safeSetItem(storageKey, newValue);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
setSearchParams(newParams);
|
|
45
|
+
},
|
|
46
|
+
[searchParams, setSearchParams, paramName, storageKey, persist]
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
return [value, setValue];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export function useListParamWithDefault(
|
|
53
|
+
paramName: string,
|
|
54
|
+
options: QueryParamOptions = {}
|
|
55
|
+
): [string[], (values: string[]) => void] {
|
|
56
|
+
const { persist = false } = options;
|
|
57
|
+
const [searchParams, setSearchParams] = useSearchParams();
|
|
58
|
+
const storageKey = STORAGE_KEY_PREFIX + paramName;
|
|
59
|
+
|
|
60
|
+
const values = useMemo((): string[] => {
|
|
61
|
+
const urlValue = searchParams.get(paramName);
|
|
62
|
+
if (urlValue) return urlValue.split(',').filter(Boolean);
|
|
63
|
+
|
|
64
|
+
if (persist) {
|
|
65
|
+
const stored = safeGetItem(storageKey);
|
|
66
|
+
if (stored) return stored.split(',').filter(Boolean);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return [];
|
|
70
|
+
}, [searchParams, paramName, storageKey, persist]);
|
|
71
|
+
|
|
72
|
+
const setValues = useCallback(
|
|
73
|
+
(newValues: string[]) => {
|
|
74
|
+
const newParams = new URLSearchParams(searchParams);
|
|
75
|
+
const joined = newValues.filter(Boolean).join(',');
|
|
76
|
+
|
|
77
|
+
if (joined) {
|
|
78
|
+
newParams.set(paramName, joined);
|
|
79
|
+
if (persist) safeSetItem(storageKey, joined);
|
|
80
|
+
} else {
|
|
81
|
+
newParams.delete(paramName);
|
|
82
|
+
if (persist) safeRemoveItem(storageKey);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
setSearchParams(newParams);
|
|
86
|
+
},
|
|
87
|
+
[searchParams, setSearchParams, paramName, storageKey, persist]
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
return [values, setValues];
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function safeGetItem(key: string): string | null {
|
|
94
|
+
try {
|
|
95
|
+
return localStorage.getItem(key);
|
|
96
|
+
} catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function safeSetItem(key: string, value: string): void {
|
|
102
|
+
try {
|
|
103
|
+
localStorage.setItem(key, value);
|
|
104
|
+
} catch {
|
|
105
|
+
// ignore storage errors
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function safeRemoveItem(key: string): void {
|
|
110
|
+
try {
|
|
111
|
+
localStorage.removeItem(key);
|
|
112
|
+
} catch {
|
|
113
|
+
// ignore storage errors
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { useMemo } from 'react';
|
|
2
2
|
import { sortNamespacesAdvanced, sortItemsByNamespace } from './namespace-sort';
|
|
3
|
-
import { filterItems,
|
|
3
|
+
import { filterItems, type ActiveFilters } from './filter-utils';
|
|
4
4
|
import type { WorkspaceItem, AggregationType, AggregationGroup, AggregationResult } from './workspace-overview.types';
|
|
5
5
|
|
|
6
|
-
export function useWorkspaceAggregation(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
export function useWorkspaceAggregation(
|
|
7
|
+
items: WorkspaceItem[],
|
|
8
|
+
aggregation: AggregationType,
|
|
9
|
+
filters: ActiveFilters
|
|
10
|
+
): AggregationResult {
|
|
10
11
|
const filtered = useMemo(() => filterItems(items, filters), [items, filters]);
|
|
11
12
|
|
|
12
13
|
if (aggregation === 'none') {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import React, { useMemo } from 'react';
|
|
2
|
-
import { useSearchParams } from 'react-router-dom';
|
|
3
2
|
import { ToggleButton } from '@teambit/design.inputs.toggle-button';
|
|
4
3
|
import { BaseFilter } from '@teambit/component.filters.base-filter';
|
|
5
4
|
import type { WorkspaceItem, AggregationType } from './workspace-overview.types';
|
|
@@ -7,8 +6,13 @@ import styles from './workspace-overview.module.scss';
|
|
|
7
6
|
|
|
8
7
|
export interface WorkspaceFilterPanelProps {
|
|
9
8
|
aggregation: AggregationType;
|
|
9
|
+
onAggregationChange: (agg: AggregationType) => void;
|
|
10
10
|
availableAggregations: AggregationType[];
|
|
11
11
|
items: WorkspaceItem[];
|
|
12
|
+
activeNamespaces: string[];
|
|
13
|
+
onNamespacesChange: (namespaces: string[]) => void;
|
|
14
|
+
activeScopes: string[];
|
|
15
|
+
onScopesChange: (scopes: string[]) => void;
|
|
12
16
|
}
|
|
13
17
|
|
|
14
18
|
const LABELS: Record<AggregationType, string> = {
|
|
@@ -17,9 +21,16 @@ const LABELS: Record<AggregationType, string> = {
|
|
|
17
21
|
none: 'None',
|
|
18
22
|
};
|
|
19
23
|
|
|
20
|
-
export function WorkspaceFilterPanel({
|
|
21
|
-
|
|
22
|
-
|
|
24
|
+
export function WorkspaceFilterPanel({
|
|
25
|
+
aggregation,
|
|
26
|
+
onAggregationChange,
|
|
27
|
+
availableAggregations,
|
|
28
|
+
items,
|
|
29
|
+
activeNamespaces,
|
|
30
|
+
onNamespacesChange,
|
|
31
|
+
activeScopes,
|
|
32
|
+
onScopesChange,
|
|
33
|
+
}: WorkspaceFilterPanelProps) {
|
|
23
34
|
const namespaceOptions = useMemo(
|
|
24
35
|
() =>
|
|
25
36
|
[...new Set(items.map((i) => i.component.id.namespace || '/'))].map((v) => ({
|
|
@@ -36,32 +47,17 @@ export function WorkspaceFilterPanel({ aggregation, availableAggregations, items
|
|
|
36
47
|
[items]
|
|
37
48
|
);
|
|
38
49
|
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
.filter(Boolean)
|
|
42
|
-
.map((v) => ({ value: v }));
|
|
43
|
-
|
|
44
|
-
const activeScopes = (searchParams.get('scopes') || '')
|
|
45
|
-
.split(',')
|
|
46
|
-
.filter(Boolean)
|
|
47
|
-
.map((v) => ({ value: v }));
|
|
50
|
+
const activeNsOptions = activeNamespaces.map((v) => ({ value: v }));
|
|
51
|
+
const activeScopeOptions = activeScopes.map((v) => ({ value: v }));
|
|
48
52
|
|
|
49
53
|
const applyNs = (opts) => {
|
|
50
54
|
const list = opts.map((o) => o.value).filter((v): v is string => typeof v === 'string');
|
|
51
|
-
|
|
52
|
-
if (list.length) searchParams.set('ns', list.join(','));
|
|
53
|
-
else searchParams.delete('ns');
|
|
54
|
-
|
|
55
|
-
setSearchParams(searchParams);
|
|
55
|
+
onNamespacesChange(list);
|
|
56
56
|
};
|
|
57
57
|
|
|
58
58
|
const applyScopes = (opts) => {
|
|
59
59
|
const list = opts.map((o) => o.value).filter((v): v is string => typeof v === 'string');
|
|
60
|
-
|
|
61
|
-
if (list.length) searchParams.set('scopes', list.join(','));
|
|
62
|
-
else searchParams.delete('scopes');
|
|
63
|
-
|
|
64
|
-
setSearchParams(searchParams);
|
|
60
|
+
onScopesChange(list);
|
|
65
61
|
};
|
|
66
62
|
|
|
67
63
|
const currentIndex = Math.max(
|
|
@@ -71,8 +67,7 @@ export function WorkspaceFilterPanel({ aggregation, availableAggregations, items
|
|
|
71
67
|
|
|
72
68
|
const applyAgg = (i: number) => {
|
|
73
69
|
const agg = availableAggregations[i];
|
|
74
|
-
|
|
75
|
-
setSearchParams(searchParams);
|
|
70
|
+
onAggregationChange(agg);
|
|
76
71
|
};
|
|
77
72
|
|
|
78
73
|
return (
|
|
@@ -82,7 +77,7 @@ export function WorkspaceFilterPanel({ aggregation, availableAggregations, items
|
|
|
82
77
|
id="namespaces"
|
|
83
78
|
placeholder="Namespaces"
|
|
84
79
|
options={namespaceOptions}
|
|
85
|
-
activeOptions={
|
|
80
|
+
activeOptions={activeNsOptions}
|
|
86
81
|
onChange={applyNs}
|
|
87
82
|
isSearchable
|
|
88
83
|
/>
|
|
@@ -91,7 +86,7 @@ export function WorkspaceFilterPanel({ aggregation, availableAggregations, items
|
|
|
91
86
|
id="scopes"
|
|
92
87
|
placeholder="Scopes"
|
|
93
88
|
options={scopeOptions}
|
|
94
|
-
activeOptions={
|
|
89
|
+
activeOptions={activeScopeOptions}
|
|
95
90
|
onChange={applyScopes}
|
|
96
91
|
isSearchable
|
|
97
92
|
/>
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@import '@teambit/ui-foundation.ui.constants.z-indexes/z-indexes.module.scss';
|
|
2
|
+
|
|
1
3
|
.container {
|
|
2
4
|
padding: 24px 5% 150px 5%;
|
|
3
5
|
overflow-y: auto;
|
|
@@ -23,7 +25,7 @@
|
|
|
23
25
|
padding: 4px;
|
|
24
26
|
height: 15px;
|
|
25
27
|
margin-right: 4px;
|
|
26
|
-
z-index:
|
|
28
|
+
z-index: $nav-z-index;
|
|
27
29
|
border-radius: 8px;
|
|
28
30
|
margin-bottom: 4px;
|
|
29
31
|
box-shadow: 0px 2px 18px rgb(0 0 0 / 10%);
|
|
@@ -44,7 +46,7 @@
|
|
|
44
46
|
justify-content: space-between;
|
|
45
47
|
margin-bottom: 24px;
|
|
46
48
|
position: relative;
|
|
47
|
-
z-index:
|
|
49
|
+
z-index: $modal-z-index - 1;
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
.aggButtons {
|
|
@@ -129,7 +131,7 @@
|
|
|
129
131
|
}
|
|
130
132
|
|
|
131
133
|
.filterPanel :global(.menu) {
|
|
132
|
-
z-index:
|
|
134
|
+
z-index: $modal-z-index - 1 !important;
|
|
133
135
|
border-radius: 8px !important;
|
|
134
136
|
padding: 8px 0 !important;
|
|
135
137
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useContext, useMemo } from 'react';
|
|
1
|
+
import React, { useContext, useMemo, useState } from 'react';
|
|
2
2
|
import { ComponentGrid } from '@teambit/explorer.ui.gallery.component-grid';
|
|
3
3
|
import { EmptyWorkspace } from '@teambit/workspace.ui.empty-workspace';
|
|
4
4
|
import { PreviewPlaceholder } from '@teambit/preview.ui.preview-placeholder';
|
|
@@ -8,7 +8,6 @@ import type { ComponentModel } from '@teambit/component';
|
|
|
8
8
|
import compact from 'lodash.compact';
|
|
9
9
|
import { ScopeID } from '@teambit/scopes.scope-id';
|
|
10
10
|
import { useCloudScopes } from '@teambit/cloud.hooks.use-cloud-scopes';
|
|
11
|
-
import { useSearchParams } from 'react-router-dom';
|
|
12
11
|
import { WorkspaceComponentCard } from '@teambit/workspace.ui.workspace-component-card';
|
|
13
12
|
import type { ComponentCardPluginType, PluginProps } from '@teambit/explorer.ui.component-card';
|
|
14
13
|
import { useWorkspaceMode } from '@teambit/workspace.ui.use-workspace-mode';
|
|
@@ -16,6 +15,8 @@ import { H3 } from '@teambit/design.ui.heading';
|
|
|
16
15
|
import { WorkspaceContext } from '../workspace-context';
|
|
17
16
|
import { LinkPlugin } from './link-plugin';
|
|
18
17
|
import { useWorkspaceAggregation } from './use-workspace-aggregation';
|
|
18
|
+
import { useQueryParamWithDefault } from './use-query-param-with-default';
|
|
19
|
+
import type { AggregationType } from './workspace-overview.types';
|
|
19
20
|
import { WorkspaceFilterPanel } from './workspace-filter-panel';
|
|
20
21
|
import styles from './workspace-overview.module.scss';
|
|
21
22
|
|
|
@@ -51,16 +52,35 @@ export function WorkspaceOverview() {
|
|
|
51
52
|
})
|
|
52
53
|
);
|
|
53
54
|
|
|
54
|
-
const [
|
|
55
|
-
const
|
|
55
|
+
const [aggregation, setAggregation] = useQueryParamWithDefault<AggregationType>('aggregation', 'namespaces');
|
|
56
|
+
const [activeNamespaces, setActiveNamespaces] = useState<string[]>([]);
|
|
57
|
+
const [activeScopes, setActiveScopes] = useState<string[]>([]);
|
|
56
58
|
|
|
57
|
-
const
|
|
59
|
+
const filters = useMemo(
|
|
60
|
+
() => ({ namespaces: activeNamespaces, scopes: activeScopes }),
|
|
61
|
+
[activeNamespaces, activeScopes]
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
const { groups, groupType, availableAggregations, filteredCount } = useWorkspaceAggregation(
|
|
65
|
+
items,
|
|
66
|
+
aggregation,
|
|
67
|
+
filters
|
|
68
|
+
);
|
|
58
69
|
|
|
59
70
|
const plugins = useCardPlugins({ compModelsById, showPreview: isMinimal });
|
|
60
71
|
|
|
61
72
|
return (
|
|
62
73
|
<div className={styles.container}>
|
|
63
|
-
<WorkspaceFilterPanel
|
|
74
|
+
<WorkspaceFilterPanel
|
|
75
|
+
aggregation={aggregation}
|
|
76
|
+
onAggregationChange={setAggregation}
|
|
77
|
+
availableAggregations={availableAggregations}
|
|
78
|
+
items={items}
|
|
79
|
+
activeNamespaces={activeNamespaces}
|
|
80
|
+
onNamespacesChange={setActiveNamespaces}
|
|
81
|
+
activeScopes={activeScopes}
|
|
82
|
+
onScopesChange={setActiveScopes}
|
|
83
|
+
/>
|
|
64
84
|
|
|
65
85
|
{filteredCount === 0 && <EmptyWorkspace name={workspace.name} />}
|
|
66
86
|
|