@teambit/component 0.0.786 → 0.0.789

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 (38) 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.ui.runtime.d.ts +3 -2
  13. package/dist/component.ui.runtime.js +15 -7
  14. package/dist/component.ui.runtime.js.map +1 -1
  15. package/dist/get-component-opts.d.ts +5 -0
  16. package/dist/get-component-opts.js +3 -0
  17. package/dist/get-component-opts.js.map +1 -0
  18. package/dist/index.d.ts +1 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/ui/component.d.ts +4 -1
  21. package/dist/ui/component.js +23 -8
  22. package/dist/ui/component.js.map +1 -1
  23. package/dist/ui/menu/menu.d.ts +4 -1
  24. package/dist/ui/menu/menu.js +23 -8
  25. package/dist/ui/menu/menu.js.map +1 -1
  26. package/dist/ui/use-component-query.js +8 -3
  27. package/dist/ui/use-component-query.js.map +1 -1
  28. package/dist/ui/use-component.d.ts +2 -0
  29. package/dist/ui/use-component.js +6 -2
  30. package/dist/ui/use-component.js.map +1 -1
  31. package/package-tar/teambit-component-0.0.789.tgz +0 -0
  32. package/package.json +18 -18
  33. package/{preview-1657510339341.js → preview-1657769253704.js} +2 -2
  34. package/ui/component.tsx +22 -10
  35. package/ui/menu/menu.tsx +21 -7
  36. package/ui/use-component-query.ts +9 -3
  37. package/ui/use-component.tsx +6 -2
  38. package/package-tar/teambit-component-0.0.786.tgz +0 -0
@@ -22,6 +22,7 @@ import { ComponentModel } from './ui';
22
22
  import { Component, ComponentPageElement, ComponentPageSlot } from './ui/component';
23
23
  import { ComponentResultPlugin, ComponentSearcher } from './ui/component-searcher';
24
24
  import { ConsumeMethodSlot, ConsumePlugin, ComponentMenu, NavPlugin, OrderedNavigationSlot } from './ui/menu';
25
+ import { GetComponentsOptions } from './get-component-opts';
25
26
 
26
27
  export type ComponentSearchResultSlot = SlotRegistry<ComponentResultPlugin[]>;
27
28
 
@@ -165,18 +166,20 @@ export class ComponentUI {
165
166
  this.activeComponent = activeComponent;
166
167
  };
167
168
 
