@teambit/workspace 1.0.914 → 1.0.916
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-1774022201902.js → preview-1774372807628.js} +2 -2
- package/dist/ui/workspace/workspace-overview/workspace-overview.js +2 -2
- package/dist/ui/workspace/workspace-overview/workspace-overview.js.map +1 -1
- package/dist/ui/workspace/workspace.js +63 -2
- package/dist/ui/workspace/workspace.js.map +1 -1
- package/dist/ui/workspace/workspace.module.scss +39 -0
- package/package.json +37 -37
- package/ui/workspace/workspace-overview/workspace-overview.tsx +4 -4
- package/ui/workspace/workspace.module.scss +39 -0
- package/ui/workspace/workspace.tsx +63 -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.916/dist/workspace.composition.js';
|
|
2
|
+
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.workspace_workspace@1.0.916/dist/workspace.docs.mdx';
|
|
3
3
|
|
|
4
4
|
export const compositions = [compositions_0];
|
|
5
5
|
export const overview = [overview_0];
|
|
@@ -169,8 +169,8 @@ function WorkspaceOverview() {
|
|
|
169
169
|
};
|
|
170
170
|
}));
|
|
171
171
|
const [aggregation, setAggregation] = (0, _useQueryParamWithDefault().useQueryParamWithDefault)('aggregation', 'namespaces');
|
|
172
|
-
const [activeNamespaces, setActiveNamespaces] = (0,
|
|
173
|
-
const [activeScopes, setActiveScopes] = (0,
|
|
172
|
+
const [activeNamespaces, setActiveNamespaces] = (0, _useQueryParamWithDefault().useListParamWithDefault)('ns');
|
|
173
|
+
const [activeScopes, setActiveScopes] = (0, _useQueryParamWithDefault().useListParamWithDefault)('scopes');
|
|
174
174
|
const filters = (0, _react().useMemo)(() => ({
|
|
175
175
|
namespaces: activeNamespaces,
|
|
176
176
|
scopes: activeScopes
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"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","useListParamWithDefault","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 } 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, useListParamWithDefault } 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] = useListParamWithDefault('ns');\n const [activeScopes, setActiveScopes] = useListParamWithDefault('scopes');\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":[]}
|
|
@@ -27,6 +27,20 @@ function _reactRouterDom() {
|
|
|
27
27
|
};
|
|
28
28
|
return data;
|
|
29
29
|
}
|
|
30
|
+
function _component() {
|
|
31
|
+
const data = require("@teambit/component");
|
|
32
|
+
_component = function () {
|
|
33
|
+
return data;
|
|
34
|
+
};
|
|
35
|
+
return data;
|
|
36
|
+
}
|
|
37
|
+
function _lanesUiModels() {
|
|
38
|
+
const data = require("@teambit/lanes.ui.models.lanes-model");
|
|
39
|
+
_lanesUiModels = function () {
|
|
40
|
+
return data;
|
|
41
|
+
};
|
|
42
|
+
return data;
|
|
43
|
+
}
|
|
30
44
|
function _uiFoundationUiNotifications() {
|
|
31
45
|
const data = require("@teambit/ui-foundation.ui.notifications.notification-context");
|
|
32
46
|
_uiFoundationUiNotifications = function () {
|
|
@@ -212,11 +226,13 @@ function Workspace({
|
|
|
212
226
|
className: _workspaceModule().default.workspaceWrapper
|
|
213
227
|
}, /*#__PURE__*/_react().default.createElement(_uiFoundationUi2().TopBar, {
|
|
214
228
|
className: (0, _classnames().default)(_workspaceModule().default.topbar, _workspaceModule().default[themeName], isMinimal && _workspaceModule().default.minimal),
|
|
215
|
-
Corner: () => /*#__PURE__*/_react().default.createElement(
|
|
229
|
+
Corner: () => /*#__PURE__*/_react().default.createElement("div", {
|
|
230
|
+
className: (0, _classnames().default)(isMinimal && _workspaceModule().default.cornerWithBreadcrumb)
|
|
231
|
+
}, /*#__PURE__*/_react().default.createElement(_uiFoundationUi().Corner, {
|
|
216
232
|
className: (0, _classnames().default)(isMinimal && _workspaceModule().default.minimalCorner || _workspaceModule().default.corner, _workspaceModule().default[themeName]),
|
|
217
233
|
name: isMinimal ? '' : workspace.name,
|
|
218
234
|
icon: isMinimal ? 'https://static.bit.dev/bit-icons/house.svg' : workspace.icon
|
|
219
|
-
})
|
|
235
|
+
}), isMinimal && /*#__PURE__*/_react().default.createElement(WorkspaceBreadcrumb, null))
|
|
220
236
|
// @ts-ignore - getting an error of "Types have separate declarations of a private property 'registerFn'." for some reason after upgrading teambit.harmony/harmony from 0.4.6 to 0.4.7
|
|
221
237
|
,
|
|
222
238
|
menu: menuSlot
|
|
@@ -274,4 +290,49 @@ function MinimalModeUrlBroadcasterAndListener() {
|
|
|
274
290
|
return null;
|
|
275
291
|
}
|
|
276
292
|
|
|
293
|
+
/**
|
|
294
|
+
* Extracts the component fullName from the URL.
|
|
295
|
+
* For lane URLs (`/~lane/scope/lane/~component/...`), extracts the path after ~component/
|
|
296
|
+
* and passes it to useIdFromLocation. For regular URLs, useIdFromLocation handles it directly.
|
|
297
|
+
*/
|
|
298
|
+
function useComponentFullNameFromUrl() {
|
|
299
|
+
const {
|
|
300
|
+
pathname
|
|
301
|
+
} = (0, _reactRouterDom().useLocation)();
|
|
302
|
+
const laneComponentUrl = (0, _react().useMemo)(() => {
|
|
303
|
+
const marker = _lanesUiModels().LanesModel.baseLaneComponentRoute.replace(/^\//, '') + '/';
|
|
304
|
+
const idx = pathname.indexOf(marker);
|
|
305
|
+
if (idx !== -1) return pathname.slice(idx + marker.length);
|
|
306
|
+
if (pathname.includes(_lanesUiModels().LanesModel.lanesPrefix)) return ''; // lane page, no component
|
|
307
|
+
return undefined;
|
|
308
|
+
}, [pathname]);
|
|
309
|
+
return (0, _component().useIdFromLocation)(laneComponentUrl || undefined);
|
|
310
|
+
}
|
|
311
|
+
function WorkspaceBreadcrumb() {
|
|
312
|
+
const fullName = useComponentFullNameFromUrl();
|
|
313
|
+
const [searchParams] = (0, _reactRouterDom().useSearchParams)();
|
|
314
|
+
if (!fullName) return null;
|
|
315
|
+
const parts = fullName.split('/');
|
|
316
|
+
const isLast = i => i === parts.length - 1;
|
|
317
|
+
return /*#__PURE__*/_react().default.createElement("span", {
|
|
318
|
+
className: _workspaceModule().default.breadcrumb
|
|
319
|
+
}, parts.map((part, i) => {
|
|
320
|
+
// build the namespace from all segments up to this one
|
|
321
|
+
const namespace = parts.slice(0, i + 1).join('/');
|
|
322
|
+
const overviewParams = new URLSearchParams(searchParams);
|
|
323
|
+
overviewParams.set('aggregation', 'none');
|
|
324
|
+
overviewParams.set('ns', namespace);
|
|
325
|
+
return /*#__PURE__*/_react().default.createElement(_react().default.Fragment, {
|
|
326
|
+
key: i
|
|
327
|
+
}, i > 0 && /*#__PURE__*/_react().default.createElement("span", {
|
|
328
|
+
className: _workspaceModule().default.breadcrumbSeparator
|
|
329
|
+
}, "/"), isLast(i) ? /*#__PURE__*/_react().default.createElement("span", {
|
|
330
|
+
className: _workspaceModule().default.breadcrumbLast
|
|
331
|
+
}, part) : /*#__PURE__*/_react().default.createElement(_reactRouterDom().Link, {
|
|
332
|
+
to: `/?${overviewParams.toString()}`,
|
|
333
|
+
className: _workspaceModule().default.breadcrumbLink
|
|
334
|
+
}, part));
|
|
335
|
+
}));
|
|
336
|
+
}
|
|
337
|
+
|
|
277
338
|
//# sourceMappingURL=workspace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["require","_pluralize","data","_interopRequireDefault","_react","_interopRequireWildcard","_reactRouterDom","_uiFoundationUiNotifications","_uiFoundationUiReactRouter","_uiFoundationUi","_uiFoundationUiButtons","_baseUiSurfacesSplitPane","_baseReactThemes","_baseUiSurfacesSplitPane2","_uiFoundationUi2","_workspaceUi","_classnames","_workspaceUi2","_workspaceHooks","_workspaceHooks2","_useWorkspace","_workspaceOverview","_workspaceProvider","_workspaceModule","_themeFromUrl","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Workspace","routeSlot","menuSlot","sidebar","workspaceUI","onSidebarTogglerChange","isMinimal","useWorkspaceMode","reactionsRef","useRef","onComponentAdded","onComponentRemoved","reactions","useMemo","comps","current","ids","workspace","useWorkspace","theme","useThemePicker","currentTheme","isSidebarOpen","setSidebarOpen","useState","handleSidebarToggle","useCallback","prev","sidebarOpenness","Layout","row","right","themeName","useEffect","window","innerWidth","useLayoutEffect","createElement","className","styles","emptyContainer","setComponents","components","inIframe","parent","WorkspaceProvider","NotificationsBinder","PreserveWorkspaceMode","ThemeFromUrlSync","MinimalModeUrlBroadcasterAndListener","workspaceWrapper","TopBar","classNames","topbar","minimal","Corner","minimalCorner","corner","name","icon","menu","SplitPane","main","size","layout","Pane","closed","HoverSplitter","splitter","splitterClosed","Collapser","isOpen","Boolean","onMouseDown","stopPropagation","onClick","tooltipContent","SlotRouter","slot","Route","index","element","WorkspaceOverview","notifications","useNotifications","notificationsMapped","notificationId","log","pluralize","length","map","comp","id","toString","join","setTimeout","dismiss","useUrlChangeBroadcaster","useNavigationMessageListener"],"sources":["workspace.tsx"],"sourcesContent":["import 'reset-css';\nimport pluralize from 'pluralize';\nimport React, { useState, useMemo, useEffect, useCallback, useLayoutEffect, useRef } from 'react';\nimport { Route } from 'react-router-dom';\nimport type { ComponentModel } from '@teambit/component';\nimport type { ComponentID } from '@teambit/component-id';\nimport { useNotifications } from '@teambit/ui-foundation.ui.notifications.notification-context';\nimport { SlotRouter } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport type { RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { Corner } from '@teambit/ui-foundation.ui.corner';\nimport { Collapser } from '@teambit/ui-foundation.ui.buttons.collapser';\nimport { SplitPane, Pane, Layout } from '@teambit/base-ui.surfaces.split-pane.split-pane';\nimport { useThemePicker } from '@teambit/base-react.themes.theme-switcher';\nimport { HoverSplitter } from '@teambit/base-ui.surfaces.split-pane.hover-splitter';\nimport { TopBar } from '@teambit/ui-foundation.ui.top-bar';\nimport { PreserveWorkspaceMode } from '@teambit/workspace.ui.preserve-workspace-mode';\nimport classNames from 'classnames';\nimport { useWorkspaceMode } from '@teambit/workspace.ui.use-workspace-mode';\nimport { useUrlChangeBroadcaster } from '@teambit/workspace.hooks.use-url-change-broadcaster';\nimport { useNavigationMessageListener } from '@teambit/workspace.hooks.use-navigation-message-listener';\n\nimport { useWorkspace } from './use-workspace';\nimport { WorkspaceOverview } from './workspace-overview';\nimport { WorkspaceProvider } from './workspace-provider';\nimport styles from './workspace.module.scss';\nimport type { WorkspaceUI } from '../../workspace.ui.runtime';\nimport { ThemeFromUrlSync } from './theme-from-url';\n\nexport type WorkspaceProps = {\n routeSlot: RouteSlot;\n menuSlot: RouteSlot;\n sidebar: JSX.Element;\n workspaceUI: WorkspaceUI;\n onSidebarTogglerChange: (callback: () => void) => void;\n};\n\n/**\n * main workspace component.\n */\nexport function Workspace({ routeSlot, menuSlot, sidebar, workspaceUI, onSidebarTogglerChange }: WorkspaceProps) {\n const { isMinimal } = useWorkspaceMode();\n\n const reactionsRef = useRef<{\n onComponentAdded: (comps: ComponentModel[]) => void;\n onComponentRemoved: (ids: ComponentID[]) => void;\n }>({\n onComponentAdded: () => {},\n onComponentRemoved: () => {},\n });\n\n const reactions = useMemo(\n () => ({\n onComponentAdded: (comps: ComponentModel[]) => reactionsRef.current.onComponentAdded(comps),\n onComponentRemoved: (ids: ComponentID[]) => reactionsRef.current.onComponentRemoved(ids),\n }),\n []\n );\n\n const { workspace } = useWorkspace(reactions);\n const theme = useThemePicker();\n const currentTheme = theme?.current;\n const [isSidebarOpen, setSidebarOpen] = useState<boolean | null>(null);\n const handleSidebarToggle = useCallback(() => {\n setSidebarOpen((prev) => !prev);\n }, []);\n const sidebarOpenness = isSidebarOpen ? Layout.row : Layout.right;\n const themeName = currentTheme?.themeName || 'light';\n onSidebarTogglerChange(handleSidebarToggle);\n\n useEffect(() => {\n if (!window) return;\n if (window.innerWidth <= 1024) {\n setSidebarOpen(false);\n }\n }, []);\n\n useLayoutEffect(() => {\n setSidebarOpen(!isMinimal);\n }, [isMinimal]);\n\n if (!workspace) {\n return <div className={styles.emptyContainer}></div>;\n }\n\n workspaceUI.setComponents(workspace.components);\n const inIframe = typeof window !== 'undefined' && window.parent && window.parent !== window;\n\n return (\n <WorkspaceProvider workspace={workspace}>\n {!isMinimal && <NotificationsBinder reactionsRef={reactionsRef} />}\n <PreserveWorkspaceMode>\n <ThemeFromUrlSync />\n {isMinimal && inIframe && <MinimalModeUrlBroadcasterAndListener />}\n <div className={styles.workspaceWrapper}>\n {\n <TopBar\n className={classNames(styles.topbar, styles[themeName], isMinimal && styles.minimal)}\n Corner={() => (\n <Corner\n className={classNames((isMinimal && styles.minimalCorner) || styles.corner, styles[themeName])}\n name={isMinimal ? '' : workspace.name}\n icon={isMinimal ? 'https://static.bit.dev/bit-icons/house.svg' : workspace.icon}\n />\n )}\n // @ts-ignore - getting an error of \"Types have separate declarations of a private property 'registerFn'.\" for some reason after upgrading teambit.harmony/harmony from 0.4.6 to 0.4.7\n menu={menuSlot}\n />\n }\n <SplitPane className={styles.main} size={246} layout={sidebarOpenness}>\n <Pane className={classNames(styles.sidebar, styles[themeName], !isSidebarOpen && styles.closed)}>\n {sidebar}\n </Pane>\n <HoverSplitter\n className={classNames(styles.splitter, isMinimal && !isSidebarOpen && styles.splitterClosed)}\n >\n <Collapser\n isOpen={Boolean(isSidebarOpen)}\n onMouseDown={(e) => e.stopPropagation()} // avoid split-pane drag\n onClick={handleSidebarToggle}\n tooltipContent={`${isSidebarOpen ? 'Hide' : 'Show'} side panel`}\n />\n </HoverSplitter>\n <Pane>\n <SlotRouter slot={routeSlot}>\n <Route index element={<WorkspaceOverview />} />\n </SlotRouter>\n </Pane>\n </SplitPane>\n </div>\n </PreserveWorkspaceMode>\n </WorkspaceProvider>\n );\n}\n\nfunction NotificationsBinder({\n reactionsRef,\n}: {\n reactionsRef: React.MutableRefObject<{\n onComponentAdded: (comps: ComponentModel[]) => void;\n onComponentRemoved: (ids: ComponentID[]) => void;\n }>;\n}) {\n const notifications = useNotifications();\n\n const notificationsMapped = useMemo(() => {\n return {\n onComponentAdded: (comps: ComponentModel[]) => {\n const notificationId = notifications.log(\n `added ${pluralize('component', comps.length)}: ${comps.map((comp) => comp.id.toString()).join(', ')}`\n );\n setTimeout(() => notifications.dismiss(notificationId), 12 * 1000);\n },\n onComponentRemoved: (ids: ComponentID[]) => {\n const notificationId = notifications.log(\n `removed ${pluralize('component', ids.length)} ${ids.map((id) => id.toString()).join(', ')}`\n );\n setTimeout(() => notifications.dismiss(notificationId), 12 * 1000);\n },\n };\n }, [notifications]);\n\n useEffect(() => {\n reactionsRef.current = notificationsMapped;\n return () => {\n reactionsRef.current = { onComponentAdded: () => {}, onComponentRemoved: () => {} };\n };\n }, [notificationsMapped, reactionsRef]);\n\n return null;\n}\n\nexport function MinimalModeUrlBroadcasterAndListener() {\n useUrlChangeBroadcaster();\n useNavigationMessageListener();\n return null;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["require","_pluralize","data","_interopRequireDefault","_react","_interopRequireWildcard","_reactRouterDom","_component","_lanesUiModels","_uiFoundationUiNotifications","_uiFoundationUiReactRouter","_uiFoundationUi","_uiFoundationUiButtons","_baseUiSurfacesSplitPane","_baseReactThemes","_baseUiSurfacesSplitPane2","_uiFoundationUi2","_workspaceUi","_classnames","_workspaceUi2","_workspaceHooks","_workspaceHooks2","_useWorkspace","_workspaceOverview","_workspaceProvider","_workspaceModule","_themeFromUrl","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Workspace","routeSlot","menuSlot","sidebar","workspaceUI","onSidebarTogglerChange","isMinimal","useWorkspaceMode","reactionsRef","useRef","onComponentAdded","onComponentRemoved","reactions","useMemo","comps","current","ids","workspace","useWorkspace","theme","useThemePicker","currentTheme","isSidebarOpen","setSidebarOpen","useState","handleSidebarToggle","useCallback","prev","sidebarOpenness","Layout","row","right","themeName","useEffect","window","innerWidth","useLayoutEffect","createElement","className","styles","emptyContainer","setComponents","components","inIframe","parent","WorkspaceProvider","NotificationsBinder","PreserveWorkspaceMode","ThemeFromUrlSync","MinimalModeUrlBroadcasterAndListener","workspaceWrapper","TopBar","classNames","topbar","minimal","Corner","cornerWithBreadcrumb","minimalCorner","corner","name","icon","WorkspaceBreadcrumb","menu","SplitPane","main","size","layout","Pane","closed","HoverSplitter","splitter","splitterClosed","Collapser","isOpen","Boolean","onMouseDown","stopPropagation","onClick","tooltipContent","SlotRouter","slot","Route","index","element","WorkspaceOverview","notifications","useNotifications","notificationsMapped","notificationId","log","pluralize","length","map","comp","id","toString","join","setTimeout","dismiss","useUrlChangeBroadcaster","useNavigationMessageListener","useComponentFullNameFromUrl","pathname","useLocation","laneComponentUrl","marker","LanesModel","baseLaneComponentRoute","replace","idx","indexOf","slice","includes","lanesPrefix","undefined","useIdFromLocation","fullName","searchParams","useSearchParams","parts","split","isLast","breadcrumb","part","namespace","overviewParams","URLSearchParams","Fragment","key","breadcrumbSeparator","breadcrumbLast","Link","to","breadcrumbLink"],"sources":["workspace.tsx"],"sourcesContent":["import 'reset-css';\nimport pluralize from 'pluralize';\nimport React, { useState, useMemo, useEffect, useCallback, useLayoutEffect, useRef } from 'react';\nimport { Route, Link, useLocation, useSearchParams } from 'react-router-dom';\nimport type { ComponentModel } from '@teambit/component';\nimport { useIdFromLocation } from '@teambit/component';\nimport type { ComponentID } from '@teambit/component-id';\nimport { LanesModel } from '@teambit/lanes.ui.models.lanes-model';\nimport { useNotifications } from '@teambit/ui-foundation.ui.notifications.notification-context';\nimport { SlotRouter } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport type { RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { Corner } from '@teambit/ui-foundation.ui.corner';\nimport { Collapser } from '@teambit/ui-foundation.ui.buttons.collapser';\nimport { SplitPane, Pane, Layout } from '@teambit/base-ui.surfaces.split-pane.split-pane';\nimport { useThemePicker } from '@teambit/base-react.themes.theme-switcher';\nimport { HoverSplitter } from '@teambit/base-ui.surfaces.split-pane.hover-splitter';\nimport { TopBar } from '@teambit/ui-foundation.ui.top-bar';\nimport { PreserveWorkspaceMode } from '@teambit/workspace.ui.preserve-workspace-mode';\nimport classNames from 'classnames';\nimport { useWorkspaceMode } from '@teambit/workspace.ui.use-workspace-mode';\nimport { useUrlChangeBroadcaster } from '@teambit/workspace.hooks.use-url-change-broadcaster';\nimport { useNavigationMessageListener } from '@teambit/workspace.hooks.use-navigation-message-listener';\n\nimport { useWorkspace } from './use-workspace';\nimport { WorkspaceOverview } from './workspace-overview';\nimport { WorkspaceProvider } from './workspace-provider';\nimport styles from './workspace.module.scss';\nimport type { WorkspaceUI } from '../../workspace.ui.runtime';\nimport { ThemeFromUrlSync } from './theme-from-url';\n\nexport type WorkspaceProps = {\n routeSlot: RouteSlot;\n menuSlot: RouteSlot;\n sidebar: JSX.Element;\n workspaceUI: WorkspaceUI;\n onSidebarTogglerChange: (callback: () => void) => void;\n};\n\n/**\n * main workspace component.\n */\nexport function Workspace({ routeSlot, menuSlot, sidebar, workspaceUI, onSidebarTogglerChange }: WorkspaceProps) {\n const { isMinimal } = useWorkspaceMode();\n\n const reactionsRef = useRef<{\n onComponentAdded: (comps: ComponentModel[]) => void;\n onComponentRemoved: (ids: ComponentID[]) => void;\n }>({\n onComponentAdded: () => {},\n onComponentRemoved: () => {},\n });\n\n const reactions = useMemo(\n () => ({\n onComponentAdded: (comps: ComponentModel[]) => reactionsRef.current.onComponentAdded(comps),\n onComponentRemoved: (ids: ComponentID[]) => reactionsRef.current.onComponentRemoved(ids),\n }),\n []\n );\n\n const { workspace } = useWorkspace(reactions);\n const theme = useThemePicker();\n const currentTheme = theme?.current;\n const [isSidebarOpen, setSidebarOpen] = useState<boolean | null>(null);\n const handleSidebarToggle = useCallback(() => {\n setSidebarOpen((prev) => !prev);\n }, []);\n const sidebarOpenness = isSidebarOpen ? Layout.row : Layout.right;\n const themeName = currentTheme?.themeName || 'light';\n onSidebarTogglerChange(handleSidebarToggle);\n\n useEffect(() => {\n if (!window) return;\n if (window.innerWidth <= 1024) {\n setSidebarOpen(false);\n }\n }, []);\n\n useLayoutEffect(() => {\n setSidebarOpen(!isMinimal);\n }, [isMinimal]);\n\n if (!workspace) {\n return <div className={styles.emptyContainer}></div>;\n }\n\n workspaceUI.setComponents(workspace.components);\n const inIframe = typeof window !== 'undefined' && window.parent && window.parent !== window;\n\n return (\n <WorkspaceProvider workspace={workspace}>\n {!isMinimal && <NotificationsBinder reactionsRef={reactionsRef} />}\n <PreserveWorkspaceMode>\n <ThemeFromUrlSync />\n {isMinimal && inIframe && <MinimalModeUrlBroadcasterAndListener />}\n <div className={styles.workspaceWrapper}>\n {\n <TopBar\n className={classNames(styles.topbar, styles[themeName], isMinimal && styles.minimal)}\n Corner={() => (\n <div className={classNames(isMinimal && styles.cornerWithBreadcrumb)}>\n <Corner\n className={classNames((isMinimal && styles.minimalCorner) || styles.corner, styles[themeName])}\n name={isMinimal ? '' : workspace.name}\n icon={isMinimal ? 'https://static.bit.dev/bit-icons/house.svg' : workspace.icon}\n />\n {isMinimal && <WorkspaceBreadcrumb />}\n </div>\n )}\n // @ts-ignore - getting an error of \"Types have separate declarations of a private property 'registerFn'.\" for some reason after upgrading teambit.harmony/harmony from 0.4.6 to 0.4.7\n menu={menuSlot}\n />\n }\n <SplitPane className={styles.main} size={246} layout={sidebarOpenness}>\n <Pane className={classNames(styles.sidebar, styles[themeName], !isSidebarOpen && styles.closed)}>\n {sidebar}\n </Pane>\n <HoverSplitter\n className={classNames(styles.splitter, isMinimal && !isSidebarOpen && styles.splitterClosed)}\n >\n <Collapser\n isOpen={Boolean(isSidebarOpen)}\n onMouseDown={(e) => e.stopPropagation()} // avoid split-pane drag\n onClick={handleSidebarToggle}\n tooltipContent={`${isSidebarOpen ? 'Hide' : 'Show'} side panel`}\n />\n </HoverSplitter>\n <Pane>\n <SlotRouter slot={routeSlot}>\n <Route index element={<WorkspaceOverview />} />\n </SlotRouter>\n </Pane>\n </SplitPane>\n </div>\n </PreserveWorkspaceMode>\n </WorkspaceProvider>\n );\n}\n\nfunction NotificationsBinder({\n reactionsRef,\n}: {\n reactionsRef: React.MutableRefObject<{\n onComponentAdded: (comps: ComponentModel[]) => void;\n onComponentRemoved: (ids: ComponentID[]) => void;\n }>;\n}) {\n const notifications = useNotifications();\n\n const notificationsMapped = useMemo(() => {\n return {\n onComponentAdded: (comps: ComponentModel[]) => {\n const notificationId = notifications.log(\n `added ${pluralize('component', comps.length)}: ${comps.map((comp) => comp.id.toString()).join(', ')}`\n );\n setTimeout(() => notifications.dismiss(notificationId), 12 * 1000);\n },\n onComponentRemoved: (ids: ComponentID[]) => {\n const notificationId = notifications.log(\n `removed ${pluralize('component', ids.length)} ${ids.map((id) => id.toString()).join(', ')}`\n );\n setTimeout(() => notifications.dismiss(notificationId), 12 * 1000);\n },\n };\n }, [notifications]);\n\n useEffect(() => {\n reactionsRef.current = notificationsMapped;\n return () => {\n reactionsRef.current = { onComponentAdded: () => {}, onComponentRemoved: () => {} };\n };\n }, [notificationsMapped, reactionsRef]);\n\n return null;\n}\n\nexport function MinimalModeUrlBroadcasterAndListener() {\n useUrlChangeBroadcaster();\n useNavigationMessageListener();\n return null;\n}\n\n/**\n * Extracts the component fullName from the URL.\n * For lane URLs (`/~lane/scope/lane/~component/...`), extracts the path after ~component/\n * and passes it to useIdFromLocation. For regular URLs, useIdFromLocation handles it directly.\n */\nfunction useComponentFullNameFromUrl(): string | undefined {\n const { pathname } = useLocation();\n const laneComponentUrl = useMemo(() => {\n const marker = LanesModel.baseLaneComponentRoute.replace(/^\\//, '') + '/';\n const idx = pathname.indexOf(marker);\n if (idx !== -1) return pathname.slice(idx + marker.length);\n if (pathname.includes(LanesModel.lanesPrefix)) return ''; // lane page, no component\n return undefined;\n }, [pathname]);\n\n return useIdFromLocation(laneComponentUrl || undefined);\n}\n\nfunction WorkspaceBreadcrumb() {\n const fullName = useComponentFullNameFromUrl();\n const [searchParams] = useSearchParams();\n if (!fullName) return null;\n\n const parts = fullName.split('/');\n const isLast = (i: number) => i === parts.length - 1;\n\n return (\n <span className={styles.breadcrumb}>\n {parts.map((part, i) => {\n // build the namespace from all segments up to this one\n const namespace = parts.slice(0, i + 1).join('/');\n const overviewParams = new URLSearchParams(searchParams);\n overviewParams.set('aggregation', 'none');\n overviewParams.set('ns', namespace);\n\n return (\n <React.Fragment key={i}>\n {i > 0 && <span className={styles.breadcrumbSeparator}>/</span>}\n {isLast(i) ? (\n <span className={styles.breadcrumbLast}>{part}</span>\n ) : (\n <Link to={`/?${overviewParams.toString()}`} className={styles.breadcrumbLink}>\n {part}\n </Link>\n )}\n </React.Fragment>\n );\n })}\n </span>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -52,6 +52,45 @@
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
.cornerWithBreadcrumb {
|
|
56
|
+
display: flex;
|
|
57
|
+
align-items: center;
|
|
58
|
+
height: 100%;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.breadcrumb {
|
|
62
|
+
display: flex;
|
|
63
|
+
align-items: center;
|
|
64
|
+
gap: 4px;
|
|
65
|
+
padding: 0 16px 0 8px;
|
|
66
|
+
margin: 0 8px 0 0;
|
|
67
|
+
font-size: var(--bit-p-xs, 14px);
|
|
68
|
+
font-weight: 500;
|
|
69
|
+
white-space: nowrap;
|
|
70
|
+
border-right: 1px solid var(--bit-border-color-lightest, #e0e0e0);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.breadcrumbSeparator {
|
|
74
|
+
color: var(--on-background-color, var(--bit-text-color-light, #6a6a6a));
|
|
75
|
+
font-weight: 400;
|
|
76
|
+
margin: 0 2px;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.breadcrumbLink {
|
|
80
|
+
color: var(--on-background-color, var(--bit-text-color-light, #6a6a6a));
|
|
81
|
+
font-weight: 400;
|
|
82
|
+
text-decoration: none;
|
|
83
|
+
|
|
84
|
+
&:hover {
|
|
85
|
+
text-decoration: underline;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.breadcrumbLast {
|
|
90
|
+
color: var(--on-background-color, var(--bit-text-color-heavy, #2b2b2b));
|
|
91
|
+
font-weight: 500;
|
|
92
|
+
}
|
|
93
|
+
|
|
55
94
|
.workspaceWrapper {
|
|
56
95
|
display: flex;
|
|
57
96
|
flex-direction: column;
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/workspace",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.916",
|
|
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.916"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"lodash": "4.17.21",
|
|
@@ -28,22 +28,39 @@
|
|
|
28
28
|
"reset-css": "5.0.1",
|
|
29
29
|
"@teambit/component-id": "1.2.4",
|
|
30
30
|
"@teambit/harmony": "0.4.7",
|
|
31
|
+
"@teambit/legacy.extension-data": "0.0.104",
|
|
32
|
+
"@teambit/legacy.scope": "0.0.102",
|
|
31
33
|
"@teambit/component-version": "1.0.4",
|
|
34
|
+
"@teambit/legacy.consumer-component": "0.0.103",
|
|
35
|
+
"@teambit/legacy.consumer": "0.0.102",
|
|
32
36
|
"@teambit/bit-error": "0.0.404",
|
|
33
37
|
"@teambit/lane-id": "0.0.312",
|
|
38
|
+
"@teambit/legacy.bit-map": "0.0.159",
|
|
34
39
|
"@teambit/toolbox.fs.last-modified": "0.0.14",
|
|
35
40
|
"@teambit/toolbox.path.path": "0.0.16",
|
|
36
41
|
"@teambit/graph.cleargraph": "0.0.11",
|
|
42
|
+
"@teambit/logger": "0.0.1397",
|
|
43
|
+
"@teambit/cli": "0.0.1304",
|
|
37
44
|
"@teambit/component.ui.component-status-resolver": "0.0.510",
|
|
38
45
|
"@teambit/legacy.constants": "0.0.24",
|
|
39
46
|
"@teambit/harmony.modules.resolved-component": "0.0.513",
|
|
40
47
|
"@teambit/legacy.utils": "0.0.34",
|
|
48
|
+
"@teambit/scope.remotes": "0.0.102",
|
|
49
|
+
"@teambit/config-store": "0.0.184",
|
|
50
|
+
"@teambit/config": "0.0.1479",
|
|
41
51
|
"@teambit/harmony.modules.requireable-component": "0.0.513",
|
|
42
52
|
"@teambit/toolbox.modules.module-resolver": "0.0.19",
|
|
53
|
+
"@teambit/workspace.modules.node-modules-linker": "0.0.332",
|
|
54
|
+
"@teambit/global-config": "0.0.1307",
|
|
55
|
+
"@teambit/legacy.consumer-config": "0.0.102",
|
|
56
|
+
"@teambit/variants": "0.0.1572",
|
|
43
57
|
"@teambit/component-issues": "0.0.170",
|
|
58
|
+
"@teambit/component.sources": "0.0.154",
|
|
44
59
|
"@teambit/dependencies.modules.packages-excluder": "1.0.8",
|
|
45
60
|
"@teambit/harmony.modules.in-memory-cache": "0.0.28",
|
|
46
61
|
"@teambit/legacy-bit-id": "1.1.3",
|
|
62
|
+
"@teambit/legacy.component-list": "0.0.156",
|
|
63
|
+
"@teambit/legacy.scope-api": "0.0.157",
|
|
47
64
|
"@teambit/toolbox.path.is-path-inside": "0.0.508",
|
|
48
65
|
"@teambit/workspace.modules.match-pattern": "0.0.520",
|
|
49
66
|
"@teambit/component.ui.component-drawer": "0.0.478",
|
|
@@ -83,45 +100,28 @@
|
|
|
83
100
|
"@teambit/design.ui.heading": "1.0.26",
|
|
84
101
|
"@teambit/design.ui.tooltip": "0.0.382",
|
|
85
102
|
"@teambit/explorer.ui.gallery.component-grid": "0.0.496",
|
|
86
|
-
"@teambit/preview.ui.preview-placeholder": "0.0.
|
|
103
|
+
"@teambit/preview.ui.preview-placeholder": "0.0.564",
|
|
87
104
|
"@teambit/scopes.scope-id": "0.0.9",
|
|
88
105
|
"@teambit/workspace.ui.workspace-component-card": "0.0.568",
|
|
89
106
|
"@teambit/explorer.ui.component-card": "0.0.51",
|
|
90
107
|
"@teambit/workspace.ui.empty-workspace": "0.0.509",
|
|
91
|
-
"@teambit/component": "1.0.
|
|
92
|
-
"@teambit/dependency-resolver": "1.0.
|
|
93
|
-
"@teambit/envs": "1.0.
|
|
94
|
-
"@teambit/
|
|
95
|
-
"@teambit/
|
|
96
|
-
"@teambit/
|
|
97
|
-
"@teambit/
|
|
98
|
-
"@teambit/
|
|
99
|
-
"@teambit/
|
|
100
|
-
"@teambit/
|
|
101
|
-
"@teambit/
|
|
102
|
-
"@teambit/
|
|
103
|
-
"@teambit/
|
|
104
|
-
"@teambit/
|
|
105
|
-
"@teambit/
|
|
106
|
-
"@teambit/
|
|
107
|
-
"@teambit/
|
|
108
|
-
"@teambit/aspect-loader": "1.0.914",
|
|
109
|
-
"@teambit/config-store": "0.0.184",
|
|
110
|
-
"@teambit/config": "0.0.1479",
|
|
111
|
-
"@teambit/workspace.modules.node-modules-linker": "0.0.332",
|
|
112
|
-
"@teambit/graphql": "1.0.914",
|
|
113
|
-
"@teambit/bundler": "1.0.914",
|
|
114
|
-
"@teambit/global-config": "0.0.1307",
|
|
115
|
-
"@teambit/legacy.consumer-config": "0.0.102",
|
|
116
|
-
"@teambit/ui": "1.0.914",
|
|
117
|
-
"@teambit/variants": "0.0.1572",
|
|
118
|
-
"@teambit/component.sources": "0.0.154",
|
|
119
|
-
"@teambit/legacy.component-list": "0.0.156",
|
|
120
|
-
"@teambit/legacy.scope-api": "0.0.157",
|
|
121
|
-
"@teambit/command-bar": "1.0.914",
|
|
122
|
-
"@teambit/sidebar": "1.0.914",
|
|
123
|
-
"@teambit/pubsub": "1.0.914",
|
|
124
|
-
"@teambit/deprecation": "1.0.914"
|
|
108
|
+
"@teambit/component": "1.0.916",
|
|
109
|
+
"@teambit/dependency-resolver": "1.0.916",
|
|
110
|
+
"@teambit/envs": "1.0.916",
|
|
111
|
+
"@teambit/objects": "0.0.423",
|
|
112
|
+
"@teambit/scope": "1.0.916",
|
|
113
|
+
"@teambit/graph": "1.0.916",
|
|
114
|
+
"@teambit/isolator": "1.0.916",
|
|
115
|
+
"@teambit/component-tree": "1.0.916",
|
|
116
|
+
"@teambit/watcher": "1.0.916",
|
|
117
|
+
"@teambit/aspect-loader": "1.0.916",
|
|
118
|
+
"@teambit/graphql": "1.0.916",
|
|
119
|
+
"@teambit/bundler": "1.0.916",
|
|
120
|
+
"@teambit/ui": "1.0.916",
|
|
121
|
+
"@teambit/command-bar": "1.0.916",
|
|
122
|
+
"@teambit/sidebar": "1.0.916",
|
|
123
|
+
"@teambit/pubsub": "1.0.916",
|
|
124
|
+
"@teambit/deprecation": "1.0.916"
|
|
125
125
|
},
|
|
126
126
|
"devDependencies": {
|
|
127
127
|
"@types/lodash": "4.14.165",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useContext, useMemo
|
|
1
|
+
import React, { useContext, useMemo } 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';
|
|
@@ -15,7 +15,7 @@ import { H3 } from '@teambit/design.ui.heading';
|
|
|
15
15
|
import { WorkspaceContext } from '../workspace-context';
|
|
16
16
|
import { LinkPlugin } from './link-plugin';
|
|
17
17
|
import { useWorkspaceAggregation } from './use-workspace-aggregation';
|
|
18
|
-
import { useQueryParamWithDefault } from './use-query-param-with-default';
|
|
18
|
+
import { useQueryParamWithDefault, useListParamWithDefault } from './use-query-param-with-default';
|
|
19
19
|
import type { AggregationType } from './workspace-overview.types';
|
|
20
20
|
import { WorkspaceFilterPanel } from './workspace-filter-panel';
|
|
21
21
|
import styles from './workspace-overview.module.scss';
|
|
@@ -53,8 +53,8 @@ export function WorkspaceOverview() {
|
|
|
53
53
|
);
|
|
54
54
|
|
|
55
55
|
const [aggregation, setAggregation] = useQueryParamWithDefault<AggregationType>('aggregation', 'namespaces');
|
|
56
|
-
const [activeNamespaces, setActiveNamespaces] =
|
|
57
|
-
const [activeScopes, setActiveScopes] =
|
|
56
|
+
const [activeNamespaces, setActiveNamespaces] = useListParamWithDefault('ns');
|
|
57
|
+
const [activeScopes, setActiveScopes] = useListParamWithDefault('scopes');
|
|
58
58
|
|
|
59
59
|
const filters = useMemo(
|
|
60
60
|
() => ({ namespaces: activeNamespaces, scopes: activeScopes }),
|
|
@@ -52,6 +52,45 @@
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
.cornerWithBreadcrumb {
|
|
56
|
+
display: flex;
|
|
57
|
+
align-items: center;
|
|
58
|
+
height: 100%;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.breadcrumb {
|
|
62
|
+
display: flex;
|
|
63
|
+
align-items: center;
|
|
64
|
+
gap: 4px;
|
|
65
|
+
padding: 0 16px 0 8px;
|
|
66
|
+
margin: 0 8px 0 0;
|
|
67
|
+
font-size: var(--bit-p-xs, 14px);
|
|
68
|
+
font-weight: 500;
|
|
69
|
+
white-space: nowrap;
|
|
70
|
+
border-right: 1px solid var(--bit-border-color-lightest, #e0e0e0);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.breadcrumbSeparator {
|
|
74
|
+
color: var(--on-background-color, var(--bit-text-color-light, #6a6a6a));
|
|
75
|
+
font-weight: 400;
|
|
76
|
+
margin: 0 2px;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.breadcrumbLink {
|
|
80
|
+
color: var(--on-background-color, var(--bit-text-color-light, #6a6a6a));
|
|
81
|
+
font-weight: 400;
|
|
82
|
+
text-decoration: none;
|
|
83
|
+
|
|
84
|
+
&:hover {
|
|
85
|
+
text-decoration: underline;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.breadcrumbLast {
|
|
90
|
+
color: var(--on-background-color, var(--bit-text-color-heavy, #2b2b2b));
|
|
91
|
+
font-weight: 500;
|
|
92
|
+
}
|
|
93
|
+
|
|
55
94
|
.workspaceWrapper {
|
|
56
95
|
display: flex;
|
|
57
96
|
flex-direction: column;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import 'reset-css';
|
|
2
2
|
import pluralize from 'pluralize';
|
|
3
3
|
import React, { useState, useMemo, useEffect, useCallback, useLayoutEffect, useRef } from 'react';
|
|
4
|
-
import { Route } from 'react-router-dom';
|
|
4
|
+
import { Route, Link, useLocation, useSearchParams } from 'react-router-dom';
|
|
5
5
|
import type { ComponentModel } from '@teambit/component';
|
|
6
|
+
import { useIdFromLocation } from '@teambit/component';
|
|
6
7
|
import type { ComponentID } from '@teambit/component-id';
|
|
8
|
+
import { LanesModel } from '@teambit/lanes.ui.models.lanes-model';
|
|
7
9
|
import { useNotifications } from '@teambit/ui-foundation.ui.notifications.notification-context';
|
|
8
10
|
import { SlotRouter } from '@teambit/ui-foundation.ui.react-router.slot-router';
|
|
9
11
|
import type { RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';
|
|
@@ -96,11 +98,14 @@ export function Workspace({ routeSlot, menuSlot, sidebar, workspaceUI, onSidebar
|
|
|
96
98
|
<TopBar
|
|
97
99
|
className={classNames(styles.topbar, styles[themeName], isMinimal && styles.minimal)}
|
|
98
100
|
Corner={() => (
|
|
99
|
-
<
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
101
|
+
<div className={classNames(isMinimal && styles.cornerWithBreadcrumb)}>
|
|
102
|
+
<Corner
|
|
103
|
+
className={classNames((isMinimal && styles.minimalCorner) || styles.corner, styles[themeName])}
|
|
104
|
+
name={isMinimal ? '' : workspace.name}
|
|
105
|
+
icon={isMinimal ? 'https://static.bit.dev/bit-icons/house.svg' : workspace.icon}
|
|
106
|
+
/>
|
|
107
|
+
{isMinimal && <WorkspaceBreadcrumb />}
|
|
108
|
+
</div>
|
|
104
109
|
)}
|
|
105
110
|
// @ts-ignore - getting an error of "Types have separate declarations of a private property 'registerFn'." for some reason after upgrading teambit.harmony/harmony from 0.4.6 to 0.4.7
|
|
106
111
|
menu={menuSlot}
|
|
@@ -174,3 +179,55 @@ export function MinimalModeUrlBroadcasterAndListener() {
|
|
|
174
179
|
useNavigationMessageListener();
|
|
175
180
|
return null;
|
|
176
181
|
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Extracts the component fullName from the URL.
|
|
185
|
+
* For lane URLs (`/~lane/scope/lane/~component/...`), extracts the path after ~component/
|
|
186
|
+
* and passes it to useIdFromLocation. For regular URLs, useIdFromLocation handles it directly.
|
|
187
|
+
*/
|
|
188
|
+
function useComponentFullNameFromUrl(): string | undefined {
|
|
189
|
+
const { pathname } = useLocation();
|
|
190
|
+
const laneComponentUrl = useMemo(() => {
|
|
191
|
+
const marker = LanesModel.baseLaneComponentRoute.replace(/^\//, '') + '/';
|
|
192
|
+
const idx = pathname.indexOf(marker);
|
|
193
|
+
if (idx !== -1) return pathname.slice(idx + marker.length);
|
|
194
|
+
if (pathname.includes(LanesModel.lanesPrefix)) return ''; // lane page, no component
|
|
195
|
+
return undefined;
|
|
196
|
+
}, [pathname]);
|
|
197
|
+
|
|
198
|
+
return useIdFromLocation(laneComponentUrl || undefined);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
function WorkspaceBreadcrumb() {
|
|
202
|
+
const fullName = useComponentFullNameFromUrl();
|
|
203
|
+
const [searchParams] = useSearchParams();
|
|
204
|
+
if (!fullName) return null;
|
|
205
|
+
|
|
206
|
+
const parts = fullName.split('/');
|
|
207
|
+
const isLast = (i: number) => i === parts.length - 1;
|
|
208
|
+
|
|
209
|
+
return (
|
|
210
|
+
<span className={styles.breadcrumb}>
|
|
211
|
+
{parts.map((part, i) => {
|
|
212
|
+
// build the namespace from all segments up to this one
|
|
213
|
+
const namespace = parts.slice(0, i + 1).join('/');
|
|
214
|
+
const overviewParams = new URLSearchParams(searchParams);
|
|
215
|
+
overviewParams.set('aggregation', 'none');
|
|
216
|
+
overviewParams.set('ns', namespace);
|
|
217
|
+
|
|
218
|
+
return (
|
|
219
|
+
<React.Fragment key={i}>
|
|
220
|
+
{i > 0 && <span className={styles.breadcrumbSeparator}>/</span>}
|
|
221
|
+
{isLast(i) ? (
|
|
222
|
+
<span className={styles.breadcrumbLast}>{part}</span>
|
|
223
|
+
) : (
|
|
224
|
+
<Link to={`/?${overviewParams.toString()}`} className={styles.breadcrumbLink}>
|
|
225
|
+
{part}
|
|
226
|
+
</Link>
|
|
227
|
+
)}
|
|
228
|
+
</React.Fragment>
|
|
229
|
+
);
|
|
230
|
+
})}
|
|
231
|
+
</span>
|
|
232
|
+
);
|
|
233
|
+
}
|