@teambit/component 0.0.867 → 0.0.868

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.
@@ -27,7 +27,7 @@ import { GetComponentsOptions } from './get-component-opts';
27
27
  export type ComponentSearchResultSlot = SlotRegistry<ComponentResultPlugin[]>;
28
28
 
29
29
  export type ComponentUIConfig = {
30
- commandBar: boolean
30
+ commandBar: boolean;
31
31
  };
32
32
 
33
33
  export type Server = {
@@ -177,13 +177,15 @@ export class ComponentUI {
177
177
  containerSlot={this.pageItemSlot}
178
178
  onComponentChange={this.handleComponentChange}
179
179
  host={host}
180
+ path={options.path}
180
181
  useComponent={options.useComponent}
181
182
  componentIdStr={options.componentId}
183
+ useComponentFilters={options.useComponentFilters}
182
184
  />
183
185
  );
184
186
  }
185
187
 
186
- getMenu(host: string, opts: GetComponentsOptions = {}) {
188
+ getMenu(host: string, options: GetComponentsOptions = {}) {
187
189
  return (
188
190
  <ComponentMenu
189
191
  navigationSlot={this.navSlot}
@@ -191,8 +193,10 @@ export class ComponentUI {
191
193
  widgetSlot={this.widgetSlot}
192
194
  host={host}
193
195
  menuItemSlot={this.menuItemSlot}
194
- useComponent={opts.useComponent}
195
- componentIdStr={opts.componentId}
196
+ useComponent={options.useComponent}
197
+ path={options.path}
198
+ componentIdStr={options.componentId}
199
+ useComponentFilters={options.useComponentFilters}
196
200
  />
197
201
  );
198
202
  }
@@ -251,8 +255,8 @@ export class ComponentUI {
251
255
  Slot.withType<ComponentSearchResultSlot>(),
252
256
  ];
253
257
  static defaultConfig: ComponentUIConfig = {
254
- commandBar: true
255
- }
258
+ commandBar: true,
259
+ };
256
260
 
257
261
  static async provider(
258
262
  [pubsub, commandBarUI, reactRouterUI]: [PubsubUI, CommandBarUI, ReactRouterUI],
@@ -64,7 +64,7 @@ export declare class ComponentUI {
64
64
  registerPubSub(): void;
65
65
  handleComponentChange: (activeComponent?: ComponentModel | undefined) => void;
66
66
  getComponentUI(host: string, options?: GetComponentsOptions): JSX.Element;
67
- getMenu(host: string, opts?: GetComponentsOptions): JSX.Element;
67
+ getMenu(host: string, options?: GetComponentsOptions): JSX.Element;
68
68
  registerRoute(routes: RouteProps[] | RouteProps): this;
69
69
  registerNavigation(nav: LinkProps, order?: number): void;
70
70
  registerConsumeMethod(...consumeMethods: ConsumePlugin[]): void;
@@ -351,20 +351,24 @@ class ComponentUI {
351
351
  containerSlot: this.pageItemSlot,
352
352
  onComponentChange: this.handleComponentChange,
353
353
  host: host,
354
+ path: options.path,
354
355
  useComponent: options.useComponent,
355
- componentIdStr: options.componentId
356
+ componentIdStr: options.componentId,
357
+ useComponentFilters: options.useComponentFilters
356
358
  });
357
359
  }
358
360
 
359
- getMenu(host, opts = {}) {
361
+ getMenu(host, options = {}) {
360
362
  return /*#__PURE__*/_react().default.createElement(_menu().ComponentMenu, {
361
363
  navigationSlot: this.navSlot,
362
364
  consumeMethodSlot: this.consumeMethodSlot,
363
365
  widgetSlot: this.widgetSlot,
364
366
  host: host,
365
367
  menuItemSlot: this.menuItemSlot,
366
- useComponent: opts.useComponent,
367
- componentIdStr: opts.componentId
368
+ useComponent: options.useComponent,
369
+ path: options.path,
370
+ componentIdStr: options.componentId,
371
+ useComponentFilters: options.useComponentFilters
368
372
  });
369
373
  }
370
374
 
@@ -1 +1 @@
1
- {"version":3,"names":["ComponentUI","constructor","pubsub","routeSlot","navSlot","consumeMethodSlot","widgetSlot","menuItemSlot","pageItemSlot","componentSearchResultSlot","commandBarUI","reactRouterUi","packageName","activeComponent","version","id","versionString","copy","action","toString","displayName","keybinding","copyNpmId","category","title","keyChar","handler","run","comp","options","latest","Title","width","Component","ignoreVersion","name","currentLane","order","menuItems","register","items","totalPlugins","flatten","values","componentSearcher","updatePlugins","components","update","ComponentSearcher","navigate","navigateTo","isBrowser","registerPubSub","sub","PreviewAspect","be","type","ClickInsideAnIframeEvent","TYPE","event","MouseEvent","view","window","bubbles","cancelable","body","document","dispatchEvent","getComponentUI","host","handleComponentChange","useComponent","componentId","getMenu","opts","registerRoute","routes","registerNavigation","nav","props","registerConsumeMethod","consumeMethods","registerWidget","widget","provider","reactRouterUI","config","pageSlot","componentUI","aspectSection","AspectSection","registerSearchResultWidget","key","end","DeprecationIcon","commandBar","addCommand","keyBindings","addSearcher","registerMenuItem","route","navigationLink","bitMethod","PubsubAspect","CommandBarAspect","ReactRouterAspect","UIRuntime","Slot","withType","ComponentAspect","addRuntime"],"sources":["component.ui.runtime.tsx"],"sourcesContent":["import React from 'react';\nimport flatten from 'lodash.flatten';\nimport copy from 'copy-to-clipboard';\nimport type { RouteProps } from 'react-router-dom';\n\nimport type { LinkProps } from '@teambit/base-react.navigation.link';\nimport CommandBarAspect, { CommandBarUI, CommandEntry } from '@teambit/command-bar';\nimport { DeprecationIcon } from '@teambit/component.ui.deprecation-icon';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport PreviewAspect, { ClickInsideAnIframeEvent } from '@teambit/preview';\nimport PubsubAspect, { BitBaseEvent, PubsubUI } from '@teambit/pubsub';\nimport ReactRouterAspect, { ReactRouterUI } from '@teambit/react-router';\nimport { UIRuntime } from '@teambit/ui';\nimport { isBrowser } from '@teambit/ui-foundation.ui.is-browser';\nimport { MenuItem, MenuItemSlot } from '@teambit/ui-foundation.ui.main-dropdown';\nimport { NavigationSlot, RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { Import } from '@teambit/ui-foundation.ui.use-box.menu';\n\nimport { AspectSection } from './aspect.section';\nimport { ComponentAspect } from './component.aspect';\nimport { ComponentModel } from './ui';\nimport { Component, ComponentPageElement, ComponentPageSlot } from './ui/component';\nimport { ComponentResultPlugin, ComponentSearcher } from './ui/component-searcher';\nimport { ConsumeMethodSlot, ConsumePlugin, ComponentMenu, NavPlugin, OrderedNavigationSlot } from './ui/menu';\nimport { GetComponentsOptions } from './get-component-opts';\n\nexport type ComponentSearchResultSlot = SlotRegistry<ComponentResultPlugin[]>;\n\nexport type ComponentUIConfig = {\n commandBar: boolean\n};\n\nexport type Server = {\n env: string;\n url: string;\n};\n\nexport type ComponentMeta = {\n id: string;\n};\n\nexport class ComponentUI {\n readonly routePath = `/*`;\n private componentSearcher: ComponentSearcher;\n\n constructor(\n /**\n * Pubsub aspects\n */\n private pubsub: PubsubUI,\n\n private routeSlot: RouteSlot,\n\n private navSlot: OrderedNavigationSlot,\n\n private consumeMethodSlot: ConsumeMethodSlot,\n\n /**\n * slot for registering a new widget to the menu.\n */\n private widgetSlot: OrderedNavigationSlot,\n\n private menuItemSlot: MenuItemSlot,\n\n private pageItemSlot: ComponentPageSlot,\n\n private componentSearchResultSlot: ComponentSearchResultSlot,\n\n private commandBarUI: CommandBarUI,\n\n reactRouterUi: ReactRouterUI\n ) {\n this.componentSearcher = new ComponentSearcher({ navigate: reactRouterUi.navigateTo });\n if (isBrowser) this.registerPubSub();\n }\n\n /**\n * the current visible component\n */\n private activeComponent?: ComponentModel;\n\n private copyNpmId = () => {\n const packageName = this.activeComponent?.packageName;\n if (packageName) {\n const version = this.activeComponent?.id.version;\n const versionString = version ? `@${version}` : '';\n copy(`${packageName}${versionString}`);\n }\n };\n\n /**\n * key bindings used by component aspect\n */\n private keyBindings: CommandEntry[] = [\n {\n id: 'component.copyBitId', // TODO - extract to a component!\n action: () => {\n copy(this.activeComponent?.id.toString() || '');\n },\n displayName: 'Copy component ID',\n keybinding: '.',\n },\n {\n id: 'component.copyNpmId', // TODO - extract to a component!\n action: this.copyNpmId,\n displayName: 'Copy component package name',\n keybinding: ',',\n },\n ];\n\n private menuItems: MenuItem[] = [\n {\n category: 'general',\n title: 'Open command bar',\n keyChar: 'mod+k',\n handler: () => this.commandBarUI?.run('command-bar.open'),\n },\n {\n category: 'general',\n title: 'Toggle component list',\n keyChar: 'alt+s',\n handler: () => this.commandBarUI?.run('sidebar.toggle'),\n },\n {\n category: 'workflow',\n title: 'Copy component ID',\n keyChar: '.',\n handler: () => this.commandBarUI?.run('component.copyBitId'),\n },\n {\n category: 'workflow',\n title: 'Copy component package name',\n keyChar: ',',\n handler: () => this.commandBarUI?.run('component.copyNpmId'),\n },\n ];\n\n private bitMethod: ConsumePlugin = (comp, options) => {\n const version = comp.version === comp.latest ? '' : `@${comp.version}`;\n return {\n Title: <img style={{ width: '20px' }} src=\"https://static.bit.dev/brands/bit-logo-text.svg\" />,\n Component: (\n <Import\n componentId={`${comp.id.toString({ ignoreVersion: true })}${version}`}\n packageName={`${comp.packageName}${version}`}\n componentName={comp.id.name}\n showInstallMethod={!options?.currentLane}\n />\n ),\n order: 0,\n };\n };\n\n registerPubSub() {\n this.pubsub.sub(PreviewAspect.id, (be: BitBaseEvent<any>) => {\n if (be.type === ClickInsideAnIframeEvent.TYPE) {\n const event = new MouseEvent('mousedown', {\n view: window,\n bubbles: true,\n cancelable: true,\n });\n\n const body = document.body;\n body?.dispatchEvent(event);\n }\n });\n }\n\n handleComponentChange = (activeComponent?: ComponentModel) => {\n this.activeComponent = activeComponent;\n };\n\n getComponentUI(host: string, options: GetComponentsOptions = {}) {\n return (\n <Component\n routeSlot={this.routeSlot}\n containerSlot={this.pageItemSlot}\n onComponentChange={this.handleComponentChange}\n host={host}\n useComponent={options.useComponent}\n componentIdStr={options.componentId}\n />\n );\n }\n\n getMenu(host: string, opts: GetComponentsOptions = {}) {\n return (\n <ComponentMenu\n navigationSlot={this.navSlot}\n consumeMethodSlot={this.consumeMethodSlot}\n widgetSlot={this.widgetSlot}\n host={host}\n menuItemSlot={this.menuItemSlot}\n useComponent={opts.useComponent}\n componentIdStr={opts.componentId}\n />\n );\n }\n\n registerRoute(routes: RouteProps[] | RouteProps) {\n this.routeSlot.register(routes);\n return this;\n }\n\n registerNavigation(nav: LinkProps, order?: number) {\n this.navSlot.register({\n props: nav,\n order,\n });\n }\n\n registerConsumeMethod(...consumeMethods: ConsumePlugin[]) {\n this.consumeMethodSlot.register(consumeMethods);\n }\n\n registerWidget(widget: LinkProps, order?: number) {\n this.widgetSlot.register({ props: widget, order });\n }\n\n registerMenuItem = (menuItems: MenuItem[]) => {\n this.menuItemSlot.register(menuItems);\n };\n\n registerPageItem = (...items: ComponentPageElement[]) => {\n this.pageItemSlot.register(items);\n };\n\n /** register widgets to the components listed in the command bar */\n registerSearchResultWidget = (...items: ComponentResultPlugin[]) => {\n this.componentSearchResultSlot.register(items);\n const totalPlugins = flatten(this.componentSearchResultSlot.values());\n\n this.componentSearcher.updatePlugins(totalPlugins);\n };\n\n updateComponents = (components: ComponentModel[]) => {\n this.componentSearcher.update(components || []);\n };\n\n static dependencies = [PubsubAspect, CommandBarAspect, ReactRouterAspect];\n\n static runtime = UIRuntime;\n\n static slots = [\n Slot.withType<RouteProps>(),\n Slot.withType<NavPlugin>(),\n Slot.withType<NavigationSlot>(),\n Slot.withType<ConsumeMethodSlot>(),\n Slot.withType<MenuItemSlot>(),\n Slot.withType<ComponentPageSlot>(),\n Slot.withType<ComponentSearchResultSlot>(),\n ];\n static defaultConfig: ComponentUIConfig = {\n commandBar: true\n }\n\n static async provider(\n [pubsub, commandBarUI, reactRouterUI]: [PubsubUI, CommandBarUI, ReactRouterUI],\n config: ComponentUIConfig,\n [routeSlot, navSlot, consumeMethodSlot, widgetSlot, menuItemSlot, pageSlot, componentSearchResultSlot]: [\n RouteSlot,\n OrderedNavigationSlot,\n ConsumeMethodSlot,\n OrderedNavigationSlot,\n MenuItemSlot,\n ComponentPageSlot,\n ComponentSearchResultSlot\n ]\n ) {\n // TODO: refactor ComponentHost to a separate extension (including sidebar, host, graphql, etc.)\n // TODO: add contextual hook for ComponentHost @uri/@oded\n const componentUI = new ComponentUI(\n pubsub,\n routeSlot,\n navSlot,\n consumeMethodSlot,\n widgetSlot,\n menuItemSlot,\n pageSlot,\n componentSearchResultSlot,\n commandBarUI,\n reactRouterUI\n );\n const aspectSection = new AspectSection();\n // @ts-ignore\n componentUI.registerSearchResultWidget({ key: 'deprecation', end: DeprecationIcon });\n\n if (componentUI.commandBarUI && config.commandBar) {\n componentUI.commandBarUI.addCommand(...componentUI.keyBindings);\n commandBarUI.addSearcher(componentUI.componentSearcher);\n }\n\n componentUI.registerMenuItem(componentUI.menuItems);\n componentUI.registerRoute(aspectSection.route);\n componentUI.registerWidget(aspectSection.navigationLink, aspectSection.order);\n componentUI.registerConsumeMethod(componentUI.bitMethod);\n return componentUI;\n }\n}\n\nexport default ComponentUI;\n\nComponentAspect.addRuntime(ComponentUI);\n"],"mappings":"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"}
1
+ {"version":3,"names":["ComponentUI","constructor","pubsub","routeSlot","navSlot","consumeMethodSlot","widgetSlot","menuItemSlot","pageItemSlot","componentSearchResultSlot","commandBarUI","reactRouterUi","packageName","activeComponent","version","id","versionString","copy","action","toString","displayName","keybinding","copyNpmId","category","title","keyChar","handler","run","comp","options","latest","Title","width","Component","ignoreVersion","name","currentLane","order","menuItems","register","items","totalPlugins","flatten","values","componentSearcher","updatePlugins","components","update","ComponentSearcher","navigate","navigateTo","isBrowser","registerPubSub","sub","PreviewAspect","be","type","ClickInsideAnIframeEvent","TYPE","event","MouseEvent","view","window","bubbles","cancelable","body","document","dispatchEvent","getComponentUI","host","handleComponentChange","path","useComponent","componentId","useComponentFilters","getMenu","registerRoute","routes","registerNavigation","nav","props","registerConsumeMethod","consumeMethods","registerWidget","widget","provider","reactRouterUI","config","pageSlot","componentUI","aspectSection","AspectSection","registerSearchResultWidget","key","end","DeprecationIcon","commandBar","addCommand","keyBindings","addSearcher","registerMenuItem","route","navigationLink","bitMethod","PubsubAspect","CommandBarAspect","ReactRouterAspect","UIRuntime","Slot","withType","ComponentAspect","addRuntime"],"sources":["component.ui.runtime.tsx"],"sourcesContent":["import React from 'react';\nimport flatten from 'lodash.flatten';\nimport copy from 'copy-to-clipboard';\nimport type { RouteProps } from 'react-router-dom';\n\nimport type { LinkProps } from '@teambit/base-react.navigation.link';\nimport CommandBarAspect, { CommandBarUI, CommandEntry } from '@teambit/command-bar';\nimport { DeprecationIcon } from '@teambit/component.ui.deprecation-icon';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport PreviewAspect, { ClickInsideAnIframeEvent } from '@teambit/preview';\nimport PubsubAspect, { BitBaseEvent, PubsubUI } from '@teambit/pubsub';\nimport ReactRouterAspect, { ReactRouterUI } from '@teambit/react-router';\nimport { UIRuntime } from '@teambit/ui';\nimport { isBrowser } from '@teambit/ui-foundation.ui.is-browser';\nimport { MenuItem, MenuItemSlot } from '@teambit/ui-foundation.ui.main-dropdown';\nimport { NavigationSlot, RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { Import } from '@teambit/ui-foundation.ui.use-box.menu';\n\nimport { AspectSection } from './aspect.section';\nimport { ComponentAspect } from './component.aspect';\nimport { ComponentModel } from './ui';\nimport { Component, ComponentPageElement, ComponentPageSlot } from './ui/component';\nimport { ComponentResultPlugin, ComponentSearcher } from './ui/component-searcher';\nimport { ConsumeMethodSlot, ConsumePlugin, ComponentMenu, NavPlugin, OrderedNavigationSlot } from './ui/menu';\nimport { GetComponentsOptions } from './get-component-opts';\n\nexport type ComponentSearchResultSlot = SlotRegistry<ComponentResultPlugin[]>;\n\nexport type ComponentUIConfig = {\n commandBar: boolean;\n};\n\nexport type Server = {\n env: string;\n url: string;\n};\n\nexport type ComponentMeta = {\n id: string;\n};\n\nexport class ComponentUI {\n readonly routePath = `/*`;\n private componentSearcher: ComponentSearcher;\n\n constructor(\n /**\n * Pubsub aspects\n */\n private pubsub: PubsubUI,\n\n private routeSlot: RouteSlot,\n\n private navSlot: OrderedNavigationSlot,\n\n private consumeMethodSlot: ConsumeMethodSlot,\n\n /**\n * slot for registering a new widget to the menu.\n */\n private widgetSlot: OrderedNavigationSlot,\n\n private menuItemSlot: MenuItemSlot,\n\n private pageItemSlot: ComponentPageSlot,\n\n private componentSearchResultSlot: ComponentSearchResultSlot,\n\n private commandBarUI: CommandBarUI,\n\n reactRouterUi: ReactRouterUI\n ) {\n this.componentSearcher = new ComponentSearcher({ navigate: reactRouterUi.navigateTo });\n if (isBrowser) this.registerPubSub();\n }\n\n /**\n * the current visible component\n */\n private activeComponent?: ComponentModel;\n\n private copyNpmId = () => {\n const packageName = this.activeComponent?.packageName;\n if (packageName) {\n const version = this.activeComponent?.id.version;\n const versionString = version ? `@${version}` : '';\n copy(`${packageName}${versionString}`);\n }\n };\n\n /**\n * key bindings used by component aspect\n */\n private keyBindings: CommandEntry[] = [\n {\n id: 'component.copyBitId', // TODO - extract to a component!\n action: () => {\n copy(this.activeComponent?.id.toString() || '');\n },\n displayName: 'Copy component ID',\n keybinding: '.',\n },\n {\n id: 'component.copyNpmId', // TODO - extract to a component!\n action: this.copyNpmId,\n displayName: 'Copy component package name',\n keybinding: ',',\n },\n ];\n\n private menuItems: MenuItem[] = [\n {\n category: 'general',\n title: 'Open command bar',\n keyChar: 'mod+k',\n handler: () => this.commandBarUI?.run('command-bar.open'),\n },\n {\n category: 'general',\n title: 'Toggle component list',\n keyChar: 'alt+s',\n handler: () => this.commandBarUI?.run('sidebar.toggle'),\n },\n {\n category: 'workflow',\n title: 'Copy component ID',\n keyChar: '.',\n handler: () => this.commandBarUI?.run('component.copyBitId'),\n },\n {\n category: 'workflow',\n title: 'Copy component package name',\n keyChar: ',',\n handler: () => this.commandBarUI?.run('component.copyNpmId'),\n },\n ];\n\n private bitMethod: ConsumePlugin = (comp, options) => {\n const version = comp.version === comp.latest ? '' : `@${comp.version}`;\n return {\n Title: <img style={{ width: '20px' }} src=\"https://static.bit.dev/brands/bit-logo-text.svg\" />,\n Component: (\n <Import\n componentId={`${comp.id.toString({ ignoreVersion: true })}${version}`}\n packageName={`${comp.packageName}${version}`}\n componentName={comp.id.name}\n showInstallMethod={!options?.currentLane}\n />\n ),\n order: 0,\n };\n };\n\n registerPubSub() {\n this.pubsub.sub(PreviewAspect.id, (be: BitBaseEvent<any>) => {\n if (be.type === ClickInsideAnIframeEvent.TYPE) {\n const event = new MouseEvent('mousedown', {\n view: window,\n bubbles: true,\n cancelable: true,\n });\n\n const body = document.body;\n body?.dispatchEvent(event);\n }\n });\n }\n\n handleComponentChange = (activeComponent?: ComponentModel) => {\n this.activeComponent = activeComponent;\n };\n\n getComponentUI(host: string, options: GetComponentsOptions = {}) {\n return (\n <Component\n routeSlot={this.routeSlot}\n containerSlot={this.pageItemSlot}\n onComponentChange={this.handleComponentChange}\n host={host}\n path={options.path}\n useComponent={options.useComponent}\n componentIdStr={options.componentId}\n useComponentFilters={options.useComponentFilters}\n />\n );\n }\n\n getMenu(host: string, options: GetComponentsOptions = {}) {\n return (\n <ComponentMenu\n navigationSlot={this.navSlot}\n consumeMethodSlot={this.consumeMethodSlot}\n widgetSlot={this.widgetSlot}\n host={host}\n menuItemSlot={this.menuItemSlot}\n useComponent={options.useComponent}\n path={options.path}\n componentIdStr={options.componentId}\n useComponentFilters={options.useComponentFilters}\n />\n );\n }\n\n registerRoute(routes: RouteProps[] | RouteProps) {\n this.routeSlot.register(routes);\n return this;\n }\n\n registerNavigation(nav: LinkProps, order?: number) {\n this.navSlot.register({\n props: nav,\n order,\n });\n }\n\n registerConsumeMethod(...consumeMethods: ConsumePlugin[]) {\n this.consumeMethodSlot.register(consumeMethods);\n }\n\n registerWidget(widget: LinkProps, order?: number) {\n this.widgetSlot.register({ props: widget, order });\n }\n\n registerMenuItem = (menuItems: MenuItem[]) => {\n this.menuItemSlot.register(menuItems);\n };\n\n registerPageItem = (...items: ComponentPageElement[]) => {\n this.pageItemSlot.register(items);\n };\n\n /** register widgets to the components listed in the command bar */\n registerSearchResultWidget = (...items: ComponentResultPlugin[]) => {\n this.componentSearchResultSlot.register(items);\n const totalPlugins = flatten(this.componentSearchResultSlot.values());\n\n this.componentSearcher.updatePlugins(totalPlugins);\n };\n\n updateComponents = (components: ComponentModel[]) => {\n this.componentSearcher.update(components || []);\n };\n\n static dependencies = [PubsubAspect, CommandBarAspect, ReactRouterAspect];\n\n static runtime = UIRuntime;\n\n static slots = [\n Slot.withType<RouteProps>(),\n Slot.withType<NavPlugin>(),\n Slot.withType<NavigationSlot>(),\n Slot.withType<ConsumeMethodSlot>(),\n Slot.withType<MenuItemSlot>(),\n Slot.withType<ComponentPageSlot>(),\n Slot.withType<ComponentSearchResultSlot>(),\n ];\n static defaultConfig: ComponentUIConfig = {\n commandBar: true,\n };\n\n static async provider(\n [pubsub, commandBarUI, reactRouterUI]: [PubsubUI, CommandBarUI, ReactRouterUI],\n config: ComponentUIConfig,\n [routeSlot, navSlot, consumeMethodSlot, widgetSlot, menuItemSlot, pageSlot, componentSearchResultSlot]: [\n RouteSlot,\n OrderedNavigationSlot,\n ConsumeMethodSlot,\n OrderedNavigationSlot,\n MenuItemSlot,\n ComponentPageSlot,\n ComponentSearchResultSlot\n ]\n ) {\n // TODO: refactor ComponentHost to a separate extension (including sidebar, host, graphql, etc.)\n // TODO: add contextual hook for ComponentHost @uri/@oded\n const componentUI = new ComponentUI(\n pubsub,\n routeSlot,\n navSlot,\n consumeMethodSlot,\n widgetSlot,\n menuItemSlot,\n pageSlot,\n componentSearchResultSlot,\n commandBarUI,\n reactRouterUI\n );\n const aspectSection = new AspectSection();\n // @ts-ignore\n componentUI.registerSearchResultWidget({ key: 'deprecation', end: DeprecationIcon });\n\n if (componentUI.commandBarUI && config.commandBar) {\n componentUI.commandBarUI.addCommand(...componentUI.keyBindings);\n commandBarUI.addSearcher(componentUI.componentSearcher);\n }\n\n componentUI.registerMenuItem(componentUI.menuItems);\n componentUI.registerRoute(aspectSection.route);\n componentUI.registerWidget(aspectSection.navigationLink, aspectSection.order);\n componentUI.registerConsumeMethod(componentUI.bitMethod);\n return componentUI;\n }\n}\n\nexport default ComponentUI;\n\nComponentAspect.addRuntime(ComponentUI);\n"],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  import type { UseComponentType } from './ui/use-component';
2
+ import { Filters } from './ui/use-component-query';
2
3
  export declare type GetComponentsOptions = {
3
4
  useComponent?: UseComponentType;
4
- componentId?: string;
5
+ componentId?: string | (() => string | undefined);
6
+ useComponentFilters?: () => Filters;
7
+ path?: string;
5
8
  };
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["get-component-opts.ts"],"sourcesContent":["import type { UseComponentType } from './ui/use-component';\n\nexport type GetComponentsOptions = {\n useComponent?: UseComponentType;\n componentId?: string;\n};\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["get-component-opts.ts"],"sourcesContent":["import type { UseComponentType } from './ui/use-component';\nimport { Filters } from './ui/use-component-query';\n\nexport type GetComponentsOptions = {\n useComponent?: UseComponentType;\n componentId?: string | (() => string | undefined);\n useComponentFilters?: () => Filters;\n path?: string;\n};\n"],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import { ComponentAspect } from './component.aspect';
2
+ export type { GetComponentsOptions } from './get-component-opts';
3
+ export type { UseComponentType } from './ui/use-component';
2
4
  export { useComponentHost } from './host';
3
5
  export { Component, InvalidComponent } from './component';
4
6
  export { ComponentID } from '@teambit/component-id';
@@ -28,6 +30,6 @@ export { ComponentModel, ComponentModelProps } from './ui/component-model';
28
30
  export { TopBarNav } from './ui/top-bar-nav';
29
31
  export type { ShowFragment, ShowRow, ShowJSONRow } from './show';
30
32
  export { default as Config } from './config';
31
- export { useComponent } from './ui';
33
+ export { useComponent, useIdFromLocation } from './ui';
32
34
  export { ComponentAspect };
33
35
  export default ComponentAspect;
package/dist/index.js CHANGED
@@ -204,6 +204,12 @@ Object.defineProperty(exports, "useComponentHost", {
204
204
  return _host().useComponentHost;
205
205
  }
206
206
  });
207
+ Object.defineProperty(exports, "useIdFromLocation", {
208
+ enumerable: true,
209
+ get: function () {
210
+ return _ui().useIdFromLocation;
211
+ }
212
+ });
207
213
 
208
214
  function _component() {
209
215
  const data = require("./component.aspect");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["ComponentAspect"],"sources":["index.ts"],"sourcesContent":["import { ComponentAspect } from './component.aspect';\n\nexport { useComponentHost } from './host';\nexport { Component, InvalidComponent } from './component';\nexport { ComponentID } from '@teambit/component-id';\nexport { default as ComponentFS } from './component-fs';\nexport type { default as ComponentConfig } from './config';\nexport type { ComponentFactory, ResolveAspectsOptions } from './component-factory';\nexport type { AspectList } from './aspect-list';\nexport { AspectEntry, AspectData, ResolveComponentIdFunc } from './aspect-entry';\n// TODO: check why it's not working when using the index in snap dir like this:\n// export { Snap, Author } from './snap';\nexport { Snap, SnapProps } from './snap/snap';\nexport type { Author } from './snap/author';\n// TODO: check why it's not working when using the index in tag dir like this:\n// export { Tag } from './tag';\nexport { Tag, TagProps } from './tag/tag';\nexport type { IComponent } from './component-interface';\nexport { State } from './state';\nexport type { Hash } from './hash';\nexport { TagMap } from './tag-map';\nexport { ComponentMap } from './component-map';\nexport type { ComponentMain } from './component.main.runtime';\nexport type { ComponentUI } from './component.ui.runtime';\nexport { Section } from './section';\nexport { ComponentContext, ComponentDescriptorContext, useComponentDescriptor } from './ui/context/component-context';\nexport type { ComponentProviderProps, ComponentDescriptorProviderProps } from './ui/context';\nexport { ComponentProvider, ComponentDescriptorProvider } from './ui/context';\nexport { componentFields, componentIdFields, componentOverviewFields } from './ui';\nexport { ConsumePlugin } from './ui/menu';\nexport { RegisteredComponentRoute, ComponentUrlParams } from './component.route';\nexport { ComponentModel, ComponentModelProps } from './ui/component-model';\nexport { TopBarNav } from './ui/top-bar-nav';\nexport type { ShowFragment, ShowRow, ShowJSONRow } from './show';\nexport { default as Config } from './config';\nexport { useComponent } from './ui';\n\n// export { AspectList } from './aspect-list';\n// export { AspectEntry } from './aspect-entry';\nexport { ComponentAspect };\nexport default ComponentAspect;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAIA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAIA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAxBA;AACA;AAGA;AACA;AAsBA;AACA;eAEeA,4B"}
1
+ {"version":3,"names":["ComponentAspect"],"sources":["index.ts"],"sourcesContent":["import { ComponentAspect } from './component.aspect';\n\nexport type { GetComponentsOptions } from './get-component-opts';\nexport type { UseComponentType } from './ui/use-component';\nexport { useComponentHost } from './host';\nexport { Component, InvalidComponent } from './component';\nexport { ComponentID } from '@teambit/component-id';\nexport { default as ComponentFS } from './component-fs';\nexport type { default as ComponentConfig } from './config';\nexport type { ComponentFactory, ResolveAspectsOptions } from './component-factory';\nexport type { AspectList } from './aspect-list';\nexport { AspectEntry, AspectData, ResolveComponentIdFunc } from './aspect-entry';\n// TODO: check why it's not working when using the index in snap dir like this:\n// export { Snap, Author } from './snap';\nexport { Snap, SnapProps } from './snap/snap';\nexport type { Author } from './snap/author';\n// TODO: check why it's not working when using the index in tag dir like this:\n// export { Tag } from './tag';\nexport { Tag, TagProps } from './tag/tag';\nexport type { IComponent } from './component-interface';\nexport { State } from './state';\nexport type { Hash } from './hash';\nexport { TagMap } from './tag-map';\nexport { ComponentMap } from './component-map';\nexport type { ComponentMain } from './component.main.runtime';\nexport type { ComponentUI } from './component.ui.runtime';\nexport { Section } from './section';\nexport { ComponentContext, ComponentDescriptorContext, useComponentDescriptor } from './ui/context/component-context';\nexport type { ComponentProviderProps, ComponentDescriptorProviderProps } from './ui/context';\nexport { ComponentProvider, ComponentDescriptorProvider } from './ui/context';\nexport { componentFields, componentIdFields, componentOverviewFields } from './ui';\nexport { ConsumePlugin } from './ui/menu';\nexport { RegisteredComponentRoute, ComponentUrlParams } from './component.route';\nexport { ComponentModel, ComponentModelProps } from './ui/component-model';\nexport { TopBarNav } from './ui/top-bar-nav';\nexport type { ShowFragment, ShowRow, ShowJSONRow } from './show';\nexport { default as Config } from './config';\nexport { useComponent, useIdFromLocation } from './ui';\n\n// export { AspectList } from './aspect-list';\n// export { AspectEntry } from './aspect-entry';\nexport { ComponentAspect };\nexport default ComponentAspect;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAIA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAIA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAIA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAxBA;AACA;AAGA;AACA;AAsBA;AACA;eAEeA,4B"}
@@ -3,6 +3,8 @@ import { RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';
3
3
  import { SlotRegistry } from '@teambit/harmony';
4
4
  import { UseComponentType } from './use-component';
5
5
  import { ComponentModel } from './component-model';
6
+ import { ComponentID } from '..';
7
+ import { Filters } from './use-component-query';
6
8
  export declare type ComponentPageSlot = SlotRegistry<ComponentPageElement[]>;
7
9
  export declare type ComponentPageElement = {
8
10
  type: 'before' | 'after';
@@ -14,9 +16,11 @@ export declare type ComponentProps = {
14
16
  host: string;
15
17
  onComponentChange?: (activeComponent?: ComponentModel) => void;
16
18
  useComponent?: UseComponentType;
17
- componentIdStr?: string;
19
+ useComponentFilters?: (componentId?: ComponentID) => Filters;
20
+ path?: string;
21
+ componentIdStr?: string | (() => string | undefined);
18
22
  };
19
23
  /**
20
24
  * main UI component of the Component extension.
21
25
  */
22
- export declare function Component({ routeSlot, containerSlot, host, onComponentChange, componentIdStr, useComponent, }: ComponentProps): JSX.Element;
26
+ export declare function Component({ routeSlot, containerSlot, host, onComponentChange, componentIdStr, useComponent, path, useComponentFilters, }: ComponentProps): JSX.Element;
@@ -39,10 +39,10 @@ function _uiFoundationUiReactRouter() {
39
39
  return data;
40
40
  }
41
41
 
42
- function _lanesHooks() {
43
- const data = require("@teambit/lanes.hooks.use-lanes");
42
+ function _lodash2() {
43
+ const data = require("lodash");
44
44
 
45
- _lanesHooks = function () {
45
+ _lodash2 = function () {
46
46
  return data;
47
47
  };
48
48
 
@@ -103,37 +103,40 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
103
103
 
104
104
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
105
105
 
106
+ function getComponentIdStr(componentIdStr) {
107
+ if ((0, _lodash2().isFunction)(componentIdStr)) return componentIdStr();
108
+ return componentIdStr;
109
+ }
106
110
  /**
107
111
  * main UI component of the Component extension.
108
112
  */
113
+
114
+
109
115
  function Component({
110
116
  routeSlot,
111
117
  containerSlot,
112
118
  host,
113
119
  onComponentChange,
114
120
  componentIdStr,
115
- useComponent
121
+ useComponent,
122
+ path,
123
+ useComponentFilters
116
124
  }) {
117
125
  const idFromLocation = (0, _useComponentFromLocation().useIdFromLocation)();
118
- const componentId = componentIdStr ? _().ComponentID.fromString(componentIdStr) : undefined;
119
- const fullName = (componentId === null || componentId === void 0 ? void 0 : componentId.fullName) || idFromLocation;
120
- const {
121
- lanesModel
122
- } = (0, _lanesHooks().useLanes)();
123
- const laneComponent = fullName ? lanesModel === null || lanesModel === void 0 ? void 0 : lanesModel.resolveComponent(fullName) : undefined;
126
+
127
+ const _componentIdStr = getComponentIdStr(componentIdStr);
128
+
129
+ const componentId = _componentIdStr ? _().ComponentID.fromString(_componentIdStr) : undefined;
130
+ const resolvedComponentIdStr = path || (componentId === null || componentId === void 0 ? void 0 : componentId.toStringWithoutVersion()) || idFromLocation;
124
131
  const useComponentOptions = {
125
- logFilters: laneComponent && {
126
- log: {
127
- logHead: laneComponent.version
128
- }
129
- },
132
+ logFilters: useComponentFilters === null || useComponentFilters === void 0 ? void 0 : useComponentFilters(componentId),
130
133
  customUseComponent: useComponent
131
134
  };
132
135
  const {
133
136
  component,
134
137
  componentDescriptor,
135
138
  error
136
- } = (0, _useComponent().useComponent)(host, (laneComponent === null || laneComponent === void 0 ? void 0 : laneComponent.id.toString()) || (componentId === null || componentId === void 0 ? void 0 : componentId.toString()) || idFromLocation, useComponentOptions); // trigger onComponentChange when component changes
139
+ } = (0, _useComponent().useComponent)(host, (componentId === null || componentId === void 0 ? void 0 : componentId.toString()) || idFromLocation, useComponentOptions); // trigger onComponentChange when component changes
137
140
 
138
141
  (0, _react().useEffect)(() => onComponentChange === null || onComponentChange === void 0 ? void 0 : onComponentChange(component), [component]); // cleanup when unmounting component
139
142
 
@@ -150,7 +153,7 @@ function Component({
150
153
  }, before, /*#__PURE__*/_react().default.createElement("div", {
151
154
  className: _componentModule().default.container
152
155
  }, routeSlot && /*#__PURE__*/_react().default.createElement(_uiFoundationUiReactRouter().SlotRouter, {
153
- parentPath: `${fullName}/*`,
156
+ parentPath: `${resolvedComponentIdStr}/*`,
154
157
  slot: routeSlot
155
158
  })), after));
156
159
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Component","routeSlot","containerSlot","host","onComponentChange","componentIdStr","useComponent","idFromLocation","useIdFromLocation","componentId","ComponentID","fromString","undefined","fullName","lanesModel","useLanes","laneComponent","resolveComponent","useComponentOptions","logFilters","log","logHead","version","customUseComponent","component","componentDescriptor","error","useComponentQuery","id","toString","useEffect","pageItems","useMemo","flatten","values","before","filter","x","type","map","content","after","renderError","styles","container"],"sources":["component.tsx"],"sourcesContent":["import React, { useEffect, ReactNode, useMemo } from 'react';\nimport flatten from 'lodash.flatten';\nimport { RouteSlot, SlotRouter } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { SlotRegistry } from '@teambit/harmony';\nimport { useLanes } from '@teambit/lanes.hooks.use-lanes';\nimport styles from './component.module.scss';\nimport { ComponentProvider, ComponentDescriptorProvider } from './context';\nimport { useComponent as useComponentQuery, UseComponentType } from './use-component';\nimport { ComponentModel } from './component-model';\nimport { useIdFromLocation } from './use-component-from-location';\nimport { ComponentID } from '..';\n\nexport type ComponentPageSlot = SlotRegistry<ComponentPageElement[]>;\nexport type ComponentPageElement = {\n type: 'before' | 'after';\n content: ReactNode;\n};\n\nexport type ComponentProps = {\n containerSlot?: ComponentPageSlot;\n routeSlot: RouteSlot;\n host: string;\n onComponentChange?: (activeComponent?: ComponentModel) => void;\n useComponent?: UseComponentType;\n componentIdStr?: string;\n};\n\n/**\n * main UI component of the Component extension.\n */\nexport function Component({\n routeSlot,\n containerSlot,\n host,\n onComponentChange,\n componentIdStr,\n useComponent,\n}: ComponentProps) {\n const idFromLocation = useIdFromLocation();\n const componentId = componentIdStr ? ComponentID.fromString(componentIdStr) : undefined;\n const fullName = componentId?.fullName || idFromLocation;\n const { lanesModel } = useLanes();\n const laneComponent = fullName ? lanesModel?.resolveComponent(fullName) : undefined;\n const useComponentOptions = {\n logFilters: laneComponent && { log: { logHead: laneComponent.version } },\n customUseComponent: useComponent,\n };\n\n const { component, componentDescriptor, error } = useComponentQuery(\n host,\n laneComponent?.id.toString() || componentId?.toString() || idFromLocation,\n useComponentOptions\n );\n // trigger onComponentChange when component changes\n useEffect(() => onComponentChange?.(component), [component]);\n // cleanup when unmounting component\n useEffect(() => () => onComponentChange?.(undefined), []);\n\n const pageItems = useMemo(() => flatten(containerSlot?.values()), [containerSlot]);\n const before = useMemo(() => pageItems.filter((x) => x.type === 'before').map((x) => x.content), [pageItems]);\n const after = useMemo(() => pageItems.filter((x) => x.type === 'after').map((x) => x.content), [pageItems]);\n\n if (error) return error.renderError();\n if (!component) return <div></div>;\n\n return (\n <ComponentDescriptorProvider componentDescriptor={componentDescriptor}>\n <ComponentProvider component={component}>\n {before}\n <div className={styles.container}>\n {routeSlot && <SlotRouter parentPath={`${fullName}/*`} slot={routeSlot} />}\n </div>\n {after}\n </ComponentProvider>\n </ComponentDescriptorProvider>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["getComponentIdStr","componentIdStr","isFunction","Component","routeSlot","containerSlot","host","onComponentChange","useComponent","path","useComponentFilters","idFromLocation","useIdFromLocation","_componentIdStr","componentId","ComponentID","fromString","undefined","resolvedComponentIdStr","toStringWithoutVersion","useComponentOptions","logFilters","customUseComponent","component","componentDescriptor","error","useComponentQuery","toString","useEffect","pageItems","useMemo","flatten","values","before","filter","x","type","map","content","after","renderError","styles","container"],"sources":["component.tsx"],"sourcesContent":["import React, { useEffect, ReactNode, useMemo } from 'react';\nimport flatten from 'lodash.flatten';\nimport { RouteSlot, SlotRouter } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { SlotRegistry } from '@teambit/harmony';\nimport { isFunction } from 'lodash';\nimport styles from './component.module.scss';\nimport { ComponentProvider, ComponentDescriptorProvider } from './context';\nimport { useComponent as useComponentQuery, UseComponentType } from './use-component';\nimport { ComponentModel } from './component-model';\nimport { useIdFromLocation } from './use-component-from-location';\nimport { ComponentID } from '..';\nimport { Filters } from './use-component-query';\n\nexport type ComponentPageSlot = SlotRegistry<ComponentPageElement[]>;\nexport type ComponentPageElement = {\n type: 'before' | 'after';\n content: ReactNode;\n};\n\nexport type ComponentProps = {\n containerSlot?: ComponentPageSlot;\n routeSlot: RouteSlot;\n host: string;\n onComponentChange?: (activeComponent?: ComponentModel) => void;\n useComponent?: UseComponentType;\n useComponentFilters?: (componentId?: ComponentID) => Filters;\n path?: string;\n componentIdStr?: string | (() => string | undefined);\n};\n\nfunction getComponentIdStr(componentIdStr?: string | (() => string | undefined)): string | undefined {\n if (isFunction(componentIdStr)) return componentIdStr();\n return componentIdStr;\n}\n\n/**\n * main UI component of the Component extension.\n */\nexport function Component({\n routeSlot,\n containerSlot,\n host,\n onComponentChange,\n componentIdStr,\n useComponent,\n path,\n useComponentFilters,\n}: ComponentProps) {\n const idFromLocation = useIdFromLocation();\n const _componentIdStr = getComponentIdStr(componentIdStr);\n const componentId = _componentIdStr ? ComponentID.fromString(_componentIdStr) : undefined;\n const resolvedComponentIdStr = path || componentId?.toStringWithoutVersion() || idFromLocation;\n const useComponentOptions = {\n logFilters: useComponentFilters?.(componentId),\n customUseComponent: useComponent,\n };\n\n const { component, componentDescriptor, error } = useComponentQuery(\n host,\n componentId?.toString() || idFromLocation,\n useComponentOptions\n );\n // trigger onComponentChange when component changes\n useEffect(() => onComponentChange?.(component), [component]);\n // cleanup when unmounting component\n useEffect(() => () => onComponentChange?.(undefined), []);\n\n const pageItems = useMemo(() => flatten(containerSlot?.values()), [containerSlot]);\n const before = useMemo(() => pageItems.filter((x) => x.type === 'before').map((x) => x.content), [pageItems]);\n const after = useMemo(() => pageItems.filter((x) => x.type === 'after').map((x) => x.content), [pageItems]);\n\n if (error) return error.renderError();\n if (!component) return <div></div>;\n\n return (\n <ComponentDescriptorProvider componentDescriptor={componentDescriptor}>\n <ComponentProvider component={component}>\n {before}\n <div className={styles.container}>\n {routeSlot && <SlotRouter parentPath={`${resolvedComponentIdStr}/*`} slot={routeSlot} />}\n </div>\n {after}\n </ComponentProvider>\n </ComponentDescriptorProvider>\n );\n}\n"],"mappings":"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"}
@@ -2,6 +2,8 @@
2
2
  import { MenuItemSlot } from '@teambit/ui-foundation.ui.main-dropdown';
3
3
  import { UseComponentType } from '../use-component';
4
4
  import { OrderedNavigationSlot, ConsumeMethodSlot } from './nav-plugin';
5
+ import { ComponentID } from '../..';
6
+ import { Filters } from '../use-component-query';
5
7
  export declare type MenuProps = {
6
8
  className?: string;
7
9
  /**
@@ -18,10 +20,12 @@ export declare type MenuProps = {
18
20
  */
19
21
  menuItemSlot: MenuItemSlot;
20
22
  consumeMethodSlot: ConsumeMethodSlot;
21
- componentIdStr?: string;
23
+ componentIdStr?: string | (() => string | undefined);
22
24
  useComponent?: UseComponentType;
25
+ path?: string;
26
+ useComponentFilters?: (componentId?: ComponentID) => Filters;
23
27
  };
24
28
  /**
25
29
  * top bar menu.
26
30
  */
27
- export declare function ComponentMenu({ navigationSlot, widgetSlot, className, host, menuItemSlot, consumeMethodSlot, componentIdStr, useComponent, }: MenuProps): JSX.Element;
31
+ export declare function ComponentMenu({ navigationSlot, widgetSlot, className, host, menuItemSlot, consumeMethodSlot, componentIdStr, useComponent, path, useComponentFilters, }: MenuProps): JSX.Element;
@@ -199,9 +199,15 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
199
199
 
200
200
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2().default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
201
201
 
202
+ function getComponentIdStr(componentIdStr) {
203
+ if ((0, _lodash().isFunction)(componentIdStr)) return componentIdStr();
204
+ return componentIdStr;
205
+ }
202
206
  /**
203
207
  * top bar menu.
204
208
  */
209
+
210
+
205
211
  function ComponentMenu({
206
212
  navigationSlot,
207
213
  widgetSlot,
@@ -210,30 +216,27 @@ function ComponentMenu({
210
216
  menuItemSlot,
211
217
  consumeMethodSlot,
212
218
  componentIdStr,
213
- useComponent
219
+ useComponent,
220
+ path,
221
+ useComponentFilters
214
222
  }) {
215
223
  const idFromLocation = (0, _useComponentFromLocation().useIdFromLocation)();
216
- const componentId = componentIdStr ? _().ComponentID.fromString(componentIdStr) : undefined;
217
- const fullName = (componentId === null || componentId === void 0 ? void 0 : componentId.fullName) || idFromLocation;
218
- const {
219
- lanesModel
220
- } = (0, _lanesHooks().useLanes)();
221
- const laneComponent = fullName ? lanesModel === null || lanesModel === void 0 ? void 0 : lanesModel.resolveComponent(fullName) : undefined;
224
+
225
+ const _componentIdStr = getComponentIdStr(componentIdStr);
226
+
227
+ const componentId = _componentIdStr ? _().ComponentID.fromString(_componentIdStr) : undefined;
228
+ const resolvedComponentIdStr = path || (componentId === null || componentId === void 0 ? void 0 : componentId.toStringWithoutVersion()) || idFromLocation;
222
229
  const useComponentOptions = {
223
- logFilters: laneComponent && {
224
- log: {
225
- logHead: laneComponent.version
226
- }
227
- },
230
+ logFilters: useComponentFilters === null || useComponentFilters === void 0 ? void 0 : useComponentFilters(componentId),
228
231
  customUseComponent: useComponent
229
232
  };
230
233
  const {
231
234
  component
232
- } = (0, _useComponent().useComponent)(host, (laneComponent === null || laneComponent === void 0 ? void 0 : laneComponent.id.toString()) || (componentId === null || componentId === void 0 ? void 0 : componentId.toStringWithoutVersion()) || fullName, useComponentOptions);
235
+ } = (0, _useComponent().useComponent)(host, (componentId === null || componentId === void 0 ? void 0 : componentId.toString()) || idFromLocation, useComponentOptions);
233
236
  const mainMenuItems = (0, _react().useMemo)(() => (0, _lodash().groupBy)((0, _lodash().flatten)(menuItemSlot.values()), 'category'), [menuItemSlot]);
234
237
  if (!component) return /*#__PURE__*/_react().default.createElement(_uiFoundationUi2().FullLoader, null);
235
238
  return /*#__PURE__*/_react().default.createElement(_reactRouterDom().Routes, null, /*#__PURE__*/_react().default.createElement(_reactRouterDom().Route, {
236
- path: `${fullName}/*`,
239
+ path: `${resolvedComponentIdStr}/*`,
237
240
  element: /*#__PURE__*/_react().default.createElement("div", {
238
241
  className: (0, _classnames().default)(_menuModule().default.topBar, className)
239
242
  }, /*#__PURE__*/_react().default.createElement("div", {
@@ -264,11 +267,13 @@ function VersionRelatedDropdowns({
264
267
  consumeMethods,
265
268
  host
266
269
  }) {
270
+ var _lanesModel$viewedLan, _lanesModel$viewedLan2, _lanesModel$getLanesB;
271
+
267
272
  const location = (0, _baseReactNavigation().useLocation)();
268
273
  const {
269
274
  lanesModel
270
275
  } = (0, _lanesHooks().useLanes)();
271
- const currentLane = lanesModel === null || lanesModel === void 0 ? void 0 : lanesModel.viewedLane;
276
+ const currentLane = lanesModel !== null && lanesModel !== void 0 && (_lanesModel$viewedLan = lanesModel.viewedLane) !== null && _lanesModel$viewedLan !== void 0 && _lanesModel$viewedLan.id && !(lanesModel !== null && lanesModel !== void 0 && (_lanesModel$viewedLan2 = lanesModel.viewedLane) !== null && _lanesModel$viewedLan2 !== void 0 && _lanesModel$viewedLan2.id.isDefault()) ? lanesModel.viewedLane : undefined;
272
277
  const {
273
278
  logs
274
279
  } = component;
@@ -290,7 +295,7 @@ function VersionRelatedDropdowns({
290
295
  }));
291
296
  }, [logs]);
292
297
  const isNew = snaps.length === 0 && tags.length === 0;
293
- const lanes = (lanesModel === null || lanesModel === void 0 ? void 0 : lanesModel.getLanesByComponentId(component.id)) || [];
298
+ const lanes = (lanesModel === null || lanesModel === void 0 ? void 0 : (_lanesModel$getLanesB = lanesModel.getLanesByComponentId(component.id)) === null || _lanesModel$getLanesB === void 0 ? void 0 : _lanesModel$getLanesB.filter(lane => !lane.id.isDefault())) || [];
294
299
  const localVersion = isWorkspace && !isNew && !currentLane;
295
300
  const currentVersion = isWorkspace && !isNew && !(location !== null && location !== void 0 && location.search.includes('version')) ? 'workspace' : component.version;
296
301
  const methods = useConsumeMethods(consumeMethods, component, currentLane);
@@ -1 +1 @@
1
- {"version":3,"names":["ComponentMenu","navigationSlot","widgetSlot","className","host","menuItemSlot","consumeMethodSlot","componentIdStr","useComponent","idFromLocation","useIdFromLocation","componentId","ComponentID","fromString","undefined","fullName","lanesModel","useLanes","laneComponent","resolveComponent","useComponentOptions","logFilters","log","logHead","version","customUseComponent","component","useComponentQuery","id","toString","toStringWithoutVersion","mainMenuItems","useMemo","groupBy","flatten","values","classnames","styles","topBar","leftSide","rightSide","widgets","VersionRelatedDropdowns","consumeMethods","location","useLocation","currentLane","viewedLane","logs","isWorkspace","snaps","filter","tag","map","snap","hash","reverse","tags","tagLookup","Map","forEach","set","compact","toArray","get","isNew","length","lanes","getLanesByComponentId","localVersion","currentVersion","search","includes","methods","useConsumeMethods","useBox","name","latest","componentVersionMenu","componentModel","method","x","Component","Title"],"sources":["menu.tsx"],"sourcesContent":["import { Routes, Route } from 'react-router-dom';\nimport { MainDropdown, MenuItemSlot } from '@teambit/ui-foundation.ui.main-dropdown';\nimport { VersionDropdown } from '@teambit/component.ui.version-dropdown';\nimport { FullLoader } from '@teambit/ui-foundation.ui.full-loader';\nimport type { ConsumeMethod } from '@teambit/ui-foundation.ui.use-box.menu';\nimport { useLocation } from '@teambit/base-react.navigation.link';\nimport { flatten, groupBy, compact } from 'lodash';\nimport classnames from 'classnames';\nimport React, { useMemo } from 'react';\nimport { UseBoxDropdown } from '@teambit/ui-foundation.ui.use-box.dropdown';\nimport { useLanes } from '@teambit/lanes.hooks.use-lanes';\nimport { LaneModel } from '@teambit/lanes.ui.models';\nimport { Menu as ConsumeMethodsMenu } from '@teambit/ui-foundation.ui.use-box.menu';\nimport { LegacyComponentLog } from '@teambit/legacy-component-log';\nimport type { ComponentModel } from '../component-model';\nimport { useComponent as useComponentQuery, UseComponentType } from '../use-component';\nimport { MenuNav } from './menu-nav';\nimport { MobileMenuNav } from './mobile-menu-nav';\nimport styles from './menu.module.scss';\nimport { OrderedNavigationSlot, ConsumeMethodSlot } from './nav-plugin';\nimport { useIdFromLocation } from '../use-component-from-location';\nimport { ComponentID } from '../..';\n\nexport type MenuProps = {\n className?: string;\n /**\n * slot for top bar menu nav items\n */\n navigationSlot: OrderedNavigationSlot;\n /**\n * right side menu item slot\n */\n widgetSlot: OrderedNavigationSlot;\n host: string;\n /**\n * main dropdown item slot\n */\n menuItemSlot: MenuItemSlot;\n\n consumeMethodSlot: ConsumeMethodSlot;\n\n componentIdStr?: string;\n\n useComponent?: UseComponentType;\n};\n\n/**\n * top bar menu.\n */\nexport function ComponentMenu({\n navigationSlot,\n widgetSlot,\n className,\n host,\n menuItemSlot,\n consumeMethodSlot,\n componentIdStr,\n useComponent,\n}: MenuProps) {\n const idFromLocation = useIdFromLocation();\n const componentId = componentIdStr ? ComponentID.fromString(componentIdStr) : undefined;\n const fullName = componentId?.fullName || idFromLocation;\n const { lanesModel } = useLanes();\n const laneComponent = fullName ? lanesModel?.resolveComponent(fullName) : undefined;\n const useComponentOptions = {\n logFilters: laneComponent && { log: { logHead: laneComponent.version } },\n customUseComponent: useComponent,\n };\n\n const { component } = useComponentQuery(\n host,\n laneComponent?.id.toString() || componentId?.toStringWithoutVersion() || fullName,\n useComponentOptions\n );\n const mainMenuItems = useMemo(() => groupBy(flatten(menuItemSlot.values()), 'category'), [menuItemSlot]);\n if (!component) return <FullLoader />;\n return (\n <Routes>\n <Route\n path={`${fullName}/*`}\n element={\n <div className={classnames(styles.topBar, className)}>\n <div className={styles.leftSide}>\n <MenuNav navigationSlot={navigationSlot} />\n <MobileMenuNav navigationSlot={navigationSlot} widgetSlot={widgetSlot} />\n </div>\n <div className={styles.rightSide}>\n <div className={styles.widgets}>\n <MenuNav navigationSlot={widgetSlot} />\n </div>\n <VersionRelatedDropdowns component={component} consumeMethods={consumeMethodSlot} host={host} />\n <MainDropdown menuItems={mainMenuItems} />\n </div>\n </div>\n }\n />\n </Routes>\n );\n}\n\nfunction VersionRelatedDropdowns({\n component,\n consumeMethods,\n host,\n}: {\n component: ComponentModel;\n consumeMethods: ConsumeMethodSlot;\n host: string;\n}) {\n const location = useLocation();\n const { lanesModel } = useLanes();\n const currentLane = lanesModel?.viewedLane;\n const { logs } = component;\n const isWorkspace = host === 'teambit.workspace/workspace';\n\n const snaps = useMemo(() => {\n return (logs || [])\n .filter((log) => !log.tag)\n .map((snap) => ({ ...snap, version: snap.hash }))\n .reverse();\n }, [logs]);\n\n const tags = useMemo(() => {\n const tagLookup = new Map<string, LegacyComponentLog>();\n (logs || [])\n .filter((log) => log.tag)\n .forEach((tag) => {\n tagLookup.set(tag?.tag as string, tag);\n });\n return compact(\n component.tags\n ?.toArray()\n .reverse()\n .map((tag) => tagLookup.get(tag.version.version))\n ).map((tag) => ({ ...tag, version: tag.tag as string }));\n }, [logs]);\n\n const isNew = snaps.length === 0 && tags.length === 0;\n\n const lanes = lanesModel?.getLanesByComponentId(component.id) || [];\n const localVersion = isWorkspace && !isNew && !currentLane;\n\n const currentVersion =\n isWorkspace && !isNew && !location?.search.includes('version') ? 'workspace' : component.version;\n\n const methods = useConsumeMethods(consumeMethods, component, currentLane);\n return (\n <>\n {tags.length > 0 && (\n <UseBoxDropdown\n position=\"bottom-end\"\n className={styles.useBox}\n Menu={<ConsumeMethodsMenu methods={methods} componentName={component.id.name} />}\n />\n )}\n <VersionDropdown\n tags={tags}\n snaps={snaps}\n lanes={lanes}\n localVersion={localVersion}\n currentVersion={currentVersion}\n latestVersion={component.latest}\n currentLane={currentLane}\n menuClassName={styles.componentVersionMenu}\n />\n </>\n );\n}\n\nfunction useConsumeMethods(\n consumeMethods: ConsumeMethodSlot,\n componentModel: ComponentModel,\n currentLane?: LaneModel\n): ConsumeMethod[] {\n return useMemo(\n () =>\n flatten(consumeMethods.values())\n .map((method) => {\n return method?.(componentModel, { currentLane });\n })\n .filter((x) => !!x && x.Component && x.Title) as ConsumeMethod[],\n [consumeMethods, componentModel, currentLane]\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["getComponentIdStr","componentIdStr","isFunction","ComponentMenu","navigationSlot","widgetSlot","className","host","menuItemSlot","consumeMethodSlot","useComponent","path","useComponentFilters","idFromLocation","useIdFromLocation","_componentIdStr","componentId","ComponentID","fromString","undefined","resolvedComponentIdStr","toStringWithoutVersion","useComponentOptions","logFilters","customUseComponent","component","useComponentQuery","toString","mainMenuItems","useMemo","groupBy","flatten","values","classnames","styles","topBar","leftSide","rightSide","widgets","VersionRelatedDropdowns","consumeMethods","location","useLocation","lanesModel","useLanes","currentLane","viewedLane","id","isDefault","logs","isWorkspace","snaps","filter","log","tag","map","snap","version","hash","reverse","tags","tagLookup","Map","forEach","set","compact","toArray","get","isNew","length","lanes","getLanesByComponentId","lane","localVersion","currentVersion","search","includes","methods","useConsumeMethods","useBox","name","latest","componentVersionMenu","componentModel","method","x","Component","Title"],"sources":["menu.tsx"],"sourcesContent":["import { Routes, Route } from 'react-router-dom';\nimport { MainDropdown, MenuItemSlot } from '@teambit/ui-foundation.ui.main-dropdown';\nimport { VersionDropdown } from '@teambit/component.ui.version-dropdown';\nimport { FullLoader } from '@teambit/ui-foundation.ui.full-loader';\nimport type { ConsumeMethod } from '@teambit/ui-foundation.ui.use-box.menu';\nimport { useLocation } from '@teambit/base-react.navigation.link';\nimport { flatten, groupBy, compact, isFunction } from 'lodash';\nimport classnames from 'classnames';\nimport React, { useMemo } from 'react';\nimport { UseBoxDropdown } from '@teambit/ui-foundation.ui.use-box.dropdown';\nimport { useLanes } from '@teambit/lanes.hooks.use-lanes';\nimport { LaneModel } from '@teambit/lanes.ui.models.lanes-model';\nimport { Menu as ConsumeMethodsMenu } from '@teambit/ui-foundation.ui.use-box.menu';\nimport { LegacyComponentLog } from '@teambit/legacy-component-log';\nimport type { ComponentModel } from '../component-model';\nimport { useComponent as useComponentQuery, UseComponentType } from '../use-component';\nimport { MenuNav } from './menu-nav';\nimport { MobileMenuNav } from './mobile-menu-nav';\nimport styles from './menu.module.scss';\nimport { OrderedNavigationSlot, ConsumeMethodSlot } from './nav-plugin';\nimport { useIdFromLocation } from '../use-component-from-location';\nimport { ComponentID } from '../..';\nimport { Filters } from '../use-component-query';\n\nexport type MenuProps = {\n className?: string;\n /**\n * slot for top bar menu nav items\n */\n navigationSlot: OrderedNavigationSlot;\n /**\n * right side menu item slot\n */\n widgetSlot: OrderedNavigationSlot;\n host: string;\n /**\n * main dropdown item slot\n */\n menuItemSlot: MenuItemSlot;\n\n consumeMethodSlot: ConsumeMethodSlot;\n\n componentIdStr?: string | (() => string | undefined);\n\n useComponent?: UseComponentType;\n\n path?: string,\n\n useComponentFilters?: (componentId?: ComponentID) => Filters;\n};\nfunction getComponentIdStr(componentIdStr?: string | (() => string | undefined)): string | undefined {\n if (isFunction(componentIdStr)) return componentIdStr();\n return componentIdStr;\n}\n/**\n * top bar menu.\n */\nexport function ComponentMenu({\n navigationSlot,\n widgetSlot,\n className,\n host,\n menuItemSlot,\n consumeMethodSlot,\n componentIdStr,\n useComponent,\n path,\n useComponentFilters,\n}: MenuProps) {\n const idFromLocation = useIdFromLocation();\n const _componentIdStr = getComponentIdStr(componentIdStr);\n const componentId = _componentIdStr ? ComponentID.fromString(_componentIdStr) : undefined;\n const resolvedComponentIdStr = path || componentId?.toStringWithoutVersion() || idFromLocation;\n\n const useComponentOptions = {\n logFilters: useComponentFilters?.(componentId),\n customUseComponent: useComponent,\n };\n\n const { component } = useComponentQuery(host, componentId?.toString() || idFromLocation, useComponentOptions);\n const mainMenuItems = useMemo(() => groupBy(flatten(menuItemSlot.values()), 'category'), [menuItemSlot]);\n if (!component) return <FullLoader />;\n return (\n <Routes>\n <Route\n path={`${resolvedComponentIdStr}/*`}\n element={\n <div className={classnames(styles.topBar, className)}>\n <div className={styles.leftSide}>\n <MenuNav navigationSlot={navigationSlot} />\n <MobileMenuNav navigationSlot={navigationSlot} widgetSlot={widgetSlot} />\n </div>\n <div className={styles.rightSide}>\n <div className={styles.widgets}>\n <MenuNav navigationSlot={widgetSlot} />\n </div>\n <VersionRelatedDropdowns component={component} consumeMethods={consumeMethodSlot} host={host} />\n <MainDropdown menuItems={mainMenuItems} />\n </div>\n </div>\n }\n />\n </Routes>\n );\n}\n\nfunction VersionRelatedDropdowns({\n component,\n consumeMethods,\n host,\n}: {\n component: ComponentModel;\n consumeMethods: ConsumeMethodSlot;\n host: string;\n}) {\n const location = useLocation();\n const { lanesModel } = useLanes();\n const currentLane =\n lanesModel?.viewedLane?.id && !lanesModel?.viewedLane?.id.isDefault() ? lanesModel.viewedLane : undefined;\n\n const { logs } = component;\n const isWorkspace = host === 'teambit.workspace/workspace';\n\n const snaps = useMemo(() => {\n return (logs || [])\n .filter((log) => !log.tag)\n .map((snap) => ({ ...snap, version: snap.hash }))\n .reverse();\n }, [logs]);\n\n const tags = useMemo(() => {\n const tagLookup = new Map<string, LegacyComponentLog>();\n (logs || [])\n .filter((log) => log.tag)\n .forEach((tag) => {\n tagLookup.set(tag?.tag as string, tag);\n });\n return compact(\n component.tags\n ?.toArray()\n .reverse()\n .map((tag) => tagLookup.get(tag.version.version))\n ).map((tag) => ({ ...tag, version: tag.tag as string }));\n }, [logs]);\n\n const isNew = snaps.length === 0 && tags.length === 0;\n\n const lanes = lanesModel?.getLanesByComponentId(component.id)?.filter((lane) => !lane.id.isDefault()) || [];\n const localVersion = isWorkspace && !isNew && !currentLane;\n\n const currentVersion =\n isWorkspace && !isNew && !location?.search.includes('version') ? 'workspace' : component.version;\n\n const methods = useConsumeMethods(consumeMethods, component, currentLane);\n return (\n <>\n {tags.length > 0 && (\n <UseBoxDropdown\n position=\"bottom-end\"\n className={styles.useBox}\n Menu={<ConsumeMethodsMenu methods={methods} componentName={component.id.name} />}\n />\n )}\n <VersionDropdown\n tags={tags}\n snaps={snaps}\n lanes={lanes}\n localVersion={localVersion}\n currentVersion={currentVersion}\n latestVersion={component.latest}\n currentLane={currentLane}\n menuClassName={styles.componentVersionMenu}\n />\n </>\n );\n}\n\nfunction useConsumeMethods(\n consumeMethods: ConsumeMethodSlot,\n componentModel: ComponentModel,\n currentLane?: LaneModel\n): ConsumeMethod[] {\n return useMemo(\n () =>\n flatten(consumeMethods.values())\n .map((method) => {\n return method?.(componentModel, { currentLane });\n })\n .filter((x) => !!x && x.Component && x.Title) as ConsumeMethod[],\n [consumeMethods, componentModel, currentLane]\n );\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { SlotRegistry } from '@teambit/harmony';
2
2
  import type { LinkProps } from '@teambit/base-react.navigation.link';
3
3
  import type { ConsumeMethod } from '@teambit/ui-foundation.ui.use-box.menu';
4
- import { LaneModel } from '@teambit/lanes.ui.models';
4
+ import { LaneModel } from '@teambit/lanes.ui.models.lanes-model';
5
5
  import { ComponentModel } from '../../ui';
6
6
  export declare type NavPluginProps = {
7
7
  displayName?: string;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["nav-plugin.tsx"],"sourcesContent":["import { SlotRegistry } from '@teambit/harmony';\nimport type { LinkProps } from '@teambit/base-react.navigation.link';\nimport type { ConsumeMethod } from '@teambit/ui-foundation.ui.use-box.menu';\nimport { LaneModel } from '@teambit/lanes.ui.models';\nimport { ComponentModel } from '../../ui';\n\nexport type NavPluginProps = {\n displayName?: string;\n} & LinkProps;\n\nexport type NavPlugin = {\n props: NavPluginProps;\n order?: number;\n};\n\nexport type OrderedNavigationSlot = SlotRegistry<NavPlugin>;\nexport type ConsumePluginOptions = {\n currentLane?: LaneModel;\n};\n\nexport type ConsumePlugin = (\n componentModel: ComponentModel,\n options?: ConsumePluginOptions\n) => ConsumeMethod | undefined;\n\nexport type ConsumeMethodSlot = SlotRegistry<ConsumePlugin[]>;\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["nav-plugin.tsx"],"sourcesContent":["import { SlotRegistry } from '@teambit/harmony';\nimport type { LinkProps } from '@teambit/base-react.navigation.link';\nimport type { ConsumeMethod } from '@teambit/ui-foundation.ui.use-box.menu';\nimport { LaneModel } from '@teambit/lanes.ui.models.lanes-model';\nimport { ComponentModel } from '../../ui';\n\nexport type NavPluginProps = {\n displayName?: string;\n} & LinkProps;\n\nexport type NavPlugin = {\n props: NavPluginProps;\n order?: number;\n};\n\nexport type OrderedNavigationSlot = SlotRegistry<NavPlugin>;\nexport type ConsumePluginOptions = {\n currentLane?: LaneModel;\n};\n\nexport type ConsumePlugin = (\n componentModel: ComponentModel,\n options?: ConsumePluginOptions\n) => ConsumeMethod | undefined;\n\nexport type ConsumeMethodSlot = SlotRegistry<ConsumePlugin[]>;\n"],"mappings":""}
@@ -1 +1 @@
1
- export declare function useIdFromLocation(): string | undefined;
1
+ export declare function useIdFromLocation(url?: string): string | undefined;
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ require("core-js/modules/es.array.iterator.js");
4
+
3
5
  require("core-js/modules/es.regexp.exec.js");
4
6
 
5
7
  Object.defineProperty(exports, "__esModule", {
@@ -20,12 +22,23 @@ function _reactRouterDom() {
20
22
  /** component url is comprised of letters, numbers, "_", "-", "/" but should not include trailing "/", and should not include "~" */
21
23
  const componentRegex = /^[\w/-]*[\w-]/;
22
24
 
23
- function useIdFromLocation() {
25
+ function useIdFromLocation(url) {
24
26
  const params = (0, _reactRouterDom().useParams)();
25
- const splat = params['*'];
27
+ const splat = url || params['*'];
26
28
  if (!splat) return undefined;
27
- const match = componentRegex.exec(splat);
28
- return match === null || match === void 0 ? void 0 : match[0];
29
+ const [maybeOrgWithScope, ...maybeFullName] = splat.split('/');
30
+ const hasScope = maybeOrgWithScope.split('.').length > 1;
31
+ const fullNameFromUrl = hasScope ? maybeFullName.join('/') : splat;
32
+ let scope;
33
+
34
+ if (hasScope) {
35
+ scope = maybeOrgWithScope;
36
+ }
37
+
38
+ const match = componentRegex.exec(fullNameFromUrl);
39
+ if (!(match !== null && match !== void 0 && match[0])) return undefined;
40
+ if (scope) return `${scope}/${match[0]}`;
41
+ return match[0];
29
42
  }
30
43
 
31
44
  //# sourceMappingURL=use-component-from-location.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["componentRegex","useIdFromLocation","params","useParams","splat","undefined","match","exec"],"sources":["use-component-from-location.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\n\n/** component url is comprised of letters, numbers, \"_\", \"-\", \"/\" but should not include trailing \"/\", and should not include \"~\" */\nconst componentRegex = /^[\\w/-]*[\\w-]/;\nexport function useIdFromLocation() {\n const params = useParams();\n const splat = params['*'];\n if (!splat) return undefined;\n\n const match = componentRegex.exec(splat);\n return match?.[0];\n}\n"],"mappings":";;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;AACA,MAAMA,cAAc,GAAG,eAAvB;;AACO,SAASC,iBAAT,GAA6B;EAClC,MAAMC,MAAM,GAAG,IAAAC,2BAAA,GAAf;EACA,MAAMC,KAAK,GAAGF,MAAM,CAAC,GAAD,CAApB;EACA,IAAI,CAACE,KAAL,EAAY,OAAOC,SAAP;EAEZ,MAAMC,KAAK,GAAGN,cAAc,CAACO,IAAf,CAAoBH,KAApB,CAAd;EACA,OAAOE,KAAP,aAAOA,KAAP,uBAAOA,KAAK,CAAG,CAAH,CAAZ;AACD"}
1
+ {"version":3,"names":["componentRegex","useIdFromLocation","url","params","useParams","splat","undefined","maybeOrgWithScope","maybeFullName","split","hasScope","length","fullNameFromUrl","join","scope","match","exec"],"sources":["use-component-from-location.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\n\n/** component url is comprised of letters, numbers, \"_\", \"-\", \"/\" but should not include trailing \"/\", and should not include \"~\" */\nconst componentRegex = /^[\\w/-]*[\\w-]/;\n\nexport function useIdFromLocation(url?: string): string | undefined {\n const params = useParams();\n const splat = url || params['*'];\n if (!splat) return undefined;\n\n const [maybeOrgWithScope, ...maybeFullName] = splat.split('/');\n const hasScope = maybeOrgWithScope.split('.').length > 1;\n const fullNameFromUrl = hasScope ? maybeFullName.join('/') : splat;\n let scope: string | undefined;\n if (hasScope) {\n scope = maybeOrgWithScope;\n }\n const match = componentRegex.exec(fullNameFromUrl);\n if (!match?.[0]) return undefined;\n if (scope) return `${scope}/${match[0]}`;\n return match[0];\n}\n"],"mappings":";;;;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;AACA,MAAMA,cAAc,GAAG,eAAvB;;AAEO,SAASC,iBAAT,CAA2BC,GAA3B,EAA6D;EAClE,MAAMC,MAAM,GAAG,IAAAC,2BAAA,GAAf;EACA,MAAMC,KAAK,GAAGH,GAAG,IAAIC,MAAM,CAAC,GAAD,CAA3B;EACA,IAAI,CAACE,KAAL,EAAY,OAAOC,SAAP;EAEZ,MAAM,CAACC,iBAAD,EAAoB,GAAGC,aAAvB,IAAwCH,KAAK,CAACI,KAAN,CAAY,GAAZ,CAA9C;EACA,MAAMC,QAAQ,GAAGH,iBAAiB,CAACE,KAAlB,CAAwB,GAAxB,EAA6BE,MAA7B,GAAsC,CAAvD;EACA,MAAMC,eAAe,GAAGF,QAAQ,GAAGF,aAAa,CAACK,IAAd,CAAmB,GAAnB,CAAH,GAA6BR,KAA7D;EACA,IAAIS,KAAJ;;EACA,IAAIJ,QAAJ,EAAc;IACZI,KAAK,GAAGP,iBAAR;EACD;;EACD,MAAMQ,KAAK,GAAGf,cAAc,CAACgB,IAAf,CAAoBJ,eAApB,CAAd;EACA,IAAI,EAACG,KAAD,aAACA,KAAD,eAACA,KAAK,CAAG,CAAH,CAAN,CAAJ,EAAiB,OAAOT,SAAP;EACjB,IAAIQ,KAAJ,EAAW,OAAQ,GAAEA,KAAM,IAAGC,KAAK,CAAC,CAAD,CAAI,EAA5B;EACX,OAAOA,KAAK,CAAC,CAAD,CAAZ;AACD"}
@@ -28,15 +28,6 @@ export declare function useComponentQuery(componentId: string, host: string, fil
28
28
  previousData?: any;
29
29
  networkStatus: import("@apollo/client").NetworkStatus;
30
30
  called: boolean;
31
- variables: {
32
- logType?: string | undefined;
33
- logOffset?: number | undefined;
34
- logLimit?: number | undefined;
35
- logHead?: string | undefined;
36
- logSort?: string | undefined;
37
- id: string;
38
- extensionId: string;
39
- } | undefined;
40
31
  startPolling: (pollInterval: number) => void;
41
32
  stopPolling: () => void;
42
33
  updateQuery: <TVars = {
@@ -66,6 +57,15 @@ export declare function useComponentQuery(componentId: string, host: string, fil
66
57
  id: string;
67
58
  extensionId: string;
68
59
  }, any>> | undefined, newNetworkStatus?: import("@apollo/client").NetworkStatus | undefined) => Promise<import("@apollo/client").ApolloQueryResult<any>>;
60
+ variables: {
61
+ logType?: string | undefined;
62
+ logOffset?: number | undefined;
63
+ logLimit?: number | undefined;
64
+ logHead?: string | undefined;
65
+ logSort?: string | undefined;
66
+ id: string;
67
+ extensionId: string;
68
+ } | undefined;
69
69
  fetchMore: <TFetchData = any, TFetchVars = {
70
70
  logType?: string | undefined;
71
71
  logOffset?: number | undefined;
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/component",
3
- "version": "0.0.867",
3
+ "version": "0.0.868",
4
4
  "homepage": "https://bit.dev/teambit/component/component",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.component",
8
8
  "name": "component",
9
- "version": "0.0.867"
9
+ "version": "0.0.868"
10
10
  },
11
11
  "dependencies": {
12
12
  "@teambit/any-fs": "0.0.5",
@@ -31,42 +31,42 @@
31
31
  "@teambit/design.inputs.dropdown": "0.0.7",
32
32
  "@teambit/component-id": "0.0.417",
33
33
  "@teambit/ui-foundation.ui.menu-widget-icon": "0.0.494",
34
- "@teambit/aspect-loader": "0.0.867",
34
+ "@teambit/aspect-loader": "0.0.868",
35
35
  "@teambit/legacy-bit-id": "0.0.414",
36
36
  "@teambit/toolbox.path.match-patterns": "0.0.7",
37
37
  "@teambit/toolbox.string.capitalize": "0.0.489",
38
- "@teambit/cli": "0.0.578",
39
- "@teambit/express": "0.0.676",
40
- "@teambit/graphql": "0.0.867",
38
+ "@teambit/cli": "0.0.579",
39
+ "@teambit/express": "0.0.677",
40
+ "@teambit/graphql": "0.0.868",
41
41
  "@teambit/bit-error": "0.0.400",
42
- "@teambit/command-bar": "0.0.867",
42
+ "@teambit/command-bar": "0.0.868",
43
43
  "@teambit/component.ui.deprecation-icon": "0.0.500",
44
- "@teambit/preview": "0.0.867",
45
- "@teambit/pubsub": "0.0.867",
46
- "@teambit/react-router": "0.0.867",
44
+ "@teambit/preview": "0.0.868",
45
+ "@teambit/pubsub": "0.0.868",
46
+ "@teambit/react-router": "0.0.868",
47
47
  "@teambit/ui-foundation.ui.is-browser": "0.0.492",
48
48
  "@teambit/ui-foundation.ui.main-dropdown": "0.0.493",
49
49
  "@teambit/ui-foundation.ui.react-router.slot-router": "0.0.496",
50
50
  "@teambit/ui-foundation.ui.use-box.menu": "0.0.122",
51
- "@teambit/ui": "0.0.867",
51
+ "@teambit/ui": "0.0.868",
52
52
  "@teambit/component-issues": "0.0.72",
53
53
  "@teambit/ui-foundation.ui.hooks.use-data-query": "0.0.496",
54
54
  "@teambit/cli-table": "0.0.40",
55
- "@teambit/lanes.hooks.use-lanes": "0.0.38",
56
- "@teambit/component-descriptor": "0.0.146",
55
+ "@teambit/component-descriptor": "0.0.147",
57
56
  "@teambit/ui-foundation.ui.react-router.use-query": "0.0.493",
58
57
  "@teambit/design.ui.empty-box": "0.0.360",
59
58
  "@teambit/harmony.ui.aspect-box": "0.0.492",
60
59
  "@teambit/design.ui.pages.not-found": "0.0.363",
61
60
  "@teambit/design.ui.pages.server-error": "0.0.363",
62
- "@teambit/compositions": "0.0.867",
63
- "@teambit/deprecation": "0.0.867",
64
- "@teambit/envs": "0.0.867",
61
+ "@teambit/compositions": "0.0.868",
62
+ "@teambit/deprecation": "0.0.868",
63
+ "@teambit/envs": "0.0.868",
65
64
  "@teambit/legacy-component-log": "0.0.398",
66
65
  "@teambit/design.ui.styles.ellipsis": "0.0.353",
67
66
  "@teambit/envs.ui.env-icon": "0.0.492",
68
- "@teambit/component.ui.version-dropdown": "0.0.640",
69
- "@teambit/lanes.ui.models": "0.0.36",
67
+ "@teambit/component.ui.version-dropdown": "0.0.641",
68
+ "@teambit/lanes.hooks.use-lanes": "0.0.39",
69
+ "@teambit/lanes.ui.models.lanes-model": "0.0.1",
70
70
  "@teambit/ui-foundation.ui.full-loader": "0.0.492",
71
71
  "@teambit/ui-foundation.ui.use-box.dropdown": "0.0.122",
72
72
  "@teambit/ui-foundation.ui.constants.z-indexes": "0.0.494"
@@ -88,7 +88,7 @@
88
88
  "peerDependencies": {
89
89
  "react-router-dom": "^6.0.0",
90
90
  "@apollo/client": "^3.6.0",
91
- "@teambit/legacy": "1.0.359",
91
+ "@teambit/legacy": "1.0.360",
92
92
  "react-dom": "^16.8.0 || ^17.0.0",
93
93
  "react": "^16.8.0 || ^17.0.0"
94
94
  },
@@ -1,5 +1,5 @@
1
- import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.867/dist/component.composition.js';
2
- import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.867/dist/component.docs.mdx';
1
+ import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.868/dist/component.composition.js';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.868/dist/component.docs.mdx';
3
3
 
4
4
  export const compositions = [compositions_0];
5
5
  export const overview = [overview_0];
package/ui/component.tsx CHANGED
@@ -2,13 +2,14 @@ import React, { useEffect, ReactNode, useMemo } from 'react';
2
2
  import flatten from 'lodash.flatten';
3
3
  import { RouteSlot, SlotRouter } from '@teambit/ui-foundation.ui.react-router.slot-router';
4
4
  import { SlotRegistry } from '@teambit/harmony';
5
- import { useLanes } from '@teambit/lanes.hooks.use-lanes';
5
+ import { isFunction } from 'lodash';
6
6
  import styles from './component.module.scss';
7
7
  import { ComponentProvider, ComponentDescriptorProvider } from './context';
8
8
  import { useComponent as useComponentQuery, UseComponentType } from './use-component';
9
9
  import { ComponentModel } from './component-model';
10
10
  import { useIdFromLocation } from './use-component-from-location';
11
11
  import { ComponentID } from '..';
12
+ import { Filters } from './use-component-query';
12
13
 
13
14
  export type ComponentPageSlot = SlotRegistry<ComponentPageElement[]>;
14
15
  export type ComponentPageElement = {
@@ -22,9 +23,16 @@ export type ComponentProps = {
22
23
  host: string;
23
24
  onComponentChange?: (activeComponent?: ComponentModel) => void;
24
25
  useComponent?: UseComponentType;
25
- componentIdStr?: string;
26
+ useComponentFilters?: (componentId?: ComponentID) => Filters;
27
+ path?: string;
28
+ componentIdStr?: string | (() => string | undefined);
26
29
  };
27
30
 
31
+ function getComponentIdStr(componentIdStr?: string | (() => string | undefined)): string | undefined {
32
+ if (isFunction(componentIdStr)) return componentIdStr();
33
+ return componentIdStr;
34
+ }
35
+
28
36
  /**
29
37
  * main UI component of the Component extension.
30
38
  */
@@ -35,20 +43,21 @@ export function Component({
35
43
  onComponentChange,
36
44
  componentIdStr,
37
45
  useComponent,
46
+ path,
47
+ useComponentFilters,
38
48
  }: ComponentProps) {
39
49
  const idFromLocation = useIdFromLocation();
40
- const componentId = componentIdStr ? ComponentID.fromString(componentIdStr) : undefined;
41
- const fullName = componentId?.fullName || idFromLocation;
42
- const { lanesModel } = useLanes();
43
- const laneComponent = fullName ? lanesModel?.resolveComponent(fullName) : undefined;
50
+ const _componentIdStr = getComponentIdStr(componentIdStr);
51
+ const componentId = _componentIdStr ? ComponentID.fromString(_componentIdStr) : undefined;
52
+ const resolvedComponentIdStr = path || componentId?.toStringWithoutVersion() || idFromLocation;
44
53
  const useComponentOptions = {
45
- logFilters: laneComponent && { log: { logHead: laneComponent.version } },
54
+ logFilters: useComponentFilters?.(componentId),
46
55
  customUseComponent: useComponent,
47
56
  };
48
57
 
49
58
  const { component, componentDescriptor, error } = useComponentQuery(
50
59
  host,
51
- laneComponent?.id.toString() || componentId?.toString() || idFromLocation,
60
+ componentId?.toString() || idFromLocation,
52
61
  useComponentOptions
53
62
  );
54
63
  // trigger onComponentChange when component changes
@@ -68,7 +77,7 @@ export function Component({
68
77
  <ComponentProvider component={component}>
69
78
  {before}
70
79
  <div className={styles.container}>
71
- {routeSlot && <SlotRouter parentPath={`${fullName}/*`} slot={routeSlot} />}
80
+ {routeSlot && <SlotRouter parentPath={`${resolvedComponentIdStr}/*`} slot={routeSlot} />}
72
81
  </div>
73
82
  {after}
74
83
  </ComponentProvider>
package/ui/menu/menu.tsx CHANGED
@@ -4,12 +4,12 @@ import { VersionDropdown } from '@teambit/component.ui.version-dropdown';
4
4
  import { FullLoader } from '@teambit/ui-foundation.ui.full-loader';
5
5
  import type { ConsumeMethod } from '@teambit/ui-foundation.ui.use-box.menu';
6
6
  import { useLocation } from '@teambit/base-react.navigation.link';
7
- import { flatten, groupBy, compact } from 'lodash';
7
+ import { flatten, groupBy, compact, isFunction } from 'lodash';
8
8
  import classnames from 'classnames';
9
9
  import React, { useMemo } from 'react';
10
10
  import { UseBoxDropdown } from '@teambit/ui-foundation.ui.use-box.dropdown';
11
11
  import { useLanes } from '@teambit/lanes.hooks.use-lanes';
12
- import { LaneModel } from '@teambit/lanes.ui.models';
12
+ import { LaneModel } from '@teambit/lanes.ui.models.lanes-model';
13
13
  import { Menu as ConsumeMethodsMenu } from '@teambit/ui-foundation.ui.use-box.menu';
14
14
  import { LegacyComponentLog } from '@teambit/legacy-component-log';
15
15
  import type { ComponentModel } from '../component-model';
@@ -20,6 +20,7 @@ import styles from './menu.module.scss';
20
20
  import { OrderedNavigationSlot, ConsumeMethodSlot } from './nav-plugin';
21
21
  import { useIdFromLocation } from '../use-component-from-location';
22
22
  import { ComponentID } from '../..';
23
+ import { Filters } from '../use-component-query';
23
24
 
24
25
  export type MenuProps = {
25
26
  className?: string;
@@ -39,11 +40,18 @@ export type MenuProps = {
39
40
 
40
41
  consumeMethodSlot: ConsumeMethodSlot;
41
42
 
42
- componentIdStr?: string;
43
+ componentIdStr?: string | (() => string | undefined);
43
44
 
44
45
  useComponent?: UseComponentType;
45
- };
46
46
 
47
+ path?: string,
48
+
49
+ useComponentFilters?: (componentId?: ComponentID) => Filters;
50
+ };
51
+ function getComponentIdStr(componentIdStr?: string | (() => string | undefined)): string | undefined {
52
+ if (isFunction(componentIdStr)) return componentIdStr();
53
+ return componentIdStr;
54
+ }
47
55
  /**
48
56
  * top bar menu.
49
57
  */
@@ -56,28 +64,26 @@ export function ComponentMenu({
56
64
  consumeMethodSlot,
57
65
  componentIdStr,
58
66
  useComponent,
67
+ path,
68
+ useComponentFilters,
59
69
  }: MenuProps) {
60
70
  const idFromLocation = useIdFromLocation();
61
- const componentId = componentIdStr ? ComponentID.fromString(componentIdStr) : undefined;
62
- const fullName = componentId?.fullName || idFromLocation;
63
- const { lanesModel } = useLanes();
64
- const laneComponent = fullName ? lanesModel?.resolveComponent(fullName) : undefined;
71
+ const _componentIdStr = getComponentIdStr(componentIdStr);
72
+ const componentId = _componentIdStr ? ComponentID.fromString(_componentIdStr) : undefined;
73
+ const resolvedComponentIdStr = path || componentId?.toStringWithoutVersion() || idFromLocation;
74
+
65
75
  const useComponentOptions = {
66
- logFilters: laneComponent && { log: { logHead: laneComponent.version } },
76
+ logFilters: useComponentFilters?.(componentId),
67
77
  customUseComponent: useComponent,
68
78
  };
69
79
 
70
- const { component } = useComponentQuery(
71
- host,
72
- laneComponent?.id.toString() || componentId?.toStringWithoutVersion() || fullName,
73
- useComponentOptions
74
- );
80
+ const { component } = useComponentQuery(host, componentId?.toString() || idFromLocation, useComponentOptions);
75
81
  const mainMenuItems = useMemo(() => groupBy(flatten(menuItemSlot.values()), 'category'), [menuItemSlot]);
76
82
  if (!component) return <FullLoader />;
77
83
  return (
78
84
  <Routes>
79
85
  <Route
80
- path={`${fullName}/*`}
86
+ path={`${resolvedComponentIdStr}/*`}
81
87
  element={
82
88
  <div className={classnames(styles.topBar, className)}>
83
89
  <div className={styles.leftSide}>
@@ -109,7 +115,9 @@ function VersionRelatedDropdowns({
109
115
  }) {
110
116
  const location = useLocation();
111
117
  const { lanesModel } = useLanes();
112
- const currentLane = lanesModel?.viewedLane;
118
+ const currentLane =
119
+ lanesModel?.viewedLane?.id && !lanesModel?.viewedLane?.id.isDefault() ? lanesModel.viewedLane : undefined;
120
+
113
121
  const { logs } = component;
114
122
  const isWorkspace = host === 'teambit.workspace/workspace';
115
123
 
@@ -137,7 +145,7 @@ function VersionRelatedDropdowns({
137
145
 
138
146
  const isNew = snaps.length === 0 && tags.length === 0;
139
147
 
140
- const lanes = lanesModel?.getLanesByComponentId(component.id) || [];
148
+ const lanes = lanesModel?.getLanesByComponentId(component.id)?.filter((lane) => !lane.id.isDefault()) || [];
141
149
  const localVersion = isWorkspace && !isNew && !currentLane;
142
150
 
143
151
  const currentVersion =
@@ -1,7 +1,7 @@
1
1
  import { SlotRegistry } from '@teambit/harmony';
2
2
  import type { LinkProps } from '@teambit/base-react.navigation.link';
3
3
  import type { ConsumeMethod } from '@teambit/ui-foundation.ui.use-box.menu';
4
- import { LaneModel } from '@teambit/lanes.ui.models';
4
+ import { LaneModel } from '@teambit/lanes.ui.models.lanes-model';
5
5
  import { ComponentModel } from '../../ui';
6
6
 
7
7
  export type NavPluginProps = {
@@ -2,11 +2,21 @@ import { useParams } from 'react-router-dom';
2
2
 
3
3
  /** component url is comprised of letters, numbers, "_", "-", "/" but should not include trailing "/", and should not include "~" */
4
4
  const componentRegex = /^[\w/-]*[\w-]/;
5
- export function useIdFromLocation() {
5
+
6
+ export function useIdFromLocation(url?: string): string | undefined {
6
7
  const params = useParams();
7
- const splat = params['*'];
8
+ const splat = url || params['*'];
8
9
  if (!splat) return undefined;
9
10
 
10
- const match = componentRegex.exec(splat);
11
- return match?.[0];
11
+ const [maybeOrgWithScope, ...maybeFullName] = splat.split('/');
12
+ const hasScope = maybeOrgWithScope.split('.').length > 1;
13
+ const fullNameFromUrl = hasScope ? maybeFullName.join('/') : splat;
14
+ let scope: string | undefined;
15
+ if (hasScope) {
16
+ scope = maybeOrgWithScope;
17
+ }
18
+ const match = componentRegex.exec(fullNameFromUrl);
19
+ if (!match?.[0]) return undefined;
20
+ if (scope) return `${scope}/${match[0]}`;
21
+ return match[0];
12
22
  }