@teambit/component 0.0.675 → 0.0.676

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.
@@ -42,7 +42,7 @@ export interface ComponentFactory {
42
42
  */
43
43
  getRemoteComponent?: (id: ComponentID) => Promise<Component>;
44
44
  getLegacyGraph(ids?: ComponentID[]): Promise<LegacyGraph>;
45
- getLogs(id: ComponentID): Promise<ComponentLog[]>;
45
+ getLogs(id: ComponentID, shortHash?: boolean, startsFrom?: string): Promise<ComponentLog[]>;
46
46
  /**
47
47
  * returns a specific state of a component by hash or semver.
48
48
  */
package/dist/component.js CHANGED
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  require("core-js/modules/es.symbol.description.js");
6
4
 
7
5
  require("core-js/modules/es.symbol.async-iterator.js");
@@ -19,16 +17,6 @@ Object.defineProperty(exports, "__esModule", {
19
17
  });
20
18
  exports.Component = void 0;
21
19
 
22
- function _defineProperty2() {
23
- const data = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
24
-
25
- _defineProperty2 = function () {
26
- return data;
27
- };
28
-
29
- return data;
30
- }
31
-
32
20
  function _toolboxString() {
33
21
  const data = require("@teambit/toolbox.string.capitalize");
34
22
 
@@ -39,16 +27,6 @@ function _toolboxString() {
39
27
  return data;
40
28
  }
41
29
 
42
- function _componentId() {
43
- const data = require("@teambit/component-id");
44
-
45
- _componentId = function () {
46
- return data;
47
- };
48
-
49
- return data;
50
- }
51
-
52
30
  function _bitError() {
53
31
  const data = require("@teambit/bit-error");
54
32
 
@@ -89,10 +67,6 @@ function _exceptions() {
89
67
  return data;
90
68
  }
91
69
 
92
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
93
-
94
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2().default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
95
-
96
70
  function _asyncIterator(iterable) { var method, async, sync, retry = 2; for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) { if (async && null != (method = iterable[async])) return method.call(iterable); if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable)); async = "@@asyncIterator", sync = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
97
71
 
98
72
  function AsyncFromSyncIterator(s) { function AsyncFromSyncIteratorContinuation(r) { if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); var done = r.done; return Promise.resolve(r.value).then(function (value) { return { value: value, done: done }; }); } return AsyncFromSyncIterator = function (s) { this.s = s, this.n = s.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function () { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, return: function (value) { var ret = this.s.return; return void 0 === ret ? Promise.resolve({ value: value, done: !0 }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments)); }, throw: function (value) { var thr = this.s.return; return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(s); }
@@ -185,11 +159,7 @@ class Component {
185
159
  }
186
160
 
187
161
  async getLogs(filter) {
188
- const componentIdObj = this.id.toObject();
189
- const id = !(filter !== null && filter !== void 0 && filter.head) ? await this.factory.resolveComponentId(this.id.toStringWithoutVersion()) : await this.factory.resolveComponentId(_componentId().ComponentID.fromObject(_objectSpread(_objectSpread({}, componentIdObj), {}, {
190
- version: filter.head
191
- })));
192
- const allLogs = await this.factory.getLogs(id);
162
+ const allLogs = await this.factory.getLogs(this.id, false, filter === null || filter === void 0 ? void 0 : filter.head);
193
163
  if (!filter) return allLogs;
194
164
  const {
195
165
  type,
@@ -1 +1 @@
1
- {"version":3,"sources":["component.ts"],"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","componentIdObj","toObject","resolveComponentId","toStringWithoutVersion","ComponentID","fromObject","version","allLogs","type","limit","offset","sort","typeFilter","snap","tag","filteredLogs","reverse","stringify","JSON","displayName","tokens","name","split","map","token","join","isModified","Promise","resolve","isOutdated","latestTag","byVersion","isNew","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"],"mappings":"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","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 componentIdObj = this.id.toObject();\n\n const id = !filter?.head\n ? await this.factory.resolveComponentId(this.id.toStringWithoutVersion())\n : await this.factory.resolveComponentId(ComponentID.fromObject({ ...componentIdObj, version: filter.head }));\n\n const allLogs = await this.factory.getLogs(id);\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 if (!this.head) return Promise.resolve(true);\n return Promise.resolve(this.state.isModified);\n // return Promise.resolve(this.state.hash !== this.head.hash);\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"]}
1
+ {"version":3,"sources":["component.ts"],"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","reverse","stringify","JSON","displayName","tokens","name","split","map","token","join","version","isModified","Promise","resolve","isOutdated","latestTag","byVersion","isNew","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"],"mappings":"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","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 if (!this.head) return Promise.resolve(true);\n return Promise.resolve(this.state.isModified);\n // return Promise.resolve(this.state.hash !== this.head.hash);\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"]}
@@ -215,7 +215,13 @@ function VersionRelatedDropdowns({
215
215
  }));