168
- getComponentUI(host: string) {
169
+ getComponentUI(host: string, options: GetComponentsOptions = {}) {
169
170
  return (
170
171
  <Component
171
172
  routeSlot={this.routeSlot}
172
173
  containerSlot={this.pageItemSlot}
173
174
  onComponentChange={this.handleComponentChange}
174
175
  host={host}
176
+ useComponent={options.useComponent}
177
+ componentIdStr={options.componentId}
175
178
  />
176
179
  );
177
180
  }
178
181
 
179
- getMenu(host: string) {
182
+ getMenu(host: string, opts: GetComponentsOptions = {}) {
180
183
  return (
181
184
  <ComponentMenu
182
185
  navigationSlot={this.navSlot}
@@ -184,6 +187,8 @@ export class ComponentUI {
184
187
  widgetSlot={this.widgetSlot}
185
188
  host={host}
186
189
  menuItemSlot={this.menuItemSlot}
190
+ useComponent={opts.useComponent}
191
+ componentIdStr={opts.componentId}
187
192
  />
188
193
  );
189
194
  }
@@ -225,7 +230,7 @@ export class ComponentUI {
225
230
  };
226
231
 
227
232
  updateComponents = (components: ComponentModel[]) => {
228
- this.componentSearcher.update(components);
233
+ this.componentSearcher.update(components || []);
229
234
  };
230
235
 
231
236
  static dependencies = [PubsubAspect, CommandBarAspect, ReactRouterAspect];
@@ -272,8 +277,12 @@ export class ComponentUI {
272
277
  const aspectSection = new AspectSection();
273
278
  // @ts-ignore
274
279
  componentUI.registerSearchResultWidget({ key: 'deprecation', end: DeprecationIcon });
275
- componentUI.commandBarUI.addCommand(...componentUI.keyBindings);
276
- commandBarUI.addSearcher(componentUI.componentSearcher);
280
+
281
+ if (componentUI.commandBarUI) {
282
+ componentUI.commandBarUI.addCommand(...componentUI.keyBindings);
283
+ commandBarUI.addSearcher(componentUI.componentSearcher);
284
+ }
285
+
277
286
  componentUI.registerMenuItem(componentUI.menuItems);
278
287
  componentUI.registerRoute(aspectSection.route);
279
288
  componentUI.registerWidget(aspectSection.navigationLink, aspectSection.order);
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import type { ExtensionDataEntry } from '@teambit/legacy/dist/consumer/config/extension-data';
5
5
  import { ComponentID } from '@teambit/component-id';
6
+ import { RawComponentMetadata } from './component-interface';
6
7
  export declare type Serializable = {
7
8
  toString(): string;
8
9
  };
@@ -34,14 +35,5 @@ export declare class AspectEntry {
34
35
  });
35
36
  transform(newData: SerializableMap): AspectEntry;
36
37
  clone(): AspectEntry;
37
- serialize(): {
38
- id: string;
39
- config: {
40
- [key: string]: any;
41
- };
42
- data: {
43
- [key: string]: any;
44
- };
45
- icon: string;
46
- };
38
+ serialize(): RawComponentMetadata;
47
39
  }
@@ -1 +1 @@
1
- {"version":3,"names":["AspectEntry","constructor","id","legacyEntry","legacy","isLegacy","config","__legacy","data","isRemoved","val","transform","newData","newEntry","clone","serialize","toString","icon"],"sources":["aspect-entry.ts"],"sourcesContent":["/**\n * avoid importing any (non-type) legacy code here. otherwise, PreviewTask will throw cryptic errors\n */\n\nimport type { ExtensionDataEntry } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport { ComponentID } from '@teambit/component-id';\n\nexport type Serializable = {\n toString(): string;\n};\n\nexport type SerializableMap = {\n [key: string]: Serializable;\n};\n\nexport type AspectData = {\n [key: string]: any;\n};\n\nexport type ResolveComponentIdFunc = (id: string) => Promise<ComponentID>;\nexport class AspectEntry {\n constructor(public id: ComponentID, private legacyEntry: ExtensionDataEntry) {}\n\n get legacy() {\n return this.legacyEntry;\n }\n\n get isLegacy(): boolean {\n if (this.config?.__legacy) return true;\n return false;\n }\n\n get config() {\n return this.legacy.config;\n }\n\n set config(config) {\n this.legacy.config = config;\n }\n\n get data(): { [key: string]: any } {\n return this.legacy.data;\n }\n\n get isRemoved(): boolean {\n return this.legacy.isRemoved;\n }\n\n // eslint-disable-next-line @typescript-eslint/adjacent-overload-signatures\n set data(val: { [key: string]: any }) {\n this.legacy.data = val;\n }\n\n transform(newData: SerializableMap): AspectEntry {\n const newEntry = this.clone();\n newEntry.data = newData;\n return new AspectEntry(this.id, newEntry.legacy);\n }\n\n clone(): AspectEntry {\n return new AspectEntry(this.id, this.legacyEntry.clone());\n }\n\n serialize() {\n return {\n id: this.id.toString(),\n config: this.config,\n data: this.data,\n icon: 'https://static.bit.dev/extensions-icons/default.svg', // TODO @gilad - once you connect the icon here please use this url as the default icon\n };\n }\n}\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAkBO,MAAMA,WAAN,CAAkB;EACvBC,WAAW,CAAQC,EAAR,EAAiCC,WAAjC,EAAkE;IAAA,KAA1DD,EAA0D,GAA1DA,EAA0D;IAAA,KAAjCC,WAAiC,GAAjCA,WAAiC;EAAE;;EAErE,IAANC,MAAM,GAAG;IACX,OAAO,KAAKD,WAAZ;EACD;;EAEW,IAARE,QAAQ,GAAY;IAAA;;IACtB,oBAAI,KAAKC,MAAT,yCAAI,aAAaC,QAAjB,EAA2B,OAAO,IAAP;IAC3B,OAAO,KAAP;EACD;;EAES,IAAND,MAAM,GAAG;IACX,OAAO,KAAKF,MAAL,CAAYE,MAAnB;EACD;;EAES,IAANA,MAAM,CAACA,MAAD,EAAS;IACjB,KAAKF,MAAL,CAAYE,MAAZ,GAAqBA,MAArB;EACD;;EAEO,IAAJE,IAAI,GAA2B;IACjC,OAAO,KAAKJ,MAAL,CAAYI,IAAnB;EACD;;EAEY,IAATC,SAAS,GAAY;IACvB,OAAO,KAAKL,MAAL,CAAYK,SAAnB;EACD,CA1BsB,CA4BvB;;;EACQ,IAAJD,IAAI,CAACE,GAAD,EAA8B;IACpC,KAAKN,MAAL,CAAYI,IAAZ,GAAmBE,GAAnB;EACD;;EAEDC,SAAS,CAACC,OAAD,EAAwC;IAC/C,MAAMC,QAAQ,GAAG,KAAKC,KAAL,EAAjB;IACAD,QAAQ,CAACL,IAAT,GAAgBI,OAAhB;IACA,OAAO,IAAIZ,WAAJ,CAAgB,KAAKE,EAArB,EAAyBW,QAAQ,CAACT,MAAlC,CAAP;EACD;;EAEDU,KAAK,GAAgB;IACnB,OAAO,IAAId,WAAJ,CAAgB,KAAKE,EAArB,EAAyB,KAAKC,WAAL,CAAiBW,KAAjB,EAAzB,CAAP;EACD;;EAEDC,SAAS,GAAG;IACV,OAAO;MACLb,EAAE,EAAE,KAAKA,EAAL,CAAQc,QAAR,EADC;MAELV,MAAM,EAAE,KAAKA,MAFR;MAGLE,IAAI,EAAE,KAAKA,IAHN;MAILS,IAAI,EAAE,qDAJD,CAIwD;;IAJxD,CAAP;EAMD;;AAlDsB"}
1
+ {"version":3,"names":["AspectEntry","constructor","id","legacyEntry","legacy","isLegacy","config","__legacy","data","isRemoved","val","transform","newData","newEntry","clone","serialize","toString","icon"],"sources":["aspect-entry.ts"],"sourcesContent":["/**\n * avoid importing any (non-type) legacy code here. otherwise, PreviewTask will throw cryptic errors\n */\n\nimport type { ExtensionDataEntry } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport { ComponentID } from '@teambit/component-id';\nimport { RawComponentMetadata } from './component-interface';\n\nexport type Serializable = {\n toString(): string;\n};\n\nexport type SerializableMap = {\n [key: string]: Serializable;\n};\n\nexport type AspectData = {\n [key: string]: any;\n};\n\nexport type ResolveComponentIdFunc = (id: string) => Promise<ComponentID>;\nexport class AspectEntry {\n constructor(public id: ComponentID, private legacyEntry: ExtensionDataEntry) {}\n\n get legacy() {\n return this.legacyEntry;\n }\n\n get isLegacy(): boolean {\n if (this.config?.__legacy) return true;\n return false;\n }\n\n get config() {\n return this.legacy.config;\n }\n\n set config(config) {\n this.legacy.config = config;\n }\n\n get data(): { [key: string]: any } {\n return this.legacy.data;\n }\n\n get isRemoved(): boolean {\n return this.legacy.isRemoved;\n }\n\n // eslint-disable-next-line @typescript-eslint/adjacent-overload-signatures\n set data(val: { [key: string]: any }) {\n this.legacy.data = val;\n }\n\n transform(newData: SerializableMap): AspectEntry {\n const newEntry = this.clone();\n newEntry.data = newData;\n return new AspectEntry(this.id, newEntry.legacy);\n }\n\n clone(): AspectEntry {\n return new AspectEntry(this.id, this.legacyEntry.clone());\n }\n\n serialize(): RawComponentMetadata {\n return {\n id: this.id.toString(),\n config: this.config,\n data: this.data,\n icon: 'https://static.bit.dev/extensions-icons/default.svg', // TODO @gilad - once you connect the icon here please use this url as the default icon\n };\n }\n}\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAmBO,MAAMA,WAAN,CAAkB;EACvBC,WAAW,CAAQC,EAAR,EAAiCC,WAAjC,EAAkE;IAAA,KAA1DD,EAA0D,GAA1DA,EAA0D;IAAA,KAAjCC,WAAiC,GAAjCA,WAAiC;EAAE;;EAErE,IAANC,MAAM,GAAG;IACX,OAAO,KAAKD,WAAZ;EACD;;EAEW,IAARE,QAAQ,GAAY;IAAA;;IACtB,oBAAI,KAAKC,MAAT,yCAAI,aAAaC,QAAjB,EAA2B,OAAO,IAAP;IAC3B,OAAO,KAAP;EACD;;EAES,IAAND,MAAM,GAAG;IACX,OAAO,KAAKF,MAAL,CAAYE,MAAnB;EACD;;EAES,IAANA,MAAM,CAACA,MAAD,EAAS;IACjB,KAAKF,MAAL,CAAYE,MAAZ,GAAqBA,MAArB;EACD;;EAEO,IAAJE,IAAI,GAA2B;IACjC,OAAO,KAAKJ,MAAL,CAAYI,IAAnB;EACD;;EAEY,IAATC,SAAS,GAAY;IACvB,OAAO,KAAKL,MAAL,CAAYK,SAAnB;EACD,CA1BsB,CA4BvB;;;EACQ,IAAJD,IAAI,CAACE,GAAD,EAA8B;IACpC,KAAKN,MAAL,CAAYI,IAAZ,GAAmBE,GAAnB;EACD;;EAEDC,SAAS,CAACC,OAAD,EAAwC;IAC/C,MAAMC,QAAQ,GAAG,KAAKC,KAAL,EAAjB;IACAD,QAAQ,CAACL,IAAT,GAAgBI,OAAhB;IACA,OAAO,IAAIZ,WAAJ,CAAgB,KAAKE,EAArB,EAAyBW,QAAQ,CAACT,MAAlC,CAAP;EACD;;EAEDU,KAAK,GAAgB;IACnB,OAAO,IAAId,WAAJ,CAAgB,KAAKE,EAArB,EAAyB,KAAKC,WAAL,CAAiBW,KAAjB,EAAzB,CAAP;EACD;;EAEDC,SAAS,GAAyB;IAChC,OAAO;MACLb,EAAE,EAAE,KAAKA,EAAL,CAAQc,QAAR,EADC;MAELV,MAAM,EAAE,KAAKA,MAFR;MAGLE,IAAI,EAAE,KAAKA,IAHN;MAILS,IAAI,EAAE,qDAJD,CAIwD;;IAJxD,CAAP;EAMD;;AAlDsB"}
@@ -33,16 +33,7 @@ export declare class AspectList {
33
33
  */
34
34
  pmap(predicate: (entry: AspectEntry) => Promise<AspectEntry>): Promise<AspectList>;
35
35
  toConfigObject(): {};
36
- serialize(): {
37
- id: string;
38
- config: {
39
- [key: string]: any;
40
- };
41
- data: {
42
- [key: string]: any;
43
- };
44
- icon: string;
45
- }[];
36
+ serialize(): import("./component-interface").RawComponentMetadata[];
46
37
  filter(ids?: string[]): AspectList;
47
38
  toLegacy(): ExtensionDataList;
48
39
  stringIds(): string[];
@@ -0,0 +1,22 @@
1
+ import { ComponentID } from '@teambit/component-id';
2
+ export interface IComponent {
3
+ /**
4
+ * id of the component.
5
+ */
6
+ id: ComponentID;
7
+ /**
8
+ * get function to retrieve aspect
9
+ */
10
+ get(aspectId: string): RawComponentMetadata | undefined;
11
+ /**
12
+ * determines whether a component is a modified state.
13
+ * TODO: consider to remove after handling component descriptors correctly.
14
+ */
15
+ isModified(): Promise<boolean>;
16
+ }
17
+ export declare type RawComponentMetadata = {
18
+ id: string;
19
+ config: Record<string, any>;
20
+ data: Record<string, any>;
21
+ icon?: string;
22
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ //# sourceMappingURL=component-interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["component-interface.ts"],"sourcesContent":["import { ComponentID } from '@teambit/component-id';\n\nexport interface IComponent {\n /**\n * id of the component.\n */\n id: ComponentID;\n\n /**\n * get function to retrieve aspect\n */\n get(aspectId: string): RawComponentMetadata | undefined;\n\n /**\n * determines whether a component is a modified state.\n * TODO: consider to remove after handling component descriptors correctly.\n */\n isModified(): Promise<boolean>;\n}\n\nexport type RawComponentMetadata = {\n id: string;\n config: Record<string, any>;\n data: Record<string, any>;\n icon?: string;\n};\n"],"mappings":""}
@@ -9,6 +9,7 @@ import { Snap } from './snap';
9
9
  import { State } from './state';
10
10
  import { TagMap } from './tag-map';
11
11
  import { Tag } from './tag';
12
+ import { IComponent, RawComponentMetadata } from './component-interface';
12
13
  declare type SnapsIterableOpts = {
13
14
  firstParentOnly?: boolean;
14
15
  stopFn?: (snap: Snap) => Promise<boolean>;
@@ -20,7 +21,7 @@ export declare type InvalidComponent = {
20
21
  /**
21
22
  * in-memory representation of a component.
22
23
  */
23
- export declare class Component {
24
+ export declare class Component implements IComponent {
24
25
  /**
25
26
  * component ID represented by the `ComponentId` type.
26
27
  */
@@ -79,6 +80,10 @@ export declare class Component {
79
80
  get buildStatus(): BuildStatus;
80
81
  get headTag(): Tag | undefined;
81
82
  get latest(): string | undefined;
83
+ /**
84
+ * get aspect data from current state.
85
+ */
86
+ get(id: string): RawComponentMetadata | undefined;
82
87
  getLogs(filter?: {
83
88
  type?: string;
84
89
  offset?: number;
@@ -18,16 +18,7 @@ export declare function componentSchema(componentExtension: ComponentMain): {
18
18
  tags: (component: any) => any;
19
19
  aspects: (component: Component, { include }: {
20
20
  include?: string[] | undefined;
21
- }) => {
22
- id: string;
23
- config: {
24
- [key: string]: any;
25
- };
26
- data: {
27
- [key: string]: any;
28
- };
29
- icon: string;
30
- }[];
21
+ }) => import("./component-interface").RawComponentMetadata[];
31
22
  logs: (component: Component, filter?: {
32
23
  type?: string | undefined;
33
24
  offset?: number | undefined;
package/dist/component.js CHANGED
@@ -157,6 +157,16 @@ class Component {
157
157
  throw err;
158
158
  }
159
159
  }
160
+ /**
161
+ * get aspect data from current state.
162
+ */
163
+
164
+
165
+ get(id) {
166
+ var _this$state$aspects$g;
167
+
168
+ return (_this$state$aspects$g = this.state.aspects.get(id)) === null || _this$state$aspects$g === void 0 ? void 0 : _this$state$aspects$g.serialize();
169
+ }
160
170
 
161
171
  async getLogs(filter) {
162
172
  const allLogs = await this.factory.getLogs(this.id, false, filter === null || filter === void 0 ? void 0 : filter.head);
@@ -1 +1 @@
1
- {"version":3,"names":["Component","constructor","id","head","_state","tags","TagMap","factory","mainFile","state","config","filesystem","buildStatus","_consumer","headTag","undefined","byHash","hash","latest","getLatest","err","CouldNotFindLatest","getLogs","filter","allLogs","type","limit","offset","sort","typeFilter","snap","tag","filteredLogs","slice","reverse","stringify","JSON","displayName","tokens","name","split","map","token","capitalize","join","version","isModified","isOutdated","latestTag","byVersion","isNew","Promise","resolve","loadState","snapId","getState","loadSnap","snapToGet","BitError","getSnap","snapsIterable","options","snapToStart","nextSnaps","done","iterator","next","value","currSnapId","shift","parents","length","firstParentOnly","push","concat","stopFn","Symbol","asyncIterator","getClosestTag","snapToStartFrom","tagsHashMap","getHashMap","has","iterable","snaps","hashOfLastSnap","get","checkout","write","path","fs","equals","component","toString"],"sources":["component.ts"],"sourcesContent":["import { AnyFS } from '@teambit/any-fs';\nimport { capitalize } from '@teambit/toolbox.string.capitalize';\nimport { SemVer } from 'semver';\nimport { ComponentID } from '@teambit/component-id';\nimport { BitError } from '@teambit/bit-error';\nimport { BuildStatus } from '@teambit/legacy/dist/constants';\n\nimport { slice } from 'lodash';\nimport { ComponentFactory } from './component-factory';\nimport ComponentFS from './component-fs';\n// import { NothingToSnap } from './exceptions';\nimport ComponentConfig from './config';\n// eslint-disable-next-line import/no-cycle\nimport { Snap } from './snap';\nimport { State } from './state';\nimport { TagMap } from './tag-map';\nimport { Tag } from './tag';\nimport { CouldNotFindLatest } from './exceptions';\n// import { Author } from './types';\n\ntype SnapsIterableOpts = {\n firstParentOnly?: boolean;\n stopFn?: (snap: Snap) => Promise<boolean>;\n};\n\nexport type InvalidComponent = { id: ComponentID; err: Error };\n\n/**\n * in-memory representation of a component.\n */\nexport class Component {\n constructor(\n /**\n * component ID represented by the `ComponentId` type.\n */\n readonly id: ComponentID,\n\n /**\n * head version of the component. can be `null` for new components.\n */\n readonly head: Snap | null = null,\n\n /**\n * state of the component.\n */\n private _state: State,\n\n /**\n * tags of the component.\n */\n readonly tags: TagMap = new TagMap(),\n\n /**\n * the component factory\n */\n private factory: ComponentFactory\n ) {}\n\n get mainFile() {\n return this.state.mainFile;\n }\n\n get state(): State {\n return this._state;\n }\n\n set state(state: State) {\n this._state = state;\n }\n\n /**\n * component configuration which is later generated to a component `package.json` and `bit.json`.\n */\n get config(): ComponentConfig {\n return this.state.config;\n }\n\n /**\n * in-memory representation of the component current filesystem.\n */\n get filesystem(): ComponentFS {\n return this.state.filesystem;\n }\n\n /**\n * build status of the component\n */\n get buildStatus(): BuildStatus {\n return this._state._consumer.buildStatus;\n }\n\n get headTag() {\n if (!this.head) return undefined;\n return this.tags.byHash(this.head.hash);\n }\n\n get latest(): string | undefined {\n if (!this.head) return undefined;\n try {\n return this.tags.getLatest();\n } catch (err: any) {\n if (err instanceof CouldNotFindLatest) {\n return this.head.hash;\n }\n throw err;\n }\n }\n\n async getLogs(filter?: { type?: string; offset?: number; limit?: number; head?: string; sort?: string }) {\n const allLogs = await this.factory.getLogs(this.id, false, filter?.head);\n\n if (!filter) return allLogs;\n\n const { type, limit, offset, sort } = filter;\n\n const typeFilter = (snap) => {\n if (type === 'tag') return snap.tag;\n if (type === 'snap') return !snap.tag;\n return true;\n };\n\n let filteredLogs = (type && allLogs.filter(typeFilter)) || allLogs;\n if (limit) {\n filteredLogs = slice(filteredLogs, offset, limit + (offset || 0));\n }\n\n if (sort && sort === 'asc') return filteredLogs;\n\n return filteredLogs.reverse();\n }\n\n stringify(): string {\n return JSON.stringify({\n id: this.id,\n head: this.head,\n });\n }\n\n /**\n * record component changes in the `Scope`.\n */\n // snap(author: Author, message = '') {\n // if (!this.isModified()) throw new NothingToSnap();\n // const snap = new Snap(this, author, message);\n\n // return new Component(this.id, snap, snap.state);\n // }\n\n /**\n * display name of the component.\n */\n get displayName() {\n const tokens = this.id.name.split('-').map((token) => capitalize(token));\n return tokens.join(' ');\n }\n\n /**\n * tag a component `Snap` with a semantic version. we follow SemVer specs as defined [here](https://semver.org/)).\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tag(version: SemVer) {\n // const snap = this.snap();\n // const tag = new Tag(version, snap);\n // this.tags.set(tag);\n }\n\n /**\n * determines whether this component is modified in the workspace.\n */\n isModified(): Promise<boolean> {\n return this.factory.isModified(this);\n }\n\n /**\n * is component isOutdated\n */\n isOutdated(): boolean {\n if (!this.latest) return false;\n const latestTag = this.tags.byVersion(this.latest);\n if (!latestTag) return false;\n if (this.head?.hash !== latestTag?.hash) return true;\n return false;\n }\n\n /**\n * determines whether this component is new.\n */\n isNew(): Promise<boolean> {\n return Promise.resolve(this.head === null);\n }\n\n // TODO: @david after snap we need to make sure to refactor here.\n loadState(snapId: string): Promise<State> {\n return this.factory.getState(this.id, snapId);\n }\n\n loadSnap(snapId?: string): Promise<Snap> {\n const snapToGet = snapId || this.head?.hash;\n if (!snapToGet) {\n throw new BitError('could not load snap for new components');\n }\n return this.factory.getSnap(this.id, snapToGet);\n }\n\n /**\n * Get iterable which iterate over snap parents lazily\n * @param snapId\n * @param options\n */\n snapsIterable(snapId?: string, options: SnapsIterableOpts = {}): AsyncIterable<Snap> {\n const snapToStart = snapId || this.head?.hash;\n let nextSnaps = [snapToStart];\n let done;\n if (!snapToStart) {\n done = true;\n }\n\n const iterator: AsyncIterator<Snap> = {\n next: async () => {\n if (done) {\n return { value: undefined, done };\n }\n const currSnapId = nextSnaps.shift();\n const snap = await this.loadSnap(currSnapId);\n if (snap.parents && snap.parents.length) {\n if (options.firstParentOnly) {\n nextSnaps.push(snap.parents[0]);\n } else {\n nextSnaps = nextSnaps.concat(snap.parents);\n }\n }\n if (!nextSnaps.length) {\n done = true;\n } else if (options.stopFn) {\n done = await options.stopFn(snap);\n }\n return { value: snap, done: undefined };\n },\n };\n return {\n [Symbol.asyncIterator]: () => iterator,\n };\n }\n\n /**\n * traverse recursively from the provided snap (or head) upwards until it finds a tag\n * @param snapToStartFrom\n */\n async getClosestTag(snapToStartFrom?: string): Promise<Tag | undefined> {\n const tagsHashMap = this.tags.getHashMap();\n const stopFn = async (snap: Snap) => {\n if (tagsHashMap.has(snap.hash)) {\n return true;\n }\n return false;\n };\n const iterable = this.snapsIterable(snapToStartFrom, { firstParentOnly: true, stopFn });\n const snaps: Snap[] = [];\n for await (const snap of iterable) {\n snaps.push(snap);\n }\n if (snaps.length) {\n const hashOfLastSnap = snaps[snaps.length - 1].hash;\n return tagsHashMap.get(hashOfLastSnap);\n }\n return undefined;\n }\n\n /**\n * checkout the component to a different version in its working tree.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n checkout(version: SemVer) {}\n\n /**\n * examine difference between two components.\n */\n // diff(other: Component): Difference {}\n\n /**\n * merge two different components\n */\n // merge(other: Component): Component {}\n\n /**\n * write a component to a given file system.\n * @param path root path to write the component\n * @param fs instance of any fs to use.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n write(path: string, fs?: AnyFS) {}\n\n /**\n *\n * Check if 2 components are equal\n * @param {Component} component\n * @returns {boolean}\n * @memberof Component\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n equals(component: Component): boolean {\n return component.id.toString() === this.id.toString();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["Component","constructor","id","head","_state","tags","TagMap","factory","mainFile","state","config","filesystem","buildStatus","_consumer","headTag","undefined","byHash","hash","latest","getLatest","err","CouldNotFindLatest","get","aspects","serialize","getLogs","filter","allLogs","type","limit","offset","sort","typeFilter","snap","tag","filteredLogs","slice","reverse","stringify","JSON","displayName","tokens","name","split","map","token","capitalize","join","version","isModified","isOutdated","latestTag","byVersion","isNew","Promise","resolve","loadState","snapId","getState","loadSnap","snapToGet","BitError","getSnap","snapsIterable","options","snapToStart","nextSnaps","done","iterator","next","value","currSnapId","shift","parents","length","firstParentOnly","push","concat","stopFn","Symbol","asyncIterator","getClosestTag","snapToStartFrom","tagsHashMap","getHashMap","has","iterable","snaps","hashOfLastSnap","checkout","write","path","fs","equals","component","toString"],"sources":["component.ts"],"sourcesContent":["import { AnyFS } from '@teambit/any-fs';\nimport { capitalize } from '@teambit/toolbox.string.capitalize';\nimport { SemVer } from 'semver';\nimport { ComponentID } from '@teambit/component-id';\nimport { BitError } from '@teambit/bit-error';\nimport { BuildStatus } from '@teambit/legacy/dist/constants';\n\nimport { slice } from 'lodash';\nimport { ComponentFactory } from './component-factory';\nimport ComponentFS from './component-fs';\n// import { NothingToSnap } from './exceptions';\nimport ComponentConfig from './config';\n// eslint-disable-next-line import/no-cycle\nimport { Snap } from './snap';\nimport { State } from './state';\nimport { TagMap } from './tag-map';\nimport { Tag } from './tag';\nimport { CouldNotFindLatest } from './exceptions';\nimport { IComponent, RawComponentMetadata } from './component-interface';\n// import { Author } from './types';\n\ntype SnapsIterableOpts = {\n firstParentOnly?: boolean;\n stopFn?: (snap: Snap) => Promise<boolean>;\n};\n\nexport type InvalidComponent = { id: ComponentID; err: Error };\n\n/**\n * in-memory representation of a component.\n */\nexport class Component implements IComponent {\n constructor(\n /**\n * component ID represented by the `ComponentId` type.\n */\n readonly id: ComponentID,\n\n /**\n * head version of the component. can be `null` for new components.\n */\n readonly head: Snap | null = null,\n\n /**\n * state of the component.\n */\n private _state: State,\n\n /**\n * tags of the component.\n */\n readonly tags: TagMap = new TagMap(),\n\n /**\n * the component factory\n */\n private factory: ComponentFactory\n ) {}\n\n get mainFile() {\n return this.state.mainFile;\n }\n\n get state(): State {\n return this._state;\n }\n\n set state(state: State) {\n this._state = state;\n }\n\n /**\n * component configuration which is later generated to a component `package.json` and `bit.json`.\n */\n get config(): ComponentConfig {\n return this.state.config;\n }\n\n /**\n * in-memory representation of the component current filesystem.\n */\n get filesystem(): ComponentFS {\n return this.state.filesystem;\n }\n\n /**\n * build status of the component\n */\n get buildStatus(): BuildStatus {\n return this._state._consumer.buildStatus;\n }\n\n get headTag() {\n if (!this.head) return undefined;\n return this.tags.byHash(this.head.hash);\n }\n\n get latest(): string | undefined {\n if (!this.head) return undefined;\n try {\n return this.tags.getLatest();\n } catch (err: any) {\n if (err instanceof CouldNotFindLatest) {\n return this.head.hash;\n }\n throw err;\n }\n }\n\n /**\n * get aspect data from current state.\n */\n get(id: string): RawComponentMetadata | undefined {\n return this.state.aspects.get(id)?.serialize();\n }\n\n async getLogs(filter?: { type?: string; offset?: number; limit?: number; head?: string; sort?: string }) {\n const allLogs = await this.factory.getLogs(this.id, false, filter?.head);\n\n if (!filter) return allLogs;\n\n const { type, limit, offset, sort } = filter;\n\n const typeFilter = (snap) => {\n if (type === 'tag') return snap.tag;\n if (type === 'snap') return !snap.tag;\n return true;\n };\n\n let filteredLogs = (type && allLogs.filter(typeFilter)) || allLogs;\n if (limit) {\n filteredLogs = slice(filteredLogs, offset, limit + (offset || 0));\n }\n\n if (sort && sort === 'asc') return filteredLogs;\n\n return filteredLogs.reverse();\n }\n\n stringify(): string {\n return JSON.stringify({\n id: this.id,\n head: this.head,\n });\n }\n\n /**\n * record component changes in the `Scope`.\n */\n // snap(author: Author, message = '') {\n // if (!this.isModified()) throw new NothingToSnap();\n // const snap = new Snap(this, author, message);\n\n // return new Component(this.id, snap, snap.state);\n // }\n\n /**\n * display name of the component.\n */\n get displayName() {\n const tokens = this.id.name.split('-').map((token) => capitalize(token));\n return tokens.join(' ');\n }\n\n /**\n * tag a component `Snap` with a semantic version. we follow SemVer specs as defined [here](https://semver.org/)).\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tag(version: SemVer) {\n // const snap = this.snap();\n // const tag = new Tag(version, snap);\n // this.tags.set(tag);\n }\n\n /**\n * determines whether this component is modified in the workspace.\n */\n isModified(): Promise<boolean> {\n return this.factory.isModified(this);\n }\n\n /**\n * is component isOutdated\n */\n isOutdated(): boolean {\n if (!this.latest) return false;\n const latestTag = this.tags.byVersion(this.latest);\n if (!latestTag) return false;\n if (this.head?.hash !== latestTag?.hash) return true;\n return false;\n }\n\n /**\n * determines whether this component is new.\n */\n isNew(): Promise<boolean> {\n return Promise.resolve(this.head === null);\n }\n\n // TODO: @david after snap we need to make sure to refactor here.\n loadState(snapId: string): Promise<State> {\n return this.factory.getState(this.id, snapId);\n }\n\n loadSnap(snapId?: string): Promise<Snap> {\n const snapToGet = snapId || this.head?.hash;\n if (!snapToGet) {\n throw new BitError('could not load snap for new components');\n }\n return this.factory.getSnap(this.id, snapToGet);\n }\n\n /**\n * Get iterable which iterate over snap parents lazily\n * @param snapId\n * @param options\n */\n snapsIterable(snapId?: string, options: SnapsIterableOpts = {}): AsyncIterable<Snap> {\n const snapToStart = snapId || this.head?.hash;\n let nextSnaps = [snapToStart];\n let done;\n if (!snapToStart) {\n done = true;\n }\n\n const iterator: AsyncIterator<Snap> = {\n next: async () => {\n if (done) {\n return { value: undefined, done };\n }\n const currSnapId = nextSnaps.shift();\n const snap = await this.loadSnap(currSnapId);\n if (snap.parents && snap.parents.length) {\n if (options.firstParentOnly) {\n nextSnaps.push(snap.parents[0]);\n } else {\n nextSnaps = nextSnaps.concat(snap.parents);\n }\n }\n if (!nextSnaps.length) {\n done = true;\n } else if (options.stopFn) {\n done = await options.stopFn(snap);\n }\n return { value: snap, done: undefined };\n },\n };\n return {\n [Symbol.asyncIterator]: () => iterator,\n };\n }\n\n /**\n * traverse recursively from the provided snap (or head) upwards until it finds a tag\n * @param snapToStartFrom\n */\n async getClosestTag(snapToStartFrom?: string): Promise<Tag | undefined> {\n const tagsHashMap = this.tags.getHashMap();\n const stopFn = async (snap: Snap) => {\n if (tagsHashMap.has(snap.hash)) {\n return true;\n }\n return false;\n };\n const iterable = this.snapsIterable(snapToStartFrom, { firstParentOnly: true, stopFn });\n const snaps: Snap[] = [];\n for await (const snap of iterable) {\n snaps.push(snap);\n }\n if (snaps.length) {\n const hashOfLastSnap = snaps[snaps.length - 1].hash;\n return tagsHashMap.get(hashOfLastSnap);\n }\n return undefined;\n }\n\n /**\n * checkout the component to a different version in its working tree.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n checkout(version: SemVer) {}\n\n /**\n * examine difference between two components.\n */\n // diff(other: Component): Difference {}\n\n /**\n * merge two different components\n */\n // merge(other: Component): Component {}\n\n /**\n * write a component to a given file system.\n * @param path root path to write the component\n * @param fs instance of any fs to use.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n write(path: string, fs?: AnyFS) {}\n\n /**\n *\n * Check if 2 components are equal\n * @param {Component} component\n * @returns {boolean}\n * @memberof Component\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n equals(component: Component): boolean {\n return component.id.toString() === this.id.toString();\n }\n}\n"],"mappings":"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"}
@@ -11,6 +11,7 @@ import { ComponentModel } from './ui';
11
11
  import { ComponentPageElement, ComponentPageSlot } from './ui/component';
12
12
  import { ComponentResultPlugin } from './ui/component-searcher';
13
13
  import { ConsumeMethodSlot, ConsumePlugin, NavPlugin, OrderedNavigationSlot } from './ui/menu';
14
+ import { GetComponentsOptions } from './get-component-opts';
14
15
  export declare type ComponentSearchResultSlot = SlotRegistry<ComponentResultPlugin[]>;
15
16
  export declare type Server = {
16
17
  env: string;
@@ -59,8 +60,8 @@ export declare class ComponentUI {
59
60
  private bitMethod;
60
61
  registerPubSub(): void;
61
62
  handleComponentChange: (activeComponent?: ComponentModel | undefined) => void;
62
- getComponentUI(host: string): JSX.Element;
63
- getMenu(host: string): JSX.Element;
63
+ getComponentUI(host: string, options?: GetComponentsOptions): JSX.Element;
64
+ getMenu(host: string, opts?: GetComponentsOptions): JSX.Element;
64
65
  registerRoute(routes: RouteProps[] | RouteProps): this;
65
66
  registerNavigation(nav: LinkProps, order?: number): void;
66
67
  registerConsumeMethod(...consumeMethods: ConsumePlugin[]): void;
@@ -319,7 +319,7 @@ class ComponentUI {
319
319
  this.componentSearcher.updatePlugins(totalPlugins);
320
320
  });
321
321
  (0, _defineProperty2().default)(this, "updateComponents", components => {
322
- this.componentSearcher.update(components);
322
+ this.componentSearcher.update(components || []);
323
323
  });
324
324
  this.componentSearcher = new (_componentSearcher().ComponentSearcher)({
325
325
  navigate: reactRouterUi.navigateTo
@@ -345,22 +345,26 @@ class ComponentUI {
345
345
  });
346
346
  }
347
347
 
348
- getComponentUI(host) {
348
+ getComponentUI(host, options = {}) {
349
349
  return /*#__PURE__*/_react().default.createElement(_component2().Component, {
350
350
  routeSlot: this.routeSlot,
351
351
  containerSlot: this.pageItemSlot,
352
352
  onComponentChange: this.handleComponentChange,
353
- host: host
353
+ host: host,
354
+ useComponent: options.useComponent,
355
+ componentIdStr: options.componentId
354
356
  });
355
357
  }
356
358
 
357
- getMenu(host) {
359
+ getMenu(host, opts = {}) {
358
360
  return /*#__PURE__*/_react().default.createElement(_menu().ComponentMenu, {
359
361
  navigationSlot: this.navSlot,
360
362
  consumeMethodSlot: this.consumeMethodSlot,
361
363
  widgetSlot: this.widgetSlot,
362
364
  host: host,
363
- menuItemSlot: this.menuItemSlot
365
+ menuItemSlot: this.menuItemSlot,
366
+ useComponent: opts.useComponent,
367
+ componentIdStr: opts.componentId
364
368
  });
365
369
  }
366
370
 
@@ -397,8 +401,12 @@ class ComponentUI {
397
401
  key: 'deprecation',
398
402
  end: _componentUi().DeprecationIcon
399
403
  });
400
- componentUI.commandBarUI.addCommand(...componentUI.keyBindings);
401
- commandBarUI.addSearcher(componentUI.componentSearcher);
404
+
405
+ if (componentUI.commandBarUI) {
406
+ componentUI.commandBarUI.addCommand(...componentUI.keyBindings);
407
+ commandBarUI.addSearcher(componentUI.componentSearcher);
408
+ }
409
+
402
410
  componentUI.registerMenuItem(componentUI.menuItems);
403
411
  componentUI.registerRoute(aspectSection.route);
404
412
  componentUI.registerWidget(aspectSection.navigationLink, aspectSection.order);
@@ -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","getMenu","registerRoute","routes","registerNavigation","nav","props","registerConsumeMethod","consumeMethods","registerWidget","widget","provider","reactRouterUI","config","pageSlot","componentUI","aspectSection","AspectSection","registerSearchResultWidget","key","end","DeprecationIcon","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';\n\nexport type ComponentSearchResultSlot = SlotRegistry<ComponentResultPlugin[]>;\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) {\n return (\n <Component\n routeSlot={this.routeSlot}\n containerSlot={this.pageItemSlot}\n onComponentChange={this.handleComponentChange}\n host={host}\n />\n );\n }\n\n getMenu(host: string) {\n return (\n <ComponentMenu\n navigationSlot={this.navSlot}\n consumeMethodSlot={this.consumeMethodSlot}\n widgetSlot={this.widgetSlot}\n host={host}\n menuItemSlot={this.menuItemSlot}\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\n static async provider(\n [pubsub, commandBarUI, reactRouterUI]: [PubsubUI, CommandBarUI, ReactRouterUI],\n config,\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 componentUI.commandBarUI.addCommand(...componentUI.keyBindings);\n commandBarUI.addSearcher(componentUI.componentSearcher);\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","useComponent","componentId","getMenu","opts","registerRoute","routes","registerNavigation","nav","props","registerConsumeMethod","consumeMethods","registerWidget","widget","provider","reactRouterUI","config","pageSlot","componentUI","aspectSection","AspectSection","registerSearchResultWidget","key","end","DeprecationIcon","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 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\n static async provider(\n [pubsub, commandBarUI, reactRouterUI]: [PubsubUI, CommandBarUI, ReactRouterUI],\n config,\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) {\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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"}
@@ -0,0 +1,5 @@
1
+ import type { UseComponentType } from './ui/use-component';
2
+ export declare type GetComponentsOptions = {
3
+ useComponent?: UseComponentType;
4
+ componentId?: string;
5
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ //# sourceMappingURL=get-component-opts.js.map
@@ -0,0 +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":""}
package/dist/index.d.ts CHANGED
@@ -10,6 +10,7 @@ export { AspectEntry, AspectData, ResolveComponentIdFunc } from './aspect-entry'
10
10
  export { Snap, SnapProps } from './snap/snap';
11
11
  export type { Author } from './snap/author';
12
12
  export { Tag, TagProps } from './tag/tag';
13
+ export type { IComponent } from './component-interface';
13
14
  export { State } from './state';
14
15
  export type { Hash } from './hash';
15
16
  export { TagMap } from './tag-map';
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 } 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 { 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, TopBarNavProps } from './ui/top-bar-nav';\nexport type { ShowFragment, ShowRow } 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;;AACA;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;;AAvBA;AACA;AAGA;AACA;AAqBA;AACA;eAEeA,4B"}
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 } 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, TopBarNavProps } from './ui/top-bar-nav';\nexport type { ShowFragment, ShowRow } 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,6 +1,7 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';
3
3
  import { SlotRegistry } from '@teambit/harmony';
4
+ import { UseComponentType } from './use-component';
4
5
  import { ComponentModel } from './component-model';
5
6
  export declare type ComponentPageSlot = SlotRegistry<ComponentPageElement[]>;
6
7
  export declare type ComponentPageElement = {
@@ -12,8 +13,10 @@ export declare type ComponentProps = {
12
13
  routeSlot: RouteSlot;
13
14
  host: string;
14
15
  onComponentChange?: (activeComponent?: ComponentModel) => void;
16
+ useComponent?: UseComponentType;
17
+ componentIdStr?: string;
15
18
  };
16
19
  /**
17
20
  * main UI component of the Component extension.
18
21
  */
19
- export declare function Component({ routeSlot, containerSlot, host, onComponentChange }: ComponentProps): JSX.Element;
22
+ export declare function Component({ routeSlot, containerSlot, host, onComponentChange, componentIdStr, useComponent, }: ComponentProps): JSX.Element;
@@ -89,6 +89,16 @@ function _useComponentFromLocation() {
89
89
  return data;
90
90
  }
91
91
 
92
+ function _() {
93
+ const data = require("..");
94
+
95
+ _ = function () {
96
+ return data;
97
+ };
98
+
99
+ return data;
100
+ }
101
+
92
102
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
93
103
 
94
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; }
@@ -100,23 +110,28 @@ function Component({
100
110
  routeSlot,
101
111
  containerSlot,
102
112
  host,
103
- onComponentChange
113
+ onComponentChange,
114
+ componentIdStr,
115
+ useComponent
104
116
  }) {
105
- const componentId = (0, _useComponentFromLocation().useIdFromLocation)();
117
+ 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;
106
120
  const lanesContext = (0, _lanesUi().useLanesContext)();
107
- const laneComponent = componentId ? lanesContext === null || lanesContext === void 0 ? void 0 : lanesContext.resolveComponent(componentId) : undefined;
108
- const useComponentOptions = laneComponent && {
109
- logFilters: {
121
+ const laneComponent = fullName ? lanesContext === null || lanesContext === void 0 ? void 0 : lanesContext.resolveComponent(fullName) : undefined;
122
+ const useComponentOptions = {
123
+ logFilters: laneComponent && {
110
124
  log: {
111
125
  logHead: laneComponent.version
112
126
  }
113
- }
127
+ },
128
+ customUseComponent: useComponent
114
129
  };
115
130
  const {
116
131
  component,
117
132
  componentDescriptor,
118
133
  error
119
- } = (0, _useComponent().useComponent)(host, (laneComponent === null || laneComponent === void 0 ? void 0 : laneComponent.id.toString()) || componentId, useComponentOptions); // trigger onComponentChange when component changes
134
+ } = (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
120
135
 
121
136
  (0, _react().useEffect)(() => onComponentChange === null || onComponentChange === void 0 ? void 0 : onComponentChange(component), [component]); // cleanup when unmounting component
122
137
 
@@ -133,7 +148,7 @@ function Component({
133
148
  }, before, /*#__PURE__*/_react().default.createElement("div", {
134
149
  className: _componentModule().default.container
135
150
  }, routeSlot && /*#__PURE__*/_react().default.createElement(_uiFoundationUiReactRouter().SlotRouter, {
136
- parentPath: `${componentId}/*`,
151
+ parentPath: `${fullName}/*`,
137
152
  slot: routeSlot
138
153
  })), after));
139
154
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Component","routeSlot","containerSlot","host","onComponentChange","componentId","useIdFromLocation","lanesContext","useLanesContext","laneComponent","resolveComponent","undefined","useComponentOptions","logFilters","log","logHead","version","component","componentDescriptor","error","useComponent","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 { useLanesContext } from '@teambit/lanes.ui.lanes';\n\nimport styles from './component.module.scss';\nimport { ComponentProvider, ComponentDescriptorProvider } from './context';\nimport { useComponent } from './use-component';\nimport { ComponentModel } from './component-model';\nimport { useIdFromLocation } from './use-component-from-location';\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};\n\n/**\n * main UI component of the Component extension.\n */\nexport function Component({ routeSlot, containerSlot, host, onComponentChange }: ComponentProps) {\n const componentId = useIdFromLocation();\n const lanesContext = useLanesContext();\n const laneComponent = componentId ? lanesContext?.resolveComponent(componentId) : undefined;\n const useComponentOptions = laneComponent && {\n logFilters: { log: { logHead: laneComponent.version } },\n };\n\n const { component, componentDescriptor, error } = useComponent(\n host,\n laneComponent?.id.toString() || componentId,\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={`${componentId}/*`} slot={routeSlot} />}\n </div>\n {after}\n </ComponentProvider>\n </ComponentDescriptorProvider>\n );\n}\n"],"mappings":";;;;;;;;;;;AAAA;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;;AAEA;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;;;;;;AAeA;AACA;AACA;AACO,SAASA,SAAT,CAAmB;EAAEC,SAAF;EAAaC,aAAb;EAA4BC,IAA5B;EAAkCC;AAAlC,CAAnB,EAA0F;EAC/F,MAAMC,WAAW,GAAG,IAAAC,6CAAA,GAApB;EACA,MAAMC,YAAY,GAAG,IAAAC,0BAAA,GAArB;EACA,MAAMC,aAAa,GAAGJ,WAAW,GAAGE,YAAH,aAAGA,YAAH,uBAAGA,YAAY,CAAEG,gBAAd,CAA+BL,WAA/B,CAAH,GAAiDM,SAAlF;EACA,MAAMC,mBAAmB,GAAGH,aAAa,IAAI;IAC3CI,UAAU,EAAE;MAAEC,GAAG,EAAE;QAAEC,OAAO,EAAEN,aAAa,CAACO;MAAzB;IAAP;EAD+B,CAA7C;EAIA,MAAM;IAAEC,SAAF;IAAaC,mBAAb;IAAkCC;EAAlC,IAA4C,IAAAC,4BAAA,EAChDjB,IADgD,EAEhD,CAAAM,aAAa,SAAb,IAAAA,aAAa,WAAb,YAAAA,aAAa,CAAEY,EAAf,CAAkBC,QAAlB,OAAgCjB,WAFgB,EAGhDO,mBAHgD,CAAlD,CAR+F,CAa/F;;EACA,IAAAW,kBAAA,EAAU,MAAMnB,iBAAN,aAAMA,iBAAN,uBAAMA,iBAAiB,CAAGa,SAAH,CAAjC,EAAgD,CAACA,SAAD,CAAhD,EAd+F,CAe/F;;EACA,IAAAM,kBAAA,EAAU,MAAM,MAAMnB,iBAAN,aAAMA,iBAAN,uBAAMA,iBAAiB,CAAGO,SAAH,CAAvC,EAAsD,EAAtD;EAEA,MAAMa,SAAS,GAAG,IAAAC,gBAAA,EAAQ,MAAM,IAAAC,iBAAA,EAAQxB,aAAR,aAAQA,aAAR,uBAAQA,aAAa,CAAEyB,MAAf,EAAR,CAAd,EAAgD,CAACzB,aAAD,CAAhD,CAAlB;EACA,MAAM0B,MAAM,GAAG,IAAAH,gBAAA,EAAQ,MAAMD,SAAS,CAACK,MAAV,CAAkBC,CAAD,IAAOA,CAAC,CAACC,IAAF,KAAW,QAAnC,EAA6CC,GAA7C,CAAkDF,CAAD,IAAOA,CAAC,CAACG,OAA1D,CAAd,EAAkF,CAACT,SAAD,CAAlF,CAAf;EACA,MAAMU,KAAK,GAAG,IAAAT,gBAAA,EAAQ,MAAMD,SAAS,CAACK,MAAV,CAAkBC,CAAD,IAAOA,CAAC,CAACC,IAAF,KAAW,OAAnC,EAA4CC,GAA5C,CAAiDF,CAAD,IAAOA,CAAC,CAACG,OAAzD,CAAd,EAAiF,CAACT,SAAD,CAAjF,CAAd;EAEA,IAAIL,KAAJ,EAAW,OAAOA,KAAK,CAACgB,WAAN,EAAP;EACX,IAAI,CAAClB,SAAL,EAAgB,oBAAO,2CAAP;EAEhB,oBACE,+BAAC,sCAAD;IAA6B,mBAAmB,EAAEC;EAAlD,gBACE,+BAAC,4BAAD;IAAmB,SAAS,EAAED;EAA9B,GACGW,MADH,eAEE;IAAK,SAAS,EAAEQ,0BAAA,CAAOC;EAAvB,GACGpC,SAAS,iBAAI,+BAAC,uCAAD;IAAY,UAAU,EAAG,GAAEI,WAAY,IAAvC;IAA4C,IAAI,EAAEJ;EAAlD,EADhB,CAFF,EAKGiC,KALH,CADF,CADF;AAWD"}
1
+ {"version":3,"names":["Component","routeSlot","containerSlot","host","onComponentChange","componentIdStr","useComponent","idFromLocation","useIdFromLocation","componentId","ComponentID","fromString","undefined","fullName","lanesContext","useLanesContext","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 { useLanesContext } from '@teambit/lanes.ui.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 lanesContext = useLanesContext();\n const laneComponent = fullName ? lanesContext?.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,5 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { MenuItemSlot } from '@teambit/ui-foundation.ui.main-dropdown';
3
+ import { UseComponentType } from '../use-component';
3
4
  import { OrderedNavigationSlot, ConsumeMethodSlot } from './nav-plugin';
4
5
  export declare type MenuProps = {
5
6
  className?: string;
@@ -17,8 +18,10 @@ export declare type MenuProps = {
17
18
  */
18
19
  menuItemSlot: MenuItemSlot;
19
20
  consumeMethodSlot: ConsumeMethodSlot;
21
+ componentIdStr?: string;
22
+ useComponent?: UseComponentType;
20
23
  };
21
24
  /**
22
25
  * top bar menu.
23
26
  */
24
- export declare function ComponentMenu({ navigationSlot, widgetSlot, className, host, menuItemSlot, consumeMethodSlot, }: MenuProps): JSX.Element;
27
+ export declare function ComponentMenu({ navigationSlot, widgetSlot, className, host, menuItemSlot, consumeMethodSlot, componentIdStr, useComponent, }: MenuProps): JSX.Element;
@@ -181,6 +181,16 @@ function _useComponentFromLocation() {
181
181
  return data;
182
182
  }
183
183
 
184
+ function _() {
185
+ const data = require("../..");
186
+
187
+ _ = function () {
188
+ return data;
189
+ };
190
+
191
+ return data;
192
+ }
193
+
184
194
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
185
195
 
186
196
  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; }
@@ -198,25 +208,30 @@ function ComponentMenu({
198
208
  className,
199
209
  host,
200
210
  menuItemSlot,
201
- consumeMethodSlot
211
+ consumeMethodSlot,
212
+ componentIdStr,
213
+ useComponent
202
214
  }) {
203
- const componentId = (0, _useComponentFromLocation().useIdFromLocation)();
215
+ 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;
204
218
  const lanesContext = (0, _lanesUi().useLanesContext)();
205
- const laneComponent = componentId ? lanesContext === null || lanesContext === void 0 ? void 0 : lanesContext.resolveComponent(componentId) : undefined;
206
- const useComponentOptions = laneComponent && {
207
- logFilters: {
219
+ const laneComponent = fullName ? lanesContext === null || lanesContext === void 0 ? void 0 : lanesContext.resolveComponent(fullName) : undefined;
220
+ const useComponentOptions = {
221
+ logFilters: laneComponent && {
208
222
  log: {
209
223
  logHead: laneComponent.version
210
224
  }
211
- }
225
+ },
226
+ customUseComponent: useComponent
212
227
  };
213
228
  const {
214
229
  component
215
- } = (0, _useComponent().useComponent)(host, (laneComponent === null || laneComponent === void 0 ? void 0 : laneComponent.id.toString()) || componentId, useComponentOptions);
230
+ } = (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);
216
231
  const mainMenuItems = (0, _react().useMemo)(() => (0, _lodash().groupBy)((0, _lodash().flatten)(menuItemSlot.values()), 'category'), [menuItemSlot]);
217
232
  if (!component) return /*#__PURE__*/_react().default.createElement(_uiFoundationUi2().FullLoader, null);
218
233
  return /*#__PURE__*/_react().default.createElement(_reactRouterDom().Routes, null, /*#__PURE__*/_react().default.createElement(_reactRouterDom().Route, {
219
- path: `${componentId}/*`,
234
+ path: `${fullName}/*`,
220
235
  element: /*#__PURE__*/_react().default.createElement("div", {
221
236
  className: (0, _classnames().default)(_menuModule().default.topBar, className)
222
237
  }, /*#__PURE__*/_react().default.createElement("div", {
@@ -1 +1 @@
1
- {"version":3,"names":["ComponentMenu","navigationSlot","widgetSlot","className","host","menuItemSlot","consumeMethodSlot","componentId","useIdFromLocation","lanesContext","useLanesContext","laneComponent","resolveComponent","undefined","useComponentOptions","logFilters","log","logHead","version","component","useComponent","id","toString","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 { Menu as ConsumeMethodsMenu } from '@teambit/ui-foundation.ui.use-box.menu';\nimport { LaneModel, useLanesContext } from '@teambit/lanes.ui.lanes';\nimport { LegacyComponentLog } from '@teambit/legacy-component-log';\nimport type { ComponentModel } from '../component-model';\nimport { useComponent } 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';\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\n/**\n * top bar menu.\n */\nexport function ComponentMenu({\n navigationSlot,\n widgetSlot,\n className,\n host,\n menuItemSlot,\n consumeMethodSlot,\n}: MenuProps) {\n const componentId = useIdFromLocation();\n const lanesContext = useLanesContext();\n const laneComponent = componentId ? lanesContext?.resolveComponent(componentId) : undefined;\n const useComponentOptions = laneComponent && {\n logFilters: { log: { logHead: laneComponent.version } },\n };\n\n const { component } = useComponent(host, laneComponent?.id.toString() || componentId, useComponentOptions);\n const mainMenuItems = useMemo(() => groupBy(flatten(menuItemSlot.values()), 'category'), [menuItemSlot]);\n if (!component) return <FullLoader />;\n return (\n <Routes>\n <Route\n path={`${componentId}/*`}\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 lanesContext = useLanesContext();\n const currentLane = lanesContext?.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 = lanesContext?.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":["ComponentMenu","navigationSlot","widgetSlot","className","host","menuItemSlot","consumeMethodSlot","componentIdStr","useComponent","idFromLocation","useIdFromLocation","componentId","ComponentID","fromString","undefined","fullName","lanesContext","useLanesContext","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 { Menu as ConsumeMethodsMenu } from '@teambit/ui-foundation.ui.use-box.menu';\nimport { LaneModel, useLanesContext } from '@teambit/lanes.ui.lanes';\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 lanesContext = useLanesContext();\n const laneComponent = fullName ? lanesContext?.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 lanesContext = useLanesContext();\n const currentLane = lanesContext?.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 = lanesContext?.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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"}
@@ -119,8 +119,8 @@ const componentOverviewFields = (0, _client().gql)`
119
119
  # 'id' property in gql refers to a *global* identifier and used for caching.
120
120
  # this makes aspect data cache under the same key, even when they are under different components.
121
121
  # renaming the property fixes that.
122
- aspectId: id
123
- aspectData: data
122
+ id
123
+ data
124
124
  }
125
125
  elementsUrl
126
126
  description
@@ -345,7 +345,12 @@ function useComponentQuery(componentId, host, filters) {
345
345
  const rawComponent = data === null || data === void 0 ? void 0 : (_data$getHost = data.getHost) === null || _data$getHost === void 0 ? void 0 : _data$getHost.get;
346
346
  return (0, _react().useMemo)(() => {
347
347
  const aspectList = {
348
- entries: rawComponent === null || rawComponent === void 0 ? void 0 : rawComponent.aspects
348
+ entries: rawComponent === null || rawComponent === void 0 ? void 0 : rawComponent.aspects.map(aspectObject => {
349
+ return _objectSpread(_objectSpread({}, aspectObject), {}, {
350
+ aspectId: aspectObject.id,
351
+ aspectData: aspectObject.data
352
+ });
353
+ })
349
354
  };
350
355
 
351
356
  const id = rawComponent && _componentId().ComponentID.fromObject(rawComponent.id);
@@ -1 +1 @@
1
- {"version":3,"names":["componentIdFields","gql","componentOverviewFields","componentFields","GET_COMPONENT","SUB_SUBSCRIPTION_ADDED","SUB_COMPONENT_CHANGED","SUB_COMPONENT_REMOVED","useComponentQuery","componentId","host","filters","idRef","useRef","current","useDataQuery","variables","id","extensionId","log","data","error","loading","subscribeToMore","rest","useEffect","unsubAddition","document","updateQuery","prev","subscriptionData","prevComponent","getHost","get","addedComponent","componentAdded","component","name","unsubChanges","updatedComponent","componentChanged","isUpdated","ComponentID","isEqualObj","unsubRemoval","removedIds","componentRemoved","componentIds","length","isRemoved","some","removedId","rawComponent","useMemo","aspectList","entries","aspects","fromObject","componentDescriptor","ComponentDescriptor","toString","undefined","ComponentModel","from","ComponentError","message"],"sources":["use-component-query.ts"],"sourcesContent":["import { useMemo, useEffect, useRef } from 'react';\nimport { gql } from '@apollo/client';\nimport { useDataQuery } from '@teambit/ui-foundation.ui.hooks.use-data-query';\nimport { ComponentID, ComponentIdObj } from '@teambit/component-id';\nimport { ComponentDescriptor } from '@teambit/component-descriptor';\n\nimport { ComponentModel } from './component-model';\nimport { ComponentError } from './component-error';\n\nexport const componentIdFields = gql`\n fragment componentIdFields on ComponentID {\n name\n version\n scope\n }\n`;\n\nexport const componentOverviewFields = gql`\n fragment componentOverviewFields on Component {\n id {\n ...componentIdFields\n }\n aspects(include: [\"teambit.preview/preview\", \"teambit.envs/envs\"]) {\n # 'id' property in gql refers to a *global* identifier and used for caching.\n # this makes aspect data cache under the same key, even when they are under different components.\n # renaming the property fixes that.\n aspectId: id\n aspectData: data\n }\n elementsUrl\n description\n deprecation {\n isDeprecate\n newId\n }\n labels\n displayName\n server {\n env\n url\n }\n buildStatus\n env {\n id\n icon\n }\n size {\n compressedTotal\n }\n preview {\n includesEnvTemplate\n legacyHeader\n }\n compositions {\n identifier\n displayName\n }\n }\n ${componentIdFields}\n`;\n\nexport const componentFields = gql`\n fragment componentFields on Component {\n id {\n ...componentIdFields\n }\n ...componentOverviewFields\n packageName\n latest\n compositions {\n identifier\n displayName\n }\n tags {\n version\n }\n logs(type: $logType, offset: $logOffset, limit: $logLimit, head: $logHead, sort: $logSort) {\n id\n message\n username\n email\n date\n hash\n tag\n }\n }\n ${componentIdFields}\n ${componentOverviewFields}\n`;\n\nconst GET_COMPONENT = gql`\n query Component(\n $id: String!\n $extensionId: String!\n $logType: String\n $logOffset: Int\n $logLimit: Int\n $logHead: String\n $logSort: String\n ) {\n getHost(id: $extensionId) {\n id # used for GQL caching\n get(id: $id) {\n ...componentFields\n }\n }\n }\n ${componentFields}\n`;\n\nconst SUB_SUBSCRIPTION_ADDED = gql`\n subscription OnComponentAdded($logType: String, $logOffset: Int, $logLimit: Int, $logHead: String, $logSort: String) {\n componentAdded {\n component {\n ...componentFields\n }\n }\n }\n ${componentFields}\n`;\n\nconst SUB_COMPONENT_CHANGED = gql`\n subscription OnComponentChanged(\n $logType: String\n $logOffset: Int\n $logLimit: Int\n $logHead: String\n $logSort: String\n ) {\n componentChanged {\n component {\n ...componentFields\n }\n }\n }\n ${componentFields}\n`;\n\nconst SUB_COMPONENT_REMOVED = gql`\n subscription OnComponentRemoved {\n componentRemoved {\n componentIds {\n ...componentIdFields\n }\n }\n }\n ${componentIdFields}\n`;\nexport type Filters = {\n log?: { logType?: string; logOffset?: number; logLimit?: number; logHead?: string; logSort?: string };\n};\n/** provides data to component ui page, making sure both variables and return value are safely typed and memoized */\nexport function useComponentQuery(componentId: string, host: string, filters?: Filters) {\n const idRef = useRef(componentId);\n idRef.current = componentId;\n const { data, error, loading, subscribeToMore, ...rest } = useDataQuery(GET_COMPONENT, {\n variables: { id: componentId, extensionId: host, ...(filters?.log || {}) },\n });\n\n useEffect(() => {\n // @TODO @Kutner fix subscription for scope\n if (host !== 'teambit.workspace/workspace') {\n return () => {};\n }\n\n const unsubAddition = subscribeToMore({\n document: SUB_SUBSCRIPTION_ADDED,\n updateQuery: (prev, { subscriptionData }) => {\n const prevComponent = prev?.getHost?.get;\n const addedComponent = subscriptionData?.data?.componentAdded?.component;\n\n if (!addedComponent || prevComponent) return prev;\n\n if (idRef.current === addedComponent.id.name) {\n return {\n ...prev,\n getHost: {\n ...prev.getHost,\n get: addedComponent,\n },\n };\n }\n\n return prev;\n },\n });\n\n const unsubChanges = subscribeToMore({\n document: SUB_COMPONENT_CHANGED,\n updateQuery: (prev, { subscriptionData }) => {\n if (!subscriptionData.data) return prev;\n\n const prevComponent = prev?.getHost?.get;\n const updatedComponent = subscriptionData?.data?.componentChanged?.component;\n\n const isUpdated = updatedComponent && ComponentID.isEqualObj(prevComponent?.id, updatedComponent?.id);\n\n if (isUpdated) {\n return {\n ...prev,\n getHost: {\n ...prev.getHost,\n get: updatedComponent,\n },\n };\n }\n\n return prev;\n },\n });\n\n const unsubRemoval = subscribeToMore({\n document: SUB_COMPONENT_REMOVED,\n updateQuery: (prev, { subscriptionData }) => {\n if (!subscriptionData.data) return prev;\n\n const prevComponent = prev?.getHost?.get;\n const removedIds: ComponentIdObj[] | undefined = subscriptionData?.data?.componentRemoved?.componentIds;\n if (!prevComponent || !removedIds?.length) return prev;\n\n const isRemoved = removedIds.some((removedId) => ComponentID.isEqualObj(removedId, prevComponent.id));\n\n if (isRemoved) {\n return {\n ...prev,\n getHost: {\n ...prev.getHost,\n get: null,\n },\n };\n }\n\n return prev;\n },\n });\n\n return () => {\n unsubChanges();\n unsubAddition();\n unsubRemoval();\n };\n }, []);\n\n const rawComponent = data?.getHost?.get;\n return useMemo(() => {\n const aspectList = {\n entries: rawComponent?.aspects,\n };\n const id = rawComponent && ComponentID.fromObject(rawComponent.id);\n return {\n componentDescriptor: id ? ComponentDescriptor.fromObject({ id: id.toString(), aspectList }) : undefined,\n component: rawComponent ? ComponentModel.from({ ...rawComponent, host }) : undefined,\n // eslint-disable-next-line\n error: error\n ? new ComponentError(500, error.message)\n : !rawComponent && !loading\n ? new ComponentError(404)\n : undefined,\n loading,\n ...rest,\n };\n }, [rawComponent, host, error]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;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;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;;;;;AAEO,MAAMA,iBAAiB,GAAG,IAAAC,aAAA,CAAI;AACrC;AACA;AACA;AACA;AACA;AACA,CANO;;AAQA,MAAMC,uBAAuB,GAAG,IAAAD,aAAA,CAAI;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAID,iBAAkB;AACtB,CA1CO;;AA4CA,MAAMG,eAAe,GAAG,IAAAF,aAAA,CAAI;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAID,iBAAkB;AACtB,IAAIE,uBAAwB;AAC5B,CA3BO;;AA6BP,MAAME,aAAa,GAAG,IAAAH,aAAA,CAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIE,eAAgB;AACpB,CAlBA;AAoBA,MAAME,sBAAsB,GAAG,IAAAJ,aAAA,CAAI;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIE,eAAgB;AACpB,CATA;AAWA,MAAMG,qBAAqB,GAAG,IAAAL,aAAA,CAAI;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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"}
1
+ {"version":3,"names":["componentIdFields","gql","componentOverviewFields","componentFields","GET_COMPONENT","SUB_SUBSCRIPTION_ADDED","SUB_COMPONENT_CHANGED","SUB_COMPONENT_REMOVED","useComponentQuery","componentId","host","filters","idRef","useRef","current","useDataQuery","variables","id","extensionId","log","data","error","loading","subscribeToMore","rest","useEffect","unsubAddition","document","updateQuery","prev","subscriptionData","prevComponent","getHost","get","addedComponent","componentAdded","component","name","unsubChanges","updatedComponent","componentChanged","isUpdated","ComponentID","isEqualObj","unsubRemoval","removedIds","componentRemoved","componentIds","length","isRemoved","some","removedId","rawComponent","useMemo","aspectList","entries","aspects","map","aspectObject","aspectId","aspectData","fromObject","componentDescriptor","ComponentDescriptor","toString","undefined","ComponentModel","from","ComponentError","message"],"sources":["use-component-query.ts"],"sourcesContent":["import { useMemo, useEffect, useRef } from 'react';\nimport { gql } from '@apollo/client';\nimport { useDataQuery } from '@teambit/ui-foundation.ui.hooks.use-data-query';\nimport { ComponentID, ComponentIdObj } from '@teambit/component-id';\nimport { ComponentDescriptor } from '@teambit/component-descriptor';\n\nimport { ComponentModel } from './component-model';\nimport { ComponentError } from './component-error';\n\nexport const componentIdFields = gql`\n fragment componentIdFields on ComponentID {\n name\n version\n scope\n }\n`;\n\nexport const componentOverviewFields = gql`\n fragment componentOverviewFields on Component {\n id {\n ...componentIdFields\n }\n aspects(include: [\"teambit.preview/preview\", \"teambit.envs/envs\"]) {\n # 'id' property in gql refers to a *global* identifier and used for caching.\n # this makes aspect data cache under the same key, even when they are under different components.\n # renaming the property fixes that.\n id\n data\n }\n elementsUrl\n description\n deprecation {\n isDeprecate\n newId\n }\n labels\n displayName\n server {\n env\n url\n }\n buildStatus\n env {\n id\n icon\n }\n size {\n compressedTotal\n }\n preview {\n includesEnvTemplate\n legacyHeader\n }\n compositions {\n identifier\n displayName\n }\n }\n ${componentIdFields}\n`;\n\nexport const componentFields = gql`\n fragment componentFields on Component {\n id {\n ...componentIdFields\n }\n ...componentOverviewFields\n packageName\n latest\n compositions {\n identifier\n displayName\n }\n tags {\n version\n }\n logs(type: $logType, offset: $logOffset, limit: $logLimit, head: $logHead, sort: $logSort) {\n id\n message\n username\n email\n date\n hash\n tag\n }\n }\n ${componentIdFields}\n ${componentOverviewFields}\n`;\n\nconst GET_COMPONENT = gql`\n query Component(\n $id: String!\n $extensionId: String!\n $logType: String\n $logOffset: Int\n $logLimit: Int\n $logHead: String\n $logSort: String\n ) {\n getHost(id: $extensionId) {\n id # used for GQL caching\n get(id: $id) {\n ...componentFields\n }\n }\n }\n ${componentFields}\n`;\n\nconst SUB_SUBSCRIPTION_ADDED = gql`\n subscription OnComponentAdded($logType: String, $logOffset: Int, $logLimit: Int, $logHead: String, $logSort: String) {\n componentAdded {\n component {\n ...componentFields\n }\n }\n }\n ${componentFields}\n`;\n\nconst SUB_COMPONENT_CHANGED = gql`\n subscription OnComponentChanged(\n $logType: String\n $logOffset: Int\n $logLimit: Int\n $logHead: String\n $logSort: String\n ) {\n componentChanged {\n component {\n ...componentFields\n }\n }\n }\n ${componentFields}\n`;\n\nconst SUB_COMPONENT_REMOVED = gql`\n subscription OnComponentRemoved {\n componentRemoved {\n componentIds {\n ...componentIdFields\n }\n }\n }\n ${componentIdFields}\n`;\nexport type Filters = {\n log?: { logType?: string; logOffset?: number; logLimit?: number; logHead?: string; logSort?: string };\n};\n/** provides data to component ui page, making sure both variables and return value are safely typed and memoized */\nexport function useComponentQuery(componentId: string, host: string, filters?: Filters) {\n const idRef = useRef(componentId);\n idRef.current = componentId;\n const { data, error, loading, subscribeToMore, ...rest } = useDataQuery(GET_COMPONENT, {\n variables: { id: componentId, extensionId: host, ...(filters?.log || {}) },\n });\n\n useEffect(() => {\n // @TODO @Kutner fix subscription for scope\n if (host !== 'teambit.workspace/workspace') {\n return () => {};\n }\n\n const unsubAddition = subscribeToMore({\n document: SUB_SUBSCRIPTION_ADDED,\n updateQuery: (prev, { subscriptionData }) => {\n const prevComponent = prev?.getHost?.get;\n const addedComponent = subscriptionData?.data?.componentAdded?.component;\n\n if (!addedComponent || prevComponent) return prev;\n\n if (idRef.current === addedComponent.id.name) {\n return {\n ...prev,\n getHost: {\n ...prev.getHost,\n get: addedComponent,\n },\n };\n }\n\n return prev;\n },\n });\n\n const unsubChanges = subscribeToMore({\n document: SUB_COMPONENT_CHANGED,\n updateQuery: (prev, { subscriptionData }) => {\n if (!subscriptionData.data) return prev;\n\n const prevComponent = prev?.getHost?.get;\n const updatedComponent = subscriptionData?.data?.componentChanged?.component;\n\n const isUpdated = updatedComponent && ComponentID.isEqualObj(prevComponent?.id, updatedComponent?.id);\n\n if (isUpdated) {\n return {\n ...prev,\n getHost: {\n ...prev.getHost,\n get: updatedComponent,\n },\n };\n }\n\n return prev;\n },\n });\n\n const unsubRemoval = subscribeToMore({\n document: SUB_COMPONENT_REMOVED,\n updateQuery: (prev, { subscriptionData }) => {\n if (!subscriptionData.data) return prev;\n\n const prevComponent = prev?.getHost?.get;\n const removedIds: ComponentIdObj[] | undefined = subscriptionData?.data?.componentRemoved?.componentIds;\n if (!prevComponent || !removedIds?.length) return prev;\n\n const isRemoved = removedIds.some((removedId) => ComponentID.isEqualObj(removedId, prevComponent.id));\n\n if (isRemoved) {\n return {\n ...prev,\n getHost: {\n ...prev.getHost,\n get: null,\n },\n };\n }\n\n return prev;\n },\n });\n\n return () => {\n unsubChanges();\n unsubAddition();\n unsubRemoval();\n };\n }, []);\n\n const rawComponent = data?.getHost?.get;\n return useMemo(() => {\n const aspectList = {\n entries: rawComponent?.aspects.map((aspectObject) => {\n return {\n ...aspectObject,\n aspectId: aspectObject.id,\n aspectData: aspectObject.data,\n };\n }),\n };\n const id = rawComponent && ComponentID.fromObject(rawComponent.id);\n return {\n componentDescriptor: id ? ComponentDescriptor.fromObject({ id: id.toString(), aspectList }) : undefined,\n component: rawComponent ? ComponentModel.from({ ...rawComponent, host }) : undefined,\n // eslint-disable-next-line\n error: error\n ? new ComponentError(500, error.message)\n : !rawComponent && !loading\n ? new ComponentError(404)\n : undefined,\n loading,\n ...rest,\n };\n }, [rawComponent, host, error]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;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;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;;;;;AAEO,MAAMA,iBAAiB,GAAG,IAAAC,aAAA,CAAI;AACrC;AACA;AACA;AACA;AACA;AACA,CANO;;AAQA,MAAMC,uBAAuB,GAAG,IAAAD,aAAA,CAAI;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAID,iBAAkB;AACtB,CA1CO;;AA4CA,MAAMG,eAAe,GAAG,IAAAF,aAAA,CAAI;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAID,iBAAkB;AACtB,IAAIE,uBAAwB;AAC5B,CA3BO;;AA6BP,MAAME,aAAa,GAAG,IAAAH,aAAA,CAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIE,eAAgB;AACpB,CAlBA;AAoBA,MAAME,sBAAsB,GAAG,IAAAJ,aAAA,CAAI;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIE,eAAgB;AACpB,CATA;AAWA,MAAMG,qBAAqB,GAAG,IAAAL,aAAA,CAAI;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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"}
@@ -11,5 +11,7 @@ export declare type Component = {
11
11
  export declare type UseComponentOptions = {
12
12
  version?: string;
13
13
  logFilters?: Filters;
14
+ customUseComponent?: UseComponentType;
14
15
  };
16
+ export declare type UseComponentType = (id: string, host: string, filters?: Filters) => Component;
15
17
  export declare function useComponent(host: string, id?: string, options?: UseComponentOptions): Component;
@@ -31,12 +31,16 @@ function useComponent(host, id, options) {
31
31
  const query = (0, _uiFoundationUiReactRouter().useQuery)();
32
32
  const {
33
33
  version,
34
- logFilters
34
+ logFilters,
35
+ customUseComponent
35
36
  } = options || {};
36
37
  const componentVersion = (_ref = version || query.get('version')) !== null && _ref !== void 0 ? _ref : undefined;
37
38
  if (!id) throw new TypeError('useComponent received no component id');
38
39
  const componentIdStr = withVersion(id, componentVersion);
39
- return (0, _useComponentQuery().useComponentQuery)(componentIdStr, host, logFilters);
40
+
41
+ const targetUseComponent = customUseComponent || _useComponentQuery().useComponentQuery;
42
+
43
+ return targetUseComponent(componentIdStr, host, logFilters);
40
44
  }
41
45
 
42
46
  function withVersion(id, version) {
@@ -1 +1 @@
1
- {"version":3,"names":["useComponent","host","id","options","query","useQuery","version","logFilters","componentVersion","get","undefined","TypeError","componentIdStr","withVersion","useComponentQuery","includes"],"sources":["use-component.tsx"],"sourcesContent":["import { useQuery } from '@teambit/ui-foundation.ui.react-router.use-query';\nimport { ComponentDescriptor } from '@teambit/component-descriptor';\nimport { ComponentModel } from './component-model';\nimport { ComponentError } from './component-error';\nimport { Filters, useComponentQuery } from './use-component-query';\n\nexport type Component = {\n component?: ComponentModel;\n error?: ComponentError;\n componentDescriptor?: ComponentDescriptor;\n loading?: boolean;\n};\nexport type UseComponentOptions = {\n version?: string;\n logFilters?: Filters;\n};\n\nexport function useComponent(host: string, id?: string, options?: UseComponentOptions): Component {\n const query = useQuery();\n const { version, logFilters } = options || {};\n const componentVersion = (version || query.get('version')) ?? undefined;\n\n if (!id) throw new TypeError('useComponent received no component id');\n\n const componentIdStr = withVersion(id, componentVersion);\n\n return useComponentQuery(componentIdStr, host, logFilters);\n}\n\nfunction withVersion(id: string, version?: string) {\n if (!version) return id;\n if (id.includes('@')) return id;\n return `${id}@${version}`;\n}\n"],"mappings":";;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAIA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAaO,SAASA,YAAT,CAAsBC,IAAtB,EAAoCC,EAApC,EAAiDC,OAAjD,EAA2F;EAAA;;EAChG,MAAMC,KAAK,GAAG,IAAAC,qCAAA,GAAd;EACA,MAAM;IAAEC,OAAF;IAAWC;EAAX,IAA0BJ,OAAO,IAAI,EAA3C;EACA,MAAMK,gBAAgB,WAAIF,OAAO,IAAIF,KAAK,CAACK,GAAN,CAAU,SAAV,CAAf,uCAAwCC,SAA9D;EAEA,IAAI,CAACR,EAAL,EAAS,MAAM,IAAIS,SAAJ,CAAc,uCAAd,CAAN;EAET,MAAMC,cAAc,GAAGC,WAAW,CAACX,EAAD,EAAKM,gBAAL,CAAlC;EAEA,OAAO,IAAAM,sCAAA,EAAkBF,cAAlB,EAAkCX,IAAlC,EAAwCM,UAAxC,CAAP;AACD;;AAED,SAASM,WAAT,CAAqBX,EAArB,EAAiCI,OAAjC,EAAmD;EACjD,IAAI,CAACA,OAAL,EAAc,OAAOJ,EAAP;EACd,IAAIA,EAAE,CAACa,QAAH,CAAY,GAAZ,CAAJ,EAAsB,OAAOb,EAAP;EACtB,OAAQ,GAAEA,EAAG,IAAGI,OAAQ,EAAxB;AACD"}
1
+ {"version":3,"names":["useComponent","host","id","options","query","useQuery","version","logFilters","customUseComponent","componentVersion","get","undefined","TypeError","componentIdStr","withVersion","targetUseComponent","useComponentQuery","includes"],"sources":["use-component.tsx"],"sourcesContent":["import { useQuery } from '@teambit/ui-foundation.ui.react-router.use-query';\nimport { ComponentDescriptor } from '@teambit/component-descriptor';\nimport { ComponentModel } from './component-model';\nimport { ComponentError } from './component-error';\nimport { Filters, useComponentQuery } from './use-component-query';\n\nexport type Component = {\n component?: ComponentModel;\n error?: ComponentError;\n componentDescriptor?: ComponentDescriptor;\n loading?: boolean;\n};\nexport type UseComponentOptions = {\n version?: string;\n logFilters?: Filters;\n customUseComponent?: UseComponentType;\n};\n\nexport type UseComponentType = (id: string, host: string, filters?: Filters) => Component;\n\nexport function useComponent(host: string, id?: string, options?: UseComponentOptions): Component {\n const query = useQuery();\n const { version, logFilters, customUseComponent } = options || {};\n const componentVersion = (version || query.get('version')) ?? undefined;\n\n if (!id) throw new TypeError('useComponent received no component id');\n\n const componentIdStr = withVersion(id, componentVersion);\n const targetUseComponent = customUseComponent || useComponentQuery;\n\n return targetUseComponent(componentIdStr, host, logFilters);\n}\n\nfunction withVersion(id: string, version?: string) {\n if (!version) return id;\n if (id.includes('@')) return id;\n return `${id}@${version}`;\n}\n"],"mappings":";;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAIA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAgBO,SAASA,YAAT,CAAsBC,IAAtB,EAAoCC,EAApC,EAAiDC,OAAjD,EAA2F;EAAA;;EAChG,MAAMC,KAAK,GAAG,IAAAC,qCAAA,GAAd;EACA,MAAM;IAAEC,OAAF;IAAWC,UAAX;IAAuBC;EAAvB,IAA8CL,OAAO,IAAI,EAA/D;EACA,MAAMM,gBAAgB,WAAIH,OAAO,IAAIF,KAAK,CAACM,GAAN,CAAU,SAAV,CAAf,uCAAwCC,SAA9D;EAEA,IAAI,CAACT,EAAL,EAAS,MAAM,IAAIU,SAAJ,CAAc,uCAAd,CAAN;EAET,MAAMC,cAAc,GAAGC,WAAW,CAACZ,EAAD,EAAKO,gBAAL,CAAlC;;EACA,MAAMM,kBAAkB,GAAGP,kBAAkB,IAAIQ,sCAAjD;;EAEA,OAAOD,kBAAkB,CAACF,cAAD,EAAiBZ,IAAjB,EAAuBM,UAAvB,CAAzB;AACD;;AAED,SAASO,WAAT,CAAqBZ,EAArB,EAAiCI,OAAjC,EAAmD;EACjD,IAAI,CAACA,OAAL,EAAc,OAAOJ,EAAP;EACd,IAAIA,EAAE,CAACe,QAAH,CAAY,GAAZ,CAAJ,EAAsB,OAAOf,EAAP;EACtB,OAAQ,GAAEA,EAAG,IAAGI,OAAQ,EAAxB;AACD"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/component",
3
- "version": "0.0.786",
3
+ "version": "0.0.789",
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.786"
9
+ "version": "0.0.789"
10
10
  },
11
11
  "dependencies": {
12
12
  "@teambit/any-fs": "0.0.5",
@@ -31,41 +31,41 @@
31
31
  "@teambit/design.inputs.dropdown": "0.0.7",
32
32
  "@teambit/component-id": "0.0.402",
33
33
  "@teambit/ui-foundation.ui.menu-widget-icon": "0.0.488",
34
- "@teambit/aspect-loader": "0.0.786",
34
+ "@teambit/aspect-loader": "0.0.789",
35
35
  "@teambit/legacy-bit-id": "0.0.399",
36
36
  "@teambit/toolbox.path.match-patterns": "0.0.1",
37
37
  "@teambit/toolbox.string.capitalize": "0.0.483",
38
- "@teambit/cli": "0.0.519",
39
- "@teambit/express": "0.0.617",
40
- "@teambit/graphql": "0.0.786",
38
+ "@teambit/cli": "0.0.522",
39
+ "@teambit/express": "0.0.620",
40
+ "@teambit/graphql": "0.0.789",
41
41
  "@teambit/bit-error": "0.0.394",
42
- "@teambit/command-bar": "0.0.786",
42
+ "@teambit/command-bar": "0.0.789",
43
43
  "@teambit/component.ui.deprecation-icon": "0.0.494",
44
- "@teambit/preview": "0.0.786",
45
- "@teambit/pubsub": "0.0.786",
46
- "@teambit/react-router": "0.0.786",
44
+ "@teambit/preview": "0.0.789",
45
+ "@teambit/pubsub": "0.0.789",
46
+ "@teambit/react-router": "0.0.789",
47
47
  "@teambit/ui-foundation.ui.is-browser": "0.0.486",
48
48
  "@teambit/ui-foundation.ui.main-dropdown": "0.0.487",
49
49
  "@teambit/ui-foundation.ui.react-router.slot-router": "0.0.490",
50
50
  "@teambit/ui-foundation.ui.use-box.menu": "0.0.116",
51
- "@teambit/ui": "0.0.786",
51
+ "@teambit/ui": "0.0.789",
52
52
  "@teambit/component-issues": "0.0.57",
53
53
  "@teambit/ui-foundation.ui.hooks.use-data-query": "0.0.488",
54
54
  "@teambit/cli-table": "0.0.34",
55
- "@teambit/lanes.ui.lanes": "0.0.87",
56
- "@teambit/component-descriptor": "0.0.81",
55
+ "@teambit/lanes.ui.lanes": "0.0.90",
56
+ "@teambit/component-descriptor": "0.0.84",
57
57
  "@teambit/ui-foundation.ui.react-router.use-query": "0.0.487",
58
58
  "@teambit/design.ui.empty-box": "0.0.354",
59
59
  "@teambit/harmony.ui.aspect-box": "0.0.486",
60
60
  "@teambit/design.ui.pages.not-found": "0.0.356",
61
61
  "@teambit/design.ui.pages.server-error": "0.0.356",
62
- "@teambit/compositions": "0.0.786",
63
- "@teambit/deprecation": "0.0.786",
64
- "@teambit/envs": "0.0.786",
62
+ "@teambit/compositions": "0.0.789",
63
+ "@teambit/deprecation": "0.0.789",
64
+ "@teambit/envs": "0.0.789",
65
65
  "@teambit/legacy-component-log": "0.0.392",
66
66
  "@teambit/design.ui.styles.ellipsis": "0.0.347",
67
67
  "@teambit/envs.ui.env-icon": "0.0.486",
68
- "@teambit/component.ui.version-dropdown": "0.0.575",
68
+ "@teambit/component.ui.version-dropdown": "0.0.578",
69
69
  "@teambit/ui-foundation.ui.full-loader": "0.0.486",
70
70
  "@teambit/ui-foundation.ui.use-box.dropdown": "0.0.116",
71
71
  "@teambit/ui-foundation.ui.constants.z-indexes": "0.0.488"
@@ -87,7 +87,7 @@
87
87
  "peerDependencies": {
88
88
  "react-router-dom": "^6.0.0",
89
89
  "@apollo/client": "^3.0.0",
90
- "@teambit/legacy": "1.0.300",
90
+ "@teambit/legacy": "1.0.304",
91
91
  "react-dom": "^16.8.0 || ^17.0.0",
92
92
  "react": "^16.8.0 || ^17.0.0"
93
93
  },
@@ -1,5 +1,5 @@
1
- import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.786/dist/component.composition.js';
2
- import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.786/dist/component.docs.mdx';
1
+ import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.789/dist/component.composition.js';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.789/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
@@ -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,34 @@ 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 ? lanesContext?.resolveComponent(fullName) : undefined;
44
+ const useComponentOptions = {
45
+ logFilters: laneComponent && { log: { logHead: laneComponent.version } },
46
+ customUseComponent: useComponent,
35
47
  };
36
48
 
37
- const { component, componentDescriptor, error } = useComponent(
49
+ const { component, componentDescriptor, error } = useComponentQuery(
38
50
  host,
39
- laneComponent?.id.toString() || componentId,
51
+ laneComponent?.id.toString() || componentId?.toString() || idFromLocation,
40
52
  useComponentOptions
41
53
  );
42
54
  // trigger onComponentChange when component changes
@@ -56,7 +68,7 @@ export function Component({ routeSlot, containerSlot, host, onComponentChange }:
56
68
  <ComponentProvider component={component}>
57
69
  {before}
58
70
  <div className={styles.container}>
59
- {routeSlot && <SlotRouter parentPath={`${componentId}/*`} slot={routeSlot} />}
71
+ {routeSlot && <SlotRouter parentPath={`${fullName}/*`} slot={routeSlot} />}
60
72
  </div>
61
73
  {after}
62
74
  </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) {