@teambit/component 0.0.784 → 0.0.787

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.
Files changed (43) hide show
  1. package/component.ui.runtime.tsx +14 -5
  2. package/dist/aspect-entry.d.ts +2 -10
  3. package/dist/aspect-entry.js.map +1 -1
  4. package/dist/aspect-list.d.ts +1 -10
  5. package/dist/component-interface.d.ts +22 -0
  6. package/dist/component-interface.js +3 -0
  7. package/dist/component-interface.js.map +1 -0
  8. package/dist/component.d.ts +6 -1
  9. package/dist/component.graphql.d.ts +1 -10
  10. package/dist/component.js +10 -0
  11. package/dist/component.js.map +1 -1
  12. package/dist/component.main.runtime.d.ts +1 -2
  13. package/dist/component.main.runtime.js +3 -18
  14. package/dist/component.main.runtime.js.map +1 -1
  15. package/dist/component.ui.runtime.d.ts +3 -2
  16. package/dist/component.ui.runtime.js +15 -7
  17. package/dist/component.ui.runtime.js.map +1 -1
  18. package/dist/config.d.ts +0 -3
  19. package/dist/config.js.map +1 -1
  20. package/dist/get-component-opts.d.ts +5 -0
  21. package/dist/get-component-opts.js +3 -0
  22. package/dist/get-component-opts.js.map +1 -0
  23. package/dist/index.d.ts +1 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/ui/component.d.ts +4 -1
  26. package/dist/ui/component.js +23 -8
  27. package/dist/ui/component.js.map +1 -1
  28. package/dist/ui/menu/menu.d.ts +4 -1
  29. package/dist/ui/menu/menu.js +23 -8
  30. package/dist/ui/menu/menu.js.map +1 -1
  31. package/dist/ui/use-component-query.js +8 -3
  32. package/dist/ui/use-component-query.js.map +1 -1
  33. package/dist/ui/use-component.d.ts +2 -0
  34. package/dist/ui/use-component.js +6 -2
  35. package/dist/ui/use-component.js.map +1 -1
  36. package/package-tar/teambit-component-0.0.787.tgz +0 -0
  37. package/package.json +20 -50
  38. package/{preview-1657251036992.js → preview-1657623030826.js} +2 -2
  39. package/ui/component.tsx +24 -10
  40. package/ui/menu/menu.tsx +21 -7
  41. package/ui/use-component-query.ts +9 -3
  42. package/ui/use-component.tsx +6 -2
  43. package/package-tar/teambit-component-0.0.784.tgz +0 -0
package/ui/component.tsx CHANGED
@@ -3,12 +3,12 @@ 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
5
  import { useLanesContext } from '@teambit/lanes.ui.lanes';
6
-
7
6
  import styles from './component.module.scss';
8
7
  import { ComponentProvider, ComponentDescriptorProvider } from './context';
9
- import { useComponent } from './use-component';
8
+ import { useComponent as useComponentQuery, UseComponentType } from './use-component';
10
9
  import { ComponentModel } from './component-model';
11
10
  import { useIdFromLocation } from './use-component-from-location';
11
+ import { ComponentID } from '..';
12
12
 
13
13
  export type ComponentPageSlot = SlotRegistry<ComponentPageElement[]>;
