@teambit/component 0.0.1038 → 0.0.1040

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.
@@ -74,6 +74,12 @@ export class ComponentUI {
74
74
  if (isBrowser) this.registerPubSub();
75
75
  }
76
76
 
77
+ get routes() {
78
+ return this.routeSlot
79
+ .toArray()
80
+ .map(([key, routes]) => [key, Array.isArray(routes) ? [...flatten(routes)] : [routes]] as [string, RouteProps[]]);
81
+ }
82
+
77
83
  /**
78
84
  * the current visible component
79
85
  */
@@ -187,6 +193,7 @@ export class ComponentUI {
187
193
  useComponent={options.useComponent}
188
194
  componentIdStr={options.componentId}
189
195
  useComponentFilters={options.useComponentFilters}
196
+ overriddenRoutes={options.routes}
190
197
  />
191
198
  );
192
199
  }
@@ -51,6 +51,7 @@ export declare class ComponentUI {
51
51
  * slot for registering a new widget to the menu.
52
52
  */
53
53
  widgetSlot: OrderedNavigationSlot, menuItemSlot: MenuItemSlot, pageItemSlot: ComponentPageSlot, componentSearchResultSlot: ComponentSearchResultSlot, commandBarUI: CommandBarUI, reactRouterUi: ReactRouterUI);
54
+ get routes(): [string, RouteProps[]][];
54
55
  /**
55
56
  * the current visible component
56
57
  */
@@ -273,6 +273,9 @@ class ComponentUI {
273
273
  });
274
274
  if (_uiFoundationUi().isBrowser) this.registerPubSub();
275
275
  }
276
+ get routes() {
277
+ return this.routeSlot.toArray().map(([key, routes]) => [key, Array.isArray(routes) ? [...(0, _lodash().default)(routes)] : [routes]]);
278
+ }
276
279
 