216
216
  }, [logs]);
217
217
  const tags = (0, _react().useMemo)(() => {
218
- return (logs || []).filter(log => log.tag).map(tag => _objectSpread(_objectSpread({}, tag), {}, {
218
+ var _component$tags;
219
+
220
+ const tagLookup = new Map();
221
+ (logs || []).filter(log => log.tag).forEach(tag => {
222
+ tagLookup.set(tag === null || tag === void 0 ? void 0 : tag.tag, tag);
223
+ });
224
+ return (0, _lodash().compact)((_component$tags = component.tags) === null || _component$tags === void 0 ? void 0 : _component$tags.toArray().reverse().map(tag => tagLookup.get(tag.version.version))).map(tag => _objectSpread(_objectSpread({}, tag), {}, {
219
225
  version: tag.tag
220
226
  }));
221
227
  }, [logs]);
@@ -1 +1 @@
1
- {"version":3,"sources":["menu.tsx"],"names":["Menu","navigationSlot","widgetSlot","className","host","menuItemSlot","consumeMethodSlot","component","mainMenuItems","values","styles","topBar","leftSide","rightSide","widgets","VersionRelatedDropdowns","consumeMethods","location","isNew","tags","isEmpty","lanesContext","currentLane","logs","isWorkspace","snaps","filter","log","tag","map","snap","version","hash","lanes","getLanesByComponentId","id","localVersion","currentVersion","search","includes","methods","useConsumeMethods","length","useBox","name","latest","componentModel","method","x","Component","Title"],"mappings":"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","sourcesContent":["import { 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-ui.routing.routing-provider';\nimport { flatten, groupBy } 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 type { ComponentModel } from '../component-model';\nimport { useComponent } from '../use-component';\nimport { MenuNav } from './menu-nav';\nimport styles from './menu.module.scss';\nimport { OrderedNavigationSlot, ConsumeMethodSlot } from './nav-plugin';\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 Menu({ navigationSlot, widgetSlot, className, host, menuItemSlot, consumeMethodSlot }: MenuProps) {\n const { component } = useComponent(host);\n const mainMenuItems = useMemo(() => groupBy(flatten(menuItemSlot.values()), 'category'), [menuItemSlot]);\n if (!component) return <FullLoader />;\n return (\n <div className={classnames(styles.topBar, className)}>\n <div className={styles.leftSide}>\n <MenuNav navigationSlot={navigationSlot} />\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\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 isNew = component.tags.isEmpty();\n const lanesContext = useLanesContext();\n const currentLane = lanesContext?.currentLane;\n const { logs } = component;\n const isWorkspace = host === 'teambit.workspace/workspace';\n\n const snaps = useMemo(() => {\n return (logs || []).filter((log) => !log.tag).map((snap) => ({ ...snap, version: snap.hash }));\n }, [logs]);\n\n const tags = useMemo(() => {\n return (logs || []).filter((log) => log.tag).map((tag) => ({ ...tag, version: tag.tag as string }));\n }, [logs]);\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 />\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"]}
1
+ {"version":3,"sources":["menu.tsx"],"names":["Menu","navigationSlot","widgetSlot","className","host","menuItemSlot","consumeMethodSlot","component","mainMenuItems","values","styles","topBar","leftSide","rightSide","widgets","VersionRelatedDropdowns","consumeMethods","location","isNew","tags","isEmpty","lanesContext","currentLane","logs","isWorkspace","snaps","filter","log","tag","map","snap","version","hash","tagLookup","Map","forEach","set","toArray","reverse","get","lanes","getLanesByComponentId","id","localVersion","currentVersion","search","includes","methods","useConsumeMethods","length","useBox","name","latest","componentModel","method","x","Component","Title"],"mappings":"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","sourcesContent":["import { 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-ui.routing.routing-provider';\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 styles from './menu.module.scss';\nimport { OrderedNavigationSlot, ConsumeMethodSlot } from './nav-plugin';\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 Menu({ navigationSlot, widgetSlot, className, host, menuItemSlot, consumeMethodSlot }: MenuProps) {\n const { component } = useComponent(host);\n const mainMenuItems = useMemo(() => groupBy(flatten(menuItemSlot.values()), 'category'), [menuItemSlot]);\n if (!component) return <FullLoader />;\n return (\n <div className={classnames(styles.topBar, className)}>\n <div className={styles.leftSide}>\n <MenuNav navigationSlot={navigationSlot} />\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\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 isNew = component.tags.isEmpty();\n const lanesContext = useLanesContext();\n const currentLane = lanesContext?.currentLane;\n const { logs } = component;\n const isWorkspace = host === 'teambit.workspace/workspace';\n\n const snaps = useMemo(() => {\n return (logs || []).filter((log) => !log.tag).map((snap) => ({ ...snap, version: snap.hash }));\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 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 />\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"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/component",
3
- "version": "0.0.675",
3
+ "version": "0.0.676",
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.675"
9
+ "version": "0.0.676"
10
10
  },
11
11
  "dependencies": {
12
12
  "@teambit/any-fs": "0.0.5",
@@ -29,37 +29,37 @@
29
29
  "@teambit/base-ui.routing.routing-provider": "1.0.0",
30
30
  "@teambit/component-id": "0.0.401",
31
31
  "@teambit/ui-foundation.ui.menu-widget-icon": "0.0.488",
32
- "@teambit/aspect-loader": "0.0.675",
32
+ "@teambit/aspect-loader": "0.0.676",
33
33
  "@teambit/legacy-bit-id": "0.0.398",
34
34
  "@teambit/toolbox.string.capitalize": "0.0.483",
35
- "@teambit/cli": "0.0.452",
36
- "@teambit/config": "0.0.465",
37
- "@teambit/express": "0.0.548",
38
- "@teambit/graphql": "0.0.675",
35
+ "@teambit/cli": "0.0.453",
36
+ "@teambit/config": "0.0.466",
37
+ "@teambit/express": "0.0.549",
38
+ "@teambit/graphql": "0.0.676",
39
39
  "@teambit/bit-error": "0.0.394",
40
- "@teambit/command-bar": "0.0.675",
41
- "@teambit/preview": "0.0.675",
42
- "@teambit/pubsub": "0.0.675",
40
+ "@teambit/command-bar": "0.0.676",
41
+ "@teambit/preview": "0.0.676",
42
+ "@teambit/pubsub": "0.0.676",
43
43
  "@teambit/ui-foundation.ui.is-browser": "0.0.486",
44
44
  "@teambit/ui-foundation.ui.main-dropdown": "0.0.486",
45
45
  "@teambit/ui-foundation.ui.react-router.slot-router": "0.0.488",
46
46
  "@teambit/ui-foundation.ui.use-box.menu": "0.0.111",
47
- "@teambit/ui": "0.0.675",
47
+ "@teambit/ui": "0.0.676",
48
48
  "@teambit/component-issues": "0.0.46",
49
49
  "@teambit/ui-foundation.ui.hooks.use-data-query": "0.0.487",
50
50
  "@teambit/cli-table": "0.0.33",
51
- "@teambit/component-descriptor": "0.0.13",
52
- "@teambit/lanes.ui.lanes": "0.0.13",
51
+ "@teambit/component-descriptor": "0.0.16",
52
+ "@teambit/lanes.ui.lanes": "0.0.14",
53
53
  "@teambit/ui-foundation.ui.react-router.use-query": "0.0.486",
54
54
  "@teambit/design.ui.empty-box": "0.0.353",
55
55
  "@teambit/harmony.ui.aspect-box": "0.0.486",
56
56
  "@teambit/design.ui.pages.not-found": "0.0.353",
57
57
  "@teambit/design.ui.pages.server-error": "0.0.353",
58
- "@teambit/compositions": "0.0.675",
59
- "@teambit/deprecation": "0.0.675",
60
- "@teambit/envs": "0.0.675",
58
+ "@teambit/compositions": "0.0.676",
59
+ "@teambit/deprecation": "0.0.676",
60
+ "@teambit/envs": "0.0.676",
61
61
  "@teambit/legacy-component-log": "0.0.392",
62
- "@teambit/component.ui.version-dropdown": "0.0.498",
62
+ "@teambit/component.ui.version-dropdown": "0.0.499",
63
63
  "@teambit/ui-foundation.ui.full-loader": "0.0.486",
64
64
  "@teambit/ui-foundation.ui.use-box.dropdown": "0.0.111",
65
65
  "@teambit/ui-foundation.ui.react-router.extend-path": "0.0.486"
@@ -81,7 +81,7 @@
81
81
  },
82
82
  "peerDependencies": {
83
83
  "@apollo/client": "^3.0.0",
84
- "@teambit/legacy": "1.0.231",
84
+ "@teambit/legacy": "1.0.232",
85
85
  "react-dom": "^16.8.0 || ^17.0.0",
86
86
  "react": "^16.8.0 || ^17.0.0"
87
87
  },
@@ -109,7 +109,7 @@
109
109
  "react": "-"
110
110
  },
111
111
  "peerDependencies": {
112
- "@teambit/legacy": "1.0.231",
112
+ "@teambit/legacy": "1.0.232",
113
113
  "react-dom": "^16.8.0 || ^17.0.0",
114
114
  "react": "^16.8.0 || ^17.0.0"
115
115
  }
@@ -1 +1 @@
1
- export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.675/dist/component.docs.mdx')]
1
+ export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.676/dist/component.docs.mdx')]
package/ui/menu/menu.tsx CHANGED
@@ -3,12 +3,13 @@ import { VersionDropdown } from '@teambit/component.ui.version-dropdown';
3
3
  import { FullLoader } from '@teambit/ui-foundation.ui.full-loader';
4
4
  import type { ConsumeMethod } from '@teambit/ui-foundation.ui.use-box.menu';
5
5
  import { useLocation } from '@teambit/base-ui.routing.routing-provider';
6
- import { flatten, groupBy } from 'lodash';
6
+ import { flatten, groupBy, compact } from 'lodash';
7
7
  import classnames from 'classnames';
8
8
  import React, { useMemo } from 'react';
9
9
  import { UseBoxDropdown } from '@teambit/ui-foundation.ui.use-box.dropdown';
10
10
  import { Menu as ConsumeMethodsMenu } from '@teambit/ui-foundation.ui.use-box.menu';
11
11
  import { LaneModel, useLanesContext } from '@teambit/lanes.ui.lanes';
12
+ import { LegacyComponentLog } from '@teambit/legacy-component-log';
12
13
  import type { ComponentModel } from '../component-model';
13
14
  import { useComponent } from '../use-component';
14
15
  import { MenuNav } from './menu-nav';
@@ -78,7 +79,18 @@ function VersionRelatedDropdowns({
78
79
  }, [logs]);
79
80
 
80
81
  const tags = useMemo(() => {
81
- return (logs || []).filter((log) => log.tag).map((tag) => ({ ...tag, version: tag.tag as string }));
82
+ const tagLookup = new Map<string, LegacyComponentLog>();
83
+ (logs || [])
84
+ .filter((log) => log.tag)
85
+ .forEach((tag) => {
86
+ tagLookup.set(tag?.tag as string, tag);
87
+ });
88
+ return compact(
89
+ component.tags
90
+ ?.toArray()
91
+ .reverse()
92
+ .map((tag) => tagLookup.get(tag.version.version))
93
+ ).map((tag) => ({ ...tag, version: tag.tag as string }));
82
94
  }, [logs]);
83
95
 
84
96
  const lanes = lanesContext?.getLanesByComponentId(component.id) || [];