14
14
  export type ComponentPageElement = {
@@ -21,22 +21,36 @@ export type ComponentProps = {
21
21
  routeSlot: RouteSlot;
22
22
  host: string;
23
23
  onComponentChange?: (activeComponent?: ComponentModel) => void;
24
+ useComponent?: UseComponentType;
25
+ componentIdStr?: string;
24
26
  };
25
27
 
26
28
  /**
27
29
  * main UI component of the Component extension.
28
30
  */
29
- export function Component({ routeSlot, containerSlot, host, onComponentChange }: ComponentProps) {
30
- const componentId = useIdFromLocation();
31
+ export function Component({
32
+ routeSlot,
33
+ containerSlot,
34
+ host,
35
+ onComponentChange,
36
+ componentIdStr,
37
+ useComponent,
38
+ }: ComponentProps) {
39
+ const idFromLocation = useIdFromLocation();
40
+ const componentId = componentIdStr ? ComponentID.fromString(componentIdStr) : undefined;
41
+ const fullName = componentId?.fullName || idFromLocation;
31
42
  const lanesContext = useLanesContext();
32
- const laneComponent = componentId ? lanesContext?.resolveComponent(componentId) : undefined;
33
- const useComponentOptions = laneComponent && {
34
- logFilters: { log: { logHead: laneComponent.version } },
43
+ const laneComponent = fullName
44
+ ? lanesContext?.resolveComponent(fullName)
45
+ : undefined;
46
+ const useComponentOptions = {
47
+ logFilters: laneComponent && { log: { logHead: laneComponent.version } },
48
+ customUseComponent: useComponent,
35
49
  };
36
50
 
37
- const { component, componentDescriptor, error } = useComponent(
51
+ const { component, componentDescriptor, error } = useComponentQuery(
38
52
  host,
39
- laneComponent?.id.toString() || componentId,
53
+ laneComponent?.id.toString() || componentId?.toString() || idFromLocation,
40
54
  useComponentOptions
41
55
  );
42
56
  // trigger onComponentChange when component changes
@@ -56,7 +70,7 @@ export function Component({ routeSlot, containerSlot, host, onComponentChange }:
56
70
  <ComponentProvider component={component}>
57
71
  {before}
58
72
  <div className={styles.container}>
59
- {routeSlot && <SlotRouter parentPath={`${componentId}/*`} slot={routeSlot} />}
73
+ {routeSlot && <SlotRouter parentPath={`${fullName}/*`} slot={routeSlot} />}
60
74
  </div>
61
75
  {after}
62
76
  </ComponentProvider>
package/ui/menu/menu.tsx CHANGED
@@ -12,12 +12,13 @@ import { Menu as ConsumeMethodsMenu } from '@teambit/ui-foundation.ui.use-box.me
12
12
  import { LaneModel, useLanesContext } from '@teambit/lanes.ui.lanes';
13
13
  import { LegacyComponentLog } from '@teambit/legacy-component-log';
14
14
  import type { ComponentModel } from '../component-model';
15
- import { useComponent } from '../use-component';
15
+ import { useComponent as useComponentQuery, UseComponentType } from '../use-component';
16
16
  import { MenuNav } from './menu-nav';
17
17
  import { MobileMenuNav } from './mobile-menu-nav';
18
18
  import styles from './menu.module.scss';
19
19
  import { OrderedNavigationSlot, ConsumeMethodSlot } from './nav-plugin';
20
20
  import { useIdFromLocation } from '../use-component-from-location';
21
+ import { ComponentID } from '../..';
21
22
 
22
23
  export type MenuProps = {
23
24
  className?: string;
@@ -36,6 +37,10 @@ export type MenuProps = {
36
37
  menuItemSlot: MenuItemSlot;
37
38
 
38
39
  consumeMethodSlot: ConsumeMethodSlot;
40
+
41
+ componentIdStr?: string;
42
+
43
+ useComponent?: UseComponentType;
39
44
  };
40
45
 
41
46
  /**
@@ -48,21 +53,30 @@ export function ComponentMenu({
48
53
  host,
49
54
  menuItemSlot,
50
55
  consumeMethodSlot,
56
+ componentIdStr,
57
+ useComponent,
51
58
  }: MenuProps) {
52
- const componentId = useIdFromLocation();
59
+ const idFromLocation = useIdFromLocation();
60
+ const componentId = componentIdStr ? ComponentID.fromString(componentIdStr) : undefined;
61
+ const fullName = componentId?.fullName || idFromLocation;
53
62
  const lanesContext = useLanesContext();
54
- const laneComponent = componentId ? lanesContext?.resolveComponent(componentId) : undefined;
55
- const useComponentOptions = laneComponent && {
56
- logFilters: { log: { logHead: laneComponent.version } },
63
+ const laneComponent = fullName ? lanesContext?.resolveComponent(fullName) : undefined;
64
+ const useComponentOptions = {
65
+ logFilters: laneComponent && { log: { logHead: laneComponent.version } },
66
+ customUseComponent: useComponent,
57
67
  };
58
68
 
59
- const { component } = useComponent(host, laneComponent?.id.toString() || componentId, useComponentOptions);
69
+ const { component } = useComponentQuery(
70
+ host,
71
+ laneComponent?.id.toString() || componentId?.toStringWithoutVersion() || fullName,
72
+ useComponentOptions
73
+ );
60
74
  const mainMenuItems = useMemo(() => groupBy(flatten(menuItemSlot.values()), 'category'), [menuItemSlot]);
61
75
  if (!component) return <FullLoader />;
62
76
  return (
63
77
  <Routes>
64
78
  <Route
65
- path={`${componentId}/*`}
79
+ path={`${fullName}/*`}
66
80
  element={
67
81
  <div className={classnames(styles.topBar, className)}>
68
82
  <div className={styles.leftSide}>
@@ -24,8 +24,8 @@ export const componentOverviewFields = gql`
24
24
  # 'id' property in gql refers to a *global* identifier and used for caching.
25
25
  # this makes aspect data cache under the same key, even when they are under different components.
26
26
  # renaming the property fixes that.
27
- aspectId: id
28
- aspectData: data
27
+ id
28
+ data
29
29
  }
30
30
  elementsUrl
31
31
  description
@@ -244,7 +244,13 @@ export function useComponentQuery(componentId: string, host: string, filters?: F
244
244
  const rawComponent = data?.getHost?.get;
245
245
  return useMemo(() => {
246
246
  const aspectList = {
247
- entries: rawComponent?.aspects,
247
+ entries: rawComponent?.aspects.map((aspectObject) => {
248
+ return {
249
+ ...aspectObject,
250
+ aspectId: aspectObject.id,
251
+ aspectData: aspectObject.data
252
+ };
253
+ }),
248
254
  };
249
255
  const id = rawComponent && ComponentID.fromObject(rawComponent.id);
250
256
  return {
@@ -13,18 +13,22 @@ export type Component = {
13
13
  export type UseComponentOptions = {
14
14
  version?: string;
15
15
  logFilters?: Filters;
16
+ customUseComponent?: UseComponentType
16
17
  };
17
18
 
19
+ export type UseComponentType = (id: string, host: string, filters?: Filters) => Component
20
+
18
21
  export function useComponent(host: string, id?: string, options?: UseComponentOptions): Component {
19
22
  const query = useQuery();
20
- const { version, logFilters } = options || {};
23
+ const { version, logFilters, customUseComponent } = options || {};
21
24
  const componentVersion = (version || query.get('version')) ?? undefined;
22
25
 
23
26
  if (!id) throw new TypeError('useComponent received no component id');
24
27
 
25
28
  const componentIdStr = withVersion(id, componentVersion);
29
+ const targetUseComponent = customUseComponent || useComponentQuery;
26
30
 
27
- return useComponentQuery(componentIdStr, host, logFilters);
31
+ return targetUseComponent(componentIdStr, host, logFilters);
28
32
  }
29
33
 
30
34
  function withVersion(id: string, version?: string) {