277
280
  /**
278
281
  * the current visible component
@@ -303,7 +306,8 @@ class ComponentUI {
303
306
  path: options.path,
304
307
  useComponent: options.useComponent,
305
308
  componentIdStr: options.componentId,
306
- useComponentFilters: options.useComponentFilters
309
+ useComponentFilters: options.useComponentFilters,
310
+ overriddenRoutes: options.routes
307
311
  });
308
312
  }
309
313
  getMenu(host, options = {}) {
@@ -1 +1 @@
1
- {"version":3,"names":["ComponentUI","constructor","pubsub","routeSlot","navSlot","consumeMethodSlot","widgetSlot","menuItemSlot","pageItemSlot","componentSearchResultSlot","commandBarUI","reactRouterUi","packageName","activeComponent","version","id","versionString","formatToInstallableVersion","copy","action","toString","displayName","keybinding","copyNpmId","category","title","keyChar","handler","run","comp","options","latest","packageVersion","Title","width","Component","ignoreVersion","name","currentLane","order","menuItems","register","items","totalPlugins","flatten","values","componentSearcher","updatePlugins","components","update","ComponentSearcher","navigate","navigateTo","isBrowser","registerPubSub","snapToSemver","sub","PreviewAspect","be","type","ClickInsideAnIframeEvent","TYPE","event","MouseEvent","view","window","bubbles","cancelable","body","document","dispatchEvent","getComponentUI","host","handleComponentChange","path","useComponent","componentId","useComponentFilters","getMenu","className","skipRightSide","RightNode","listMenuItems","mainMenuItems","groupBy","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';\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 { groupBy } from 'lodash';\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';\nimport { snapToSemver } from '@teambit/component-package-version';\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 readonly 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 formatToInstallableVersion(version: string) {\n return snapToSemver(version);\n }\n\n private copyNpmId = () => {\n const packageName = this.activeComponent?.packageName;\n if (packageName) {\n const version = this.activeComponent?.id.version;\n const versionString = version ? `@${this.formatToInstallableVersion(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 const packageVersion = comp.version === comp.latest ? '' : `@${this.formatToInstallableVersion(comp.version)}`;\n\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}${packageVersion}`}\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 className={options.className}\n skipRightSide={options.skipRightSide}\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 RightNode={options.RightNode}\n />\n );\n }\n\n listMenuItems() {\n const mainMenuItems = groupBy(flatten(this.menuItemSlot.values()), 'category');\n return mainMenuItems;\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","formatToInstallableVersion","copy","action","toString","displayName","keybinding","copyNpmId","category","title","keyChar","handler","run","comp","options","latest","packageVersion","Title","width","Component","ignoreVersion","name","currentLane","order","menuItems","register","items","totalPlugins","flatten","values","componentSearcher","updatePlugins","components","update","ComponentSearcher","navigate","navigateTo","isBrowser","registerPubSub","routes","toArray","map","key","Array","isArray","snapToSemver","sub","PreviewAspect","be","type","ClickInsideAnIframeEvent","TYPE","event","MouseEvent","view","window","bubbles","cancelable","body","document","dispatchEvent","getComponentUI","host","handleComponentChange","path","useComponent","componentId","useComponentFilters","getMenu","className","skipRightSide","RightNode","listMenuItems","mainMenuItems","groupBy","registerRoute","registerNavigation","nav","props","registerConsumeMethod","consumeMethods","registerWidget","widget","provider","reactRouterUI","config","pageSlot","componentUI","aspectSection","AspectSection","registerSearchResultWidget","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';\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 { groupBy } from 'lodash';\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';\nimport { snapToSemver } from '@teambit/component-package-version';\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 readonly 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 get routes() {\n return this.routeSlot\n .toArray()\n .map(([key, routes]) => [key, Array.isArray(routes) ? [...flatten(routes)] : [routes]] as [string, RouteProps[]]);\n }\n\n /**\n * the current visible component\n */\n private activeComponent?: ComponentModel;\n\n formatToInstallableVersion(version: string) {\n return snapToSemver(version);\n }\n\n private copyNpmId = () => {\n const packageName = this.activeComponent?.packageName;\n if (packageName) {\n const version = this.activeComponent?.id.version;\n const versionString = version ? `@${this.formatToInstallableVersion(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 const packageVersion = comp.version === comp.latest ? '' : `@${this.formatToInstallableVersion(comp.version)}`;\n\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}${packageVersion}`}\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 overriddenRoutes={options.routes}\n />\n );\n }\n\n getMenu(host: string, options: GetComponentsOptions = {}) {\n return (\n <ComponentMenu\n className={options.className}\n skipRightSide={options.skipRightSide}\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 RightNode={options.RightNode}\n />\n );\n }\n\n listMenuItems() {\n const mainMenuItems = groupBy(flatten(this.menuItemSlot.values()), 'category');\n return mainMenuItems;\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,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { RouteProps } from 'react-router-dom';
2
3
  import type { UseComponentType } from './ui/use-component';
3
4
  import { Filters } from './ui/use-component-query';
4
5
  export declare type GetComponentsOptions = {
@@ -9,4 +10,5 @@ export declare type GetComponentsOptions = {
9
10
  skipRightSide?: boolean;
10
11
  RightNode?: React.ReactNode;
11
12
  className?: string;
13
+ routes?: RouteProps[];
12
14
  };
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["get-component-opts.ts"],"sourcesContent":["import React from 'react';\nimport 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 skipRightSide?: boolean;\n RightNode?: React.ReactNode;\n className?: string;\n};\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["get-component-opts.ts"],"sourcesContent":["import React from 'react';\nimport { RouteProps } from 'react-router-dom';\nimport 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 skipRightSide?: boolean;\n RightNode?: React.ReactNode;\n className?: string;\n routes?: RouteProps[];\n};\n"],"mappings":""}
@@ -1,5 +1,5 @@
1
- import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.1038/dist/component.composition.js';
2
- import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.1038/dist/component.docs.mdx';
1
+ import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.1040/dist/component.composition.js';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.1040/dist/component.docs.mdx';
3
3
 
4
4
  export const compositions = [compositions_0];
5
5
  export const overview = [overview_0];
@@ -1,4 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
+ import { RouteProps } from 'react-router-dom';
2
3
  import { RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';
3
4
  import { SlotRegistry } from '@teambit/harmony';
4
5
  import { UseComponentType } from './use-component';
@@ -12,6 +13,7 @@ export declare type ComponentPageElement = {
12
13
  export declare type ComponentProps = {
13
14
  containerSlot?: ComponentPageSlot;
14
15
  routeSlot: RouteSlot;
16
+ overriddenRoutes?: RouteProps[];
15
17
  host: string;
16
18
  onComponentChange?: (activeComponent?: ComponentModel) => void;
17
19
  useComponent?: UseComponentType;
@@ -22,4 +24,4 @@ export declare type ComponentProps = {
22
24
  /**
23
25
  * main UI component of the Component extension.
24
26
  */
25
- export declare function Component({ routeSlot, containerSlot, host, onComponentChange, componentIdStr, useComponent, path, useComponentFilters, }: ComponentProps): JSX.Element;
27
+ export declare function Component({ routeSlot, overriddenRoutes, containerSlot, host, onComponentChange, componentIdStr, useComponent, path, useComponentFilters, }: ComponentProps): JSX.Element;
@@ -81,6 +81,7 @@ function getComponentIdStr(componentIdStr) {
81
81
  */
82
82
  function Component({
83
83
  routeSlot,
84
+ overriddenRoutes,
84
85
  containerSlot,
85
86
  host,
86
87
  onComponentChange,
@@ -119,7 +120,8 @@ function Component({
119
120
  className: _componentModule().default.container
120
121
  }, routeSlot && /*#__PURE__*/_react().default.createElement(_uiFoundationUiReactRouter().SlotRouter, {
121
122
  parentPath: `${resolvedComponentIdStr}/*`,
122
- slot: routeSlot
123
+ slot: routeSlot,
124
+ routes: overriddenRoutes
123
125
  })), after));
124
126
  }
125
127
 
@@ -1 +1 @@
1
- {"version":3,"names":["getComponentIdStr","componentIdStr","isFunction","Component","routeSlot","containerSlot","host","onComponentChange","useComponent","path","useComponentFilters","idFromLocation","useIdFromLocation","_componentIdStr","componentId","ComponentID","fromString","undefined","resolvedComponentIdStr","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?: () => 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 || idFromLocation;\n const useComponentOptions = {\n logFilters: useComponentFilters?.(),\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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"}
1
+ {"version":3,"names":["getComponentIdStr","componentIdStr","isFunction","Component","routeSlot","overriddenRoutes","containerSlot","host","onComponentChange","useComponent","path","useComponentFilters","idFromLocation","useIdFromLocation","_componentIdStr","componentId","ComponentID","fromString","undefined","resolvedComponentIdStr","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 { RouteProps } from 'react-router-dom';\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 overriddenRoutes?: RouteProps[];\n host: string;\n onComponentChange?: (activeComponent?: ComponentModel) => void;\n useComponent?: UseComponentType;\n useComponentFilters?: () => 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 overriddenRoutes,\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 || idFromLocation;\n const useComponentOptions = {\n logFilters: useComponentFilters?.(),\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 && (\n <SlotRouter parentPath={`${resolvedComponentIdStr}/*`} slot={routeSlot} routes={overriddenRoutes} />\n )}\n </div>\n {after}\n </ComponentProvider>\n </ComponentDescriptorProvider>\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/component",
3
- "version": "0.0.1038",
3
+ "version": "0.0.1040",
4
4
  "homepage": "https://bit.cloud/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.1038"
9
+ "version": "0.0.1040"
10
10
  },
11
11
  "dependencies": {
12
12
  "@teambit/any-fs": "0.0.5",
@@ -36,39 +36,39 @@
36
36
  "@teambit/design.navigation.responsive-navbar": "0.0.5",
37
37
  "@teambit/base-ui.layout.breakpoints": "1.0.0",
38
38
  "@teambit/ui-foundation.ui.menu-widget-icon": "0.0.497",
39
- "@teambit/aspect-loader": "0.0.1038",
40
- "@teambit/graph": "0.0.1038",
39
+ "@teambit/aspect-loader": "0.0.1040",
40
+ "@teambit/graph": "0.0.1040",
41
41
  "@teambit/toolbox.path.match-patterns": "0.0.9",
42
42
  "@teambit/toolbox.string.capitalize": "0.0.490",
43
- "@teambit/cli": "0.0.699",
44
- "@teambit/express": "0.0.797",
45
- "@teambit/graphql": "0.0.1038",
43
+ "@teambit/cli": "0.0.701",
44
+ "@teambit/express": "0.0.799",
45
+ "@teambit/graphql": "0.0.1040",
46
46
  "@teambit/bit-error": "0.0.402",
47
- "@teambit/command-bar": "0.0.1038",
47
+ "@teambit/command-bar": "0.0.1040",
48
48
  "@teambit/component-package-version": "0.0.422",
49
49
  "@teambit/component.ui.deprecation-icon": "0.0.504",
50
- "@teambit/preview": "0.0.1038",
51
- "@teambit/pubsub": "0.0.1038",
52
- "@teambit/react-router": "0.0.1038",
50
+ "@teambit/preview": "0.0.1040",
51
+ "@teambit/pubsub": "0.0.1040",
52
+ "@teambit/react-router": "0.0.1040",
53
53
  "@teambit/ui-foundation.ui.is-browser": "0.0.495",
54
54
  "@teambit/ui-foundation.ui.main-dropdown": "0.0.497",
55
55
  "@teambit/ui-foundation.ui.react-router.slot-router": "0.0.501",
56
56
  "@teambit/ui-foundation.ui.use-box.menu": "0.0.133",
57
- "@teambit/ui": "0.0.1038",
57
+ "@teambit/ui": "0.0.1040",
58
58
  "@teambit/component-issues": "0.0.89",
59
59
  "@teambit/ui-foundation.ui.hooks.use-data-query": "0.0.500",
60
60
  "@teambit/cli-table": "0.0.41",
61
- "@teambit/component-descriptor": "0.0.268",
61
+ "@teambit/component-descriptor": "0.0.270",
62
62
  "@teambit/ui-foundation.ui.react-router.use-query": "0.0.496",
63
63
  "@teambit/harmony.ui.aspect-box": "0.0.497",
64
- "@teambit/compositions": "0.0.1038",
65
- "@teambit/deprecation": "0.0.1038",
66
- "@teambit/envs": "0.0.1038",
64
+ "@teambit/compositions": "0.0.1040",
65
+ "@teambit/deprecation": "0.0.1040",
66
+ "@teambit/envs": "0.0.1040",
67
67
  "@teambit/legacy-component-log": "0.0.399",
68
68
  "@teambit/envs.ui.env-icon": "0.0.495",
69
- "@teambit/component.ui.version-dropdown": "0.0.756",
70
- "@teambit/lanes.hooks.use-lanes": "0.0.162",
71
- "@teambit/lanes.ui.models.lanes-model": "0.0.115",
69
+ "@teambit/component.ui.version-dropdown": "0.0.758",
70
+ "@teambit/lanes.hooks.use-lanes": "0.0.164",
71
+ "@teambit/lanes.ui.models.lanes-model": "0.0.117",
72
72
  "@teambit/ui-foundation.ui.full-loader": "0.0.495",
73
73
  "@teambit/ui-foundation.ui.use-box.dropdown": "0.0.132"
74
74
  },
@@ -89,7 +89,7 @@
89
89
  "peerDependencies": {
90
90
  "@apollo/client": "^3.6.0",
91
91
  "react-router-dom": "^6.0.0",
92
- "@teambit/legacy": "1.0.479",
92
+ "@teambit/legacy": "1.0.480",
93
93
  "react": "^16.8.0 || ^17.0.0",
94
94
  "react-dom": "^16.8.0 || ^17.0.0"
95
95
  },
package/ui/component.tsx CHANGED
@@ -1,4 +1,5 @@
1
1
  import React, { useEffect, ReactNode, useMemo } from 'react';
2
+ import { RouteProps } from 'react-router-dom';
2
3
  import flatten from 'lodash.flatten';
3
4
  import { RouteSlot, SlotRouter } from '@teambit/ui-foundation.ui.react-router.slot-router';
4
5
  import { SlotRegistry } from '@teambit/harmony';
@@ -20,6 +21,7 @@ export type ComponentPageElement = {
20
21
  export type ComponentProps = {
21
22
  containerSlot?: ComponentPageSlot;
22
23
  routeSlot: RouteSlot;
24
+ overriddenRoutes?: RouteProps[];
23
25
  host: string;
24
26
  onComponentChange?: (activeComponent?: ComponentModel) => void;
25
27
  useComponent?: UseComponentType;
@@ -38,6 +40,7 @@ function getComponentIdStr(componentIdStr?: string | (() => string | undefined))
38
40
  */
39
41
  export function Component({
40
42
  routeSlot,
43
+ overriddenRoutes,
41
44
  containerSlot,
42
45
  host,
43
46
  onComponentChange,
@@ -77,7 +80,9 @@ export function Component({
77
80
  <ComponentProvider component={component}>
78
81
  {before}
79
82
  <div className={styles.container}>
80
- {routeSlot && <SlotRouter parentPath={`${resolvedComponentIdStr}/*`} slot={routeSlot} />}
83
+ {routeSlot && (
84
+ <SlotRouter parentPath={`${resolvedComponentIdStr}/*`} slot={routeSlot} routes={overriddenRoutes} />
85
+ )}
81
86
  </div>
82
87
  {after}
83
88
  </ComponentProvider>