@teambit/component 0.0.593 → 0.0.597
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.
- package/component.docs.mdx +47 -0
- package/component.ui.runtime.tsx +44 -4
- package/dist/component.docs.mdx +47 -0
- package/dist/component.ui.runtime.d.ts +8 -4
- package/dist/component.ui.runtime.js +40 -4
- package/dist/component.ui.runtime.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/dist/show/show.cmd.js +12 -1
- package/dist/show/show.cmd.js.map +1 -1
- package/dist/ui/component-model/component-model.d.ts +11 -2
- package/dist/ui/component-model/component-model.js +9 -3
- package/dist/ui/component-model/component-model.js.map +1 -1
- package/dist/ui/menu/index.d.ts +1 -1
- package/dist/ui/menu/index.js.map +1 -1
- package/dist/ui/menu/menu.d.ts +3 -2
- package/dist/ui/menu/menu.js +16 -17
- package/dist/ui/menu/menu.js.map +1 -1
- package/dist/ui/menu/nav-plugin.d.ts +4 -0
- package/dist/ui/use-component-query.js +1 -0
- package/dist/ui/use-component-query.js.map +1 -1
- package/package-tar/teambit-component-0.0.597.tgz +0 -0
- package/package.json +34 -34
- package/show/show.cmd.ts +3 -1
- package/ui/component-model/component-model.ts +10 -2
- package/ui/menu/index.ts +1 -1
- package/ui/menu/menu.tsx +28 -21
- package/ui/menu/nav-plugin.tsx +7 -0
- package/ui/use-component-query.ts +1 -0
- package/package-tar/teambit-component-0.0.593.tgz +0 -0
package/component.docs.mdx
CHANGED
|
@@ -6,3 +6,50 @@ labels: ['component', 'bit', 'extension', 'aspect']
|
|
|
6
6
|
import { Component } from '@teambit/component.aspect-docs.component';
|
|
7
7
|
|
|
8
8
|
<Component />
|
|
9
|
+
|
|
10
|
+
## Expanding this aspect
|
|
11
|
+
|
|
12
|
+
Bit allows you to register to slots and expand the component aspect with new capabilities.
|
|
13
|
+
|
|
14
|
+
### Available slots:
|
|
15
|
+
|
|
16
|
+
This aspect can be expanded via its available slots, to allow new capabilities to the component page ui.
|
|
17
|
+
|
|
18
|
+
#### `registerConsumeMethod`:
|
|
19
|
+
|
|
20
|
+
This method allows you to register new ways to consume a component, and present it in the component page ui. It will add any custom components to the `use-box` in the page's header.
|
|
21
|
+
|
|
22
|
+
First, require the component aspect to your aspect's code, and use `registerConsumeMethod` to add your custom **consume method**.
|
|
23
|
+
|
|
24
|
+
`registerConsumeMethod` expects a callback function that is provided with the `ComponentModel` data in it's `args` and returns an object with `Component` and a `Title` of type `ReactNode` that you would need to supply in order for them to render in the menu.
|
|
25
|
+
|
|
26
|
+
Another optional parameter is the `order`. This will allow you to decide the order of your method in the tabs.
|
|
27
|
+
|
|
28
|
+
:::note
|
|
29
|
+
If `Title` or `Component` are `undefined`, the method will not be presented in the menu.
|
|
30
|
+
:::
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
// in your aspect
|
|
34
|
+
|
|
35
|
+
import { ComponentUI } from '@teambit/component';
|
|
36
|
+
|
|
37
|
+
private pnpmMethod: ConsumePlugin = (componentModel) => {
|
|
38
|
+
const registry = componentModel.packageName.split('/')[0];
|
|
39
|
+
return {
|
|
40
|
+
Title: <img src="https://static.bit.dev/brands/pnpm.svg" />,
|
|
41
|
+
Component: (
|
|
42
|
+
<Install
|
|
43
|
+
config={`npm config set ${registry}:registry' https://node.bit.dev`}
|
|
44
|
+
componentName={componentModel.id.name}
|
|
45
|
+
packageManager="pnpm"
|
|
46
|
+
copyString={`pnpm i ${componentModel.packageName}`}
|
|
47
|
+
registryName={registry}
|
|
48
|
+
/>
|
|
49
|
+
),
|
|
50
|
+
order: 1,
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
ComponentUI.registerConsumeMethod(YourAspect.pnpmMethod)
|
|
55
|
+
```
|
package/component.ui.runtime.tsx
CHANGED
|
@@ -7,12 +7,13 @@ import { NavLinkProps } from '@teambit/base-ui.routing.nav-link';
|
|
|
7
7
|
import { UIRuntime } from '@teambit/ui';
|
|
8
8
|
import { isBrowser } from '@teambit/ui-foundation.ui.is-browser';
|
|
9
9
|
import React from 'react';
|
|
10
|
+
import { Import } from '@teambit/ui-foundation.ui.use-box.menu';
|
|
10
11
|
import { RouteProps } from 'react-router-dom';
|
|
11
12
|
import CommandBarAspect, { CommandBarUI, CommandEntry } from '@teambit/command-bar';
|
|
12
13
|
import copy from 'copy-to-clipboard';
|
|
13
14
|
import { ComponentAspect } from './component.aspect';
|
|
14
15
|
import { Component, ComponentPageElement, ComponentPageSlot } from './ui/component';
|
|
15
|
-
import { Menu, NavPlugin, OrderedNavigationSlot } from './ui/menu';
|
|
16
|
+
import { Menu, NavPlugin, OrderedNavigationSlot, ConsumeMethodSlot, ConsumePlugin } from './ui/menu';
|
|
16
17
|
import { AspectSection } from './aspect.section';
|
|
17
18
|
import { ComponentModel } from './ui';
|
|
18
19
|
|
|
@@ -40,6 +41,8 @@ export class ComponentUI {
|
|
|
40
41
|
|
|
41
42
|
private navSlot: OrderedNavigationSlot,
|
|
42
43
|
|
|
44
|
+
private consumeMethodSlot: ConsumeMethodSlot,
|
|
45
|
+
|
|
43
46
|
/**
|
|
44
47
|
* slot for registering a new widget to the menu.
|
|
45
48
|
*/
|
|
@@ -115,6 +118,21 @@ export class ComponentUI {
|
|
|
115
118
|
},
|
|
116
119
|
];
|
|
117
120
|
|
|
121
|
+
private bitMethod: ConsumePlugin = (comp) => {
|
|
122
|
+
const version = comp.version === comp.latest ? '' : `@${comp.version}`;
|
|
123
|
+
return {
|
|
124
|
+
Title: <img style={{ width: '20px' }} src="https://static.bit.dev/brands/bit-logo-text.svg" />,
|
|
125
|
+
Component: (
|
|
126
|
+
<Import
|
|
127
|
+
componentId={`${comp.id.toString({ ignoreVersion: true })}${version}`}
|
|
128
|
+
packageName={`${comp.packageName}${version}`}
|
|
129
|
+
componentName={comp.id.name}
|
|
130
|
+
/>
|
|
131
|
+
),
|
|
132
|
+
order: 0,
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
|
|
118
136
|
registerPubSub() {
|
|
119
137
|
this.pubsub.sub(PreviewAspect.id, (be: BitBaseEvent<any>) => {
|
|
120
138
|
if (be.type === ClickInsideAnIframeEvent.TYPE) {
|
|
@@ -147,7 +165,13 @@ export class ComponentUI {
|
|
|
147
165
|
|
|
148
166
|
getMenu(host: string) {
|
|
149
167
|
return (
|
|
150
|
-
<Menu
|
|
168
|
+
<Menu
|
|
169
|
+
navigationSlot={this.navSlot}
|
|
170
|
+
consumeMethodSlot={this.consumeMethodSlot}
|
|
171
|
+
widgetSlot={this.widgetSlot}
|
|
172
|
+
host={host}
|
|
173
|
+
menuItemSlot={this.menuItemSlot}
|
|
174
|
+
/>
|
|
151
175
|
);
|
|
152
176
|
}
|
|
153
177
|
|
|
@@ -163,6 +187,10 @@ export class ComponentUI {
|
|
|
163
187
|
});
|
|
164
188
|
}
|
|
165
189
|
|
|
190
|
+
registerConsumeMethod(...consumeMethods: ConsumePlugin[]) {
|
|
191
|
+
this.consumeMethodSlot.register(consumeMethods);
|
|
192
|
+
}
|
|
193
|
+
|
|
166
194
|
registerWidget(widget: NavLinkProps, order?: number) {
|
|
167
195
|
this.widgetSlot.register({ props: widget, order });
|
|
168
196
|
}
|
|
@@ -183,6 +211,7 @@ export class ComponentUI {
|
|
|
183
211
|
Slot.withType<RouteProps>(),
|
|
184
212
|
Slot.withType<NavPlugin>(),
|
|
185
213
|
Slot.withType<NavigationSlot>(),
|
|
214
|
+
Slot.withType<ConsumeMethodSlot>(),
|
|
186
215
|
Slot.withType<MenuItemSlot>(),
|
|
187
216
|
Slot.withType<ComponentPageSlot>(),
|
|
188
217
|
];
|
|
@@ -190,9 +219,10 @@ export class ComponentUI {
|
|
|
190
219
|
static async provider(
|
|
191
220
|
[pubsub, commandBarUI]: [PubsubUI, CommandBarUI],
|
|
192
221
|
config,
|
|
193
|
-
[routeSlot, navSlot, widgetSlot, menuItemSlot, pageSlot]: [
|
|
222
|
+
[routeSlot, navSlot, consumeMethodSlot, widgetSlot, menuItemSlot, pageSlot]: [
|
|
194
223
|
RouteSlot,
|
|
195
224
|
OrderedNavigationSlot,
|
|
225
|
+
ConsumeMethodSlot,
|
|
196
226
|
OrderedNavigationSlot,
|
|
197
227
|
MenuItemSlot,
|
|
198
228
|
ComponentPageSlot
|
|
@@ -200,13 +230,23 @@ export class ComponentUI {
|
|
|
200
230
|
) {
|
|
201
231
|
// TODO: refactor ComponentHost to a separate extension (including sidebar, host, graphql, etc.)
|
|
202
232
|
// TODO: add contextual hook for ComponentHost @uri/@oded
|
|
203
|
-
const componentUI = new ComponentUI(
|
|
233
|
+
const componentUI = new ComponentUI(
|
|
234
|
+
pubsub,
|
|
235
|
+
routeSlot,
|
|
236
|
+
navSlot,
|
|
237
|
+
consumeMethodSlot,
|
|
238
|
+
widgetSlot,
|
|
239
|
+
menuItemSlot,
|
|
240
|
+
pageSlot,
|
|
241
|
+
commandBarUI
|
|
242
|
+
);
|
|
204
243
|
const section = new AspectSection();
|
|
205
244
|
|
|
206
245
|
componentUI.commandBarUI.addCommand(...componentUI.keyBindings);
|
|
207
246
|
componentUI.registerMenuItem(componentUI.menuItems);
|
|
208
247
|
componentUI.registerRoute(section.route);
|
|
209
248
|
componentUI.registerWidget(section.navigationLink, section.order);
|
|
249
|
+
componentUI.registerConsumeMethod(componentUI.bitMethod);
|
|
210
250
|
return componentUI;
|
|
211
251
|
}
|
|
212
252
|
}
|
package/dist/component.docs.mdx
CHANGED
|
@@ -6,3 +6,50 @@ labels: ['component', 'bit', 'extension', 'aspect']
|
|
|
6
6
|
import { Component } from '@teambit/component.aspect-docs.component';
|
|
7
7
|
|
|
8
8
|
<Component />
|
|
9
|
+
|
|
10
|
+
## Expanding this aspect
|
|
11
|
+
|
|
12
|
+
Bit allows you to register to slots and expand the component aspect with new capabilities.
|
|
13
|
+
|
|
14
|
+
### Available slots:
|
|
15
|
+
|
|
16
|
+
This aspect can be expanded via its available slots, to allow new capabilities to the component page ui.
|
|
17
|
+
|
|
18
|
+
#### `registerConsumeMethod`:
|
|
19
|
+
|
|
20
|
+
This method allows you to register new ways to consume a component, and present it in the component page ui. It will add any custom components to the `use-box` in the page's header.
|
|
21
|
+
|
|
22
|
+
First, require the component aspect to your aspect's code, and use `registerConsumeMethod` to add your custom **consume method**.
|
|
23
|
+
|
|
24
|
+
`registerConsumeMethod` expects a callback function that is provided with the `ComponentModel` data in it's `args` and returns an object with `Component` and a `Title` of type `ReactNode` that you would need to supply in order for them to render in the menu.
|
|
25
|
+
|
|
26
|
+
Another optional parameter is the `order`. This will allow you to decide the order of your method in the tabs.
|
|
27
|
+
|
|
28
|
+
:::note
|
|
29
|
+
If `Title` or `Component` are `undefined`, the method will not be presented in the menu.
|
|
30
|
+
:::
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
// in your aspect
|
|
34
|
+
|
|
35
|
+
import { ComponentUI } from '@teambit/component';
|
|
36
|
+
|
|
37
|
+
private pnpmMethod: ConsumePlugin = (componentModel) => {
|
|
38
|
+
const registry = componentModel.packageName.split('/')[0];
|
|
39
|
+
return {
|
|
40
|
+
Title: <img src="https://static.bit.dev/brands/pnpm.svg" />,
|
|
41
|
+
Component: (
|
|
42
|
+
<Install
|
|
43
|
+
config={`npm config set ${registry}:registry' https://node.bit.dev`}
|
|
44
|
+
componentName={componentModel.id.name}
|
|
45
|
+
packageManager="pnpm"
|
|
46
|
+
copyString={`pnpm i ${componentModel.packageName}`}
|
|
47
|
+
registryName={registry}
|
|
48
|
+
/>
|
|
49
|
+
),
|
|
50
|
+
order: 1,
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
ComponentUI.registerConsumeMethod(YourAspect.pnpmMethod)
|
|
55
|
+
```
|
|
@@ -5,7 +5,7 @@ import { NavLinkProps } from '@teambit/base-ui.routing.nav-link';
|
|
|
5
5
|
import { RouteProps } from 'react-router-dom';
|
|
6
6
|
import { CommandBarUI } from '@teambit/command-bar';
|
|
7
7
|
import { ComponentPageElement, ComponentPageSlot } from './ui/component';
|
|
8
|
-
import { NavPlugin, OrderedNavigationSlot } from './ui/menu';
|
|
8
|
+
import { NavPlugin, OrderedNavigationSlot, ConsumeMethodSlot, ConsumePlugin } from './ui/menu';
|
|
9
9
|
import { ComponentModel } from './ui';
|
|
10
10
|
export declare type Server = {
|
|
11
11
|
env: string;
|
|
@@ -22,6 +22,7 @@ export declare class ComponentUI {
|
|
|
22
22
|
private pubsub;
|
|
23
23
|
private routeSlot;
|
|
24
24
|
private navSlot;
|
|
25
|
+
private consumeMethodSlot;
|
|
25
26
|
/**
|
|
26
27
|
* slot for registering a new widget to the menu.
|
|
27
28
|
*/
|
|
@@ -34,7 +35,7 @@ export declare class ComponentUI {
|
|
|
34
35
|
/**
|
|
35
36
|
* Pubsub aspects
|
|
36
37
|
*/
|
|
37
|
-
pubsub: PubsubUI, routeSlot: RouteSlot, navSlot: OrderedNavigationSlot,
|
|
38
|
+
pubsub: PubsubUI, routeSlot: RouteSlot, navSlot: OrderedNavigationSlot, consumeMethodSlot: ConsumeMethodSlot,
|
|
38
39
|
/**
|
|
39
40
|
* slot for registering a new widget to the menu.
|
|
40
41
|
*/
|
|
@@ -49,12 +50,14 @@ export declare class ComponentUI {
|
|
|
49
50
|
*/
|
|
50
51
|
private keyBindings;
|
|
51
52
|
private menuItems;
|
|
53
|
+
private bitMethod;
|
|
52
54
|
registerPubSub(): void;
|
|
53
55
|
handleComponentChange: (activeComponent?: ComponentModel | undefined) => void;
|
|
54
56
|
getComponentUI(host: string): JSX.Element;
|
|
55
57
|
getMenu(host: string): JSX.Element;
|
|
56
58
|
registerRoute(route: RouteProps): this;
|
|
57
59
|
registerNavigation(nav: NavLinkProps, order?: number): void;
|
|
60
|
+
registerConsumeMethod(...consumeMethods: ConsumePlugin[]): void;
|
|
58
61
|
registerWidget(widget: NavLinkProps, order?: number): void;
|
|
59
62
|
registerMenuItem: (menuItems: MenuItem[]) => void;
|
|
60
63
|
registerPageItem: (...items: ComponentPageElement[]) => void;
|
|
@@ -62,10 +65,11 @@ export declare class ComponentUI {
|
|
|
62
65
|
static runtime: import("@teambit/harmony").RuntimeDefinition;
|
|
63
66
|
static slots: (((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<RouteProps<string, {
|
|
64
67
|
[x: string]: string | undefined;
|
|
65
|
-
}>>) | ((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<MenuItemSlot>) | ((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<NavPlugin>) | ((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<NavigationSlot>) | ((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<ComponentPageSlot>))[];
|
|
66
|
-
static provider([pubsub, commandBarUI]: [PubsubUI, CommandBarUI], config: any, [routeSlot, navSlot, widgetSlot, menuItemSlot, pageSlot]: [
|
|
68
|
+
}>>) | ((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<MenuItemSlot>) | ((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<NavPlugin>) | ((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<NavigationSlot>) | ((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<ConsumeMethodSlot>) | ((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<ComponentPageSlot>))[];
|
|
69
|
+
static provider([pubsub, commandBarUI]: [PubsubUI, CommandBarUI], config: any, [routeSlot, navSlot, consumeMethodSlot, widgetSlot, menuItemSlot, pageSlot]: [
|
|
67
70
|
RouteSlot,
|
|
68
71
|
OrderedNavigationSlot,
|
|
72
|
+
ConsumeMethodSlot,
|
|
69
73
|
OrderedNavigationSlot,
|
|
70
74
|
MenuItemSlot,
|
|
71
75
|
ComponentPageSlot
|
|
@@ -81,6 +81,16 @@ function _react() {
|
|
|
81
81
|
return data;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
+
function _uiFoundationUiUseBox() {
|
|
85
|
+
const data = require("@teambit/ui-foundation.ui.use-box.menu");
|
|
86
|
+
|
|
87
|
+
_uiFoundationUiUseBox = function () {
|
|
88
|
+
return data;
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
return data;
|
|
92
|
+
}
|
|
93
|
+
|
|
84
94
|
function _commandBar() {
|
|
85
95
|
const data = _interopRequireDefault(require("@teambit/command-bar"));
|
|
86
96
|
|
|
@@ -153,7 +163,7 @@ class ComponentUI {
|
|
|
153
163
|
/**
|
|
154
164
|
* Pubsub aspects
|
|
155
165
|
*/
|
|
156
|
-
pubsub, routeSlot, navSlot,
|
|
166
|
+
pubsub, routeSlot, navSlot, consumeMethodSlot,
|
|
157
167
|
/**
|
|
158
168
|
* slot for registering a new widget to the menu.
|
|
159
169
|
*/
|
|
@@ -161,6 +171,7 @@ class ComponentUI {
|
|
|
161
171
|
this.pubsub = pubsub;
|
|
162
172
|
this.routeSlot = routeSlot;
|
|
163
173
|
this.navSlot = navSlot;
|
|
174
|
+
this.consumeMethodSlot = consumeMethodSlot;
|
|
164
175
|
this.widgetSlot = widgetSlot;
|
|
165
176
|
this.menuItemSlot = menuItemSlot;
|
|
166
177
|
this.pageItemSlot = pageItemSlot;
|
|
@@ -234,6 +245,25 @@ class ComponentUI {
|
|
|
234
245
|
return (_this$commandBarUI4 = this.commandBarUI) === null || _this$commandBarUI4 === void 0 ? void 0 : _this$commandBarUI4.run('component.copyNpmId');
|
|
235
246
|
}
|
|
236
247
|
}]);
|
|
248
|
+
(0, _defineProperty2().default)(this, "bitMethod", comp => {
|
|
249
|
+
const version = comp.version === comp.latest ? '' : `@${comp.version}`;
|
|
250
|
+
return {
|
|
251
|
+
Title: /*#__PURE__*/_react().default.createElement("img", {
|
|
252
|
+
style: {
|
|
253
|
+
width: '20px'
|
|
254
|
+
},
|
|
255
|
+
src: "https://static.bit.dev/brands/bit-logo-text.svg"
|
|
256
|
+
}),
|
|
257
|
+
Component: /*#__PURE__*/_react().default.createElement(_uiFoundationUiUseBox().Import, {
|
|
258
|
+
componentId: `${comp.id.toString({
|
|
259
|
+
ignoreVersion: true
|
|
260
|
+
})}${version}`,
|
|
261
|
+
packageName: `${comp.packageName}${version}`,
|
|
262
|
+
componentName: comp.id.name
|
|
263
|
+
}),
|
|
264
|
+
order: 0
|
|
265
|
+
};
|
|
266
|
+
});
|
|
237
267
|
(0, _defineProperty2().default)(this, "handleComponentChange", activeComponent => {
|
|
238
268
|
this.activeComponent = activeComponent;
|
|
239
269
|
});
|
|
@@ -276,6 +306,7 @@ class ComponentUI {
|
|
|
276
306
|
getMenu(host) {
|
|
277
307
|
return /*#__PURE__*/_react().default.createElement(_menu().Menu, {
|
|
278
308
|
navigationSlot: this.navSlot,
|
|
309
|
+
consumeMethodSlot: this.consumeMethodSlot,
|
|
279
310
|
widgetSlot: this.widgetSlot,
|
|
280
311
|
host: host,
|
|
281
312
|
menuItemSlot: this.menuItemSlot
|
|
@@ -294,6 +325,10 @@ class ComponentUI {
|
|
|
294
325
|
});
|
|
295
326
|
}
|
|
296
327
|
|
|
328
|
+
registerConsumeMethod(...consumeMethods) {
|
|
329
|
+
this.consumeMethodSlot.register(consumeMethods);
|
|
330
|
+
}
|
|
331
|
+
|
|
297
332
|
registerWidget(widget, order) {
|
|
298
333
|
this.widgetSlot.register({
|
|
299
334
|
props: widget,
|
|
@@ -301,15 +336,16 @@ class ComponentUI {
|
|
|
301
336
|
});
|
|
302
337
|
}
|
|
303
338
|
|
|
304
|
-
static async provider([pubsub, commandBarUI], config, [routeSlot, navSlot, widgetSlot, menuItemSlot, pageSlot]) {
|
|
339
|
+
static async provider([pubsub, commandBarUI], config, [routeSlot, navSlot, consumeMethodSlot, widgetSlot, menuItemSlot, pageSlot]) {
|
|
305
340
|
// TODO: refactor ComponentHost to a separate extension (including sidebar, host, graphql, etc.)
|
|
306
341
|
// TODO: add contextual hook for ComponentHost @uri/@oded
|
|
307
|
-
const componentUI = new ComponentUI(pubsub, routeSlot, navSlot, widgetSlot, menuItemSlot, pageSlot, commandBarUI);
|
|
342
|
+
const componentUI = new ComponentUI(pubsub, routeSlot, navSlot, consumeMethodSlot, widgetSlot, menuItemSlot, pageSlot, commandBarUI);
|
|
308
343
|
const section = new (_aspect().AspectSection)();
|
|
309
344
|
componentUI.commandBarUI.addCommand(...componentUI.keyBindings);
|
|
310
345
|
componentUI.registerMenuItem(componentUI.menuItems);
|
|
311
346
|
componentUI.registerRoute(section.route);
|
|
312
347
|
componentUI.registerWidget(section.navigationLink, section.order);
|
|
348
|
+
componentUI.registerConsumeMethod(componentUI.bitMethod);
|
|
313
349
|
return componentUI;
|
|
314
350
|
}
|
|
315
351
|
|
|
@@ -318,7 +354,7 @@ class ComponentUI {
|
|
|
318
354
|
exports.ComponentUI = ComponentUI;
|
|
319
355
|
(0, _defineProperty2().default)(ComponentUI, "dependencies", [_pubsub().default, _commandBar().default]);
|
|
320
356
|
(0, _defineProperty2().default)(ComponentUI, "runtime", _ui().UIRuntime);
|
|
321
|
-
(0, _defineProperty2().default)(ComponentUI, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType()]);
|
|
357
|
+
(0, _defineProperty2().default)(ComponentUI, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType()]);
|
|
322
358
|
var _default = ComponentUI;
|
|
323
359
|
exports.default = _default;
|
|
324
360
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["component.ui.runtime.tsx"],"names":["componentIdUrlRegex","ComponentUI","constructor","pubsub","routeSlot","navSlot","widgetSlot","menuItemSlot","pageItemSlot","commandBarUI","packageName","activeComponent","version","id","versionString","handler","toString","displayName","keybinding","copyNpmId","category","title","keyChar","run","menuItems","register","items","isBrowser","registerPubSub","sub","PreviewAspect","be","type","ClickInsideAnIframeEvent","TYPE","event","MouseEvent","view","window","bubbles","cancelable","body","document","dispatchEvent","getComponentUI","host","handleComponentChange","getMenu","registerRoute","route","registerNavigation","nav","order","props","registerWidget","widget","provider","config","pageSlot","componentUI","section","AspectSection","addCommand","keyBindings","registerMenuItem","navigationLink","PubsubAspect","CommandBarAspect","UIRuntime","Slot","withType","ComponentAspect","addRuntime"],"mappings":"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","sourcesContent":["import PubsubAspect, { PubsubUI, BitBaseEvent } from '@teambit/pubsub';\nimport PreviewAspect, { ClickInsideAnIframeEvent } from '@teambit/preview';\nimport { MenuItemSlot, MenuItem } from '@teambit/ui-foundation.ui.main-dropdown';\nimport { Slot } from '@teambit/harmony';\nimport { NavigationSlot, RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { NavLinkProps } from '@teambit/base-ui.routing.nav-link';\nimport { UIRuntime } from '@teambit/ui';\nimport { isBrowser } from '@teambit/ui-foundation.ui.is-browser';\nimport React from 'react';\nimport { RouteProps } from 'react-router-dom';\nimport CommandBarAspect, { CommandBarUI, CommandEntry } from '@teambit/command-bar';\nimport copy from 'copy-to-clipboard';\nimport { ComponentAspect } from './component.aspect';\nimport { Component, ComponentPageElement, ComponentPageSlot } from './ui/component';\nimport { Menu, NavPlugin, OrderedNavigationSlot } from './ui/menu';\nimport { AspectSection } from './aspect.section';\nimport { ComponentModel } from './ui';\n\nexport type Server = {\n env: string;\n url: string;\n};\n\nexport type ComponentMeta = {\n id: string;\n};\n\nexport const componentIdUrlRegex = '[\\\\w\\\\/-]*[\\\\w-]';\n\nexport class ComponentUI {\n readonly routePath = `/:componentId(${componentIdUrlRegex})`;\n\n constructor(\n /**\n * Pubsub aspects\n */\n private pubsub: PubsubUI,\n\n private routeSlot: RouteSlot,\n\n private navSlot: OrderedNavigationSlot,\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 commandBarUI: CommandBarUI\n ) {\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 handler: () => {\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 handler: 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 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 <Menu navigationSlot={this.navSlot} widgetSlot={this.widgetSlot} host={host} menuItemSlot={this.menuItemSlot} />\n );\n }\n\n registerRoute(route: RouteProps) {\n this.routeSlot.register(route);\n return this;\n }\n\n registerNavigation(nav: NavLinkProps, order?: number) {\n this.navSlot.register({\n props: nav,\n order,\n });\n }\n\n registerWidget(widget: NavLinkProps, 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 static dependencies = [PubsubAspect, CommandBarAspect];\n\n static runtime = UIRuntime;\n\n static slots = [\n Slot.withType<RouteProps>(),\n Slot.withType<NavPlugin>(),\n Slot.withType<NavigationSlot>(),\n Slot.withType<MenuItemSlot>(),\n Slot.withType<ComponentPageSlot>(),\n ];\n\n static async provider(\n [pubsub, commandBarUI]: [PubsubUI, CommandBarUI],\n config,\n [routeSlot, navSlot, widgetSlot, menuItemSlot, pageSlot]: [\n RouteSlot,\n OrderedNavigationSlot,\n OrderedNavigationSlot,\n MenuItemSlot,\n ComponentPageSlot\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(pubsub, routeSlot, navSlot, widgetSlot, menuItemSlot, pageSlot, commandBarUI);\n const section = new AspectSection();\n\n componentUI.commandBarUI.addCommand(...componentUI.keyBindings);\n componentUI.registerMenuItem(componentUI.menuItems);\n componentUI.registerRoute(section.route);\n componentUI.registerWidget(section.navigationLink, section.order);\n return componentUI;\n }\n}\n\nexport default ComponentUI;\n\nComponentAspect.addRuntime(ComponentUI);\n"]}
|
|
1
|
+
{"version":3,"sources":["component.ui.runtime.tsx"],"names":["componentIdUrlRegex","ComponentUI","constructor","pubsub","routeSlot","navSlot","consumeMethodSlot","widgetSlot","menuItemSlot","pageItemSlot","commandBarUI","packageName","activeComponent","version","id","versionString","handler","toString","displayName","keybinding","copyNpmId","category","title","keyChar","run","comp","latest","Title","width","Component","ignoreVersion","name","order","menuItems","register","items","isBrowser","registerPubSub","sub","PreviewAspect","be","type","ClickInsideAnIframeEvent","TYPE","event","MouseEvent","view","window","bubbles","cancelable","body","document","dispatchEvent","getComponentUI","host","handleComponentChange","getMenu","registerRoute","route","registerNavigation","nav","props","registerConsumeMethod","consumeMethods","registerWidget","widget","provider","config","pageSlot","componentUI","section","AspectSection","addCommand","keyBindings","registerMenuItem","navigationLink","bitMethod","PubsubAspect","CommandBarAspect","UIRuntime","Slot","withType","ComponentAspect","addRuntime"],"mappings":"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","sourcesContent":["import PubsubAspect, { PubsubUI, BitBaseEvent } from '@teambit/pubsub';\nimport PreviewAspect, { ClickInsideAnIframeEvent } from '@teambit/preview';\nimport { MenuItemSlot, MenuItem } from '@teambit/ui-foundation.ui.main-dropdown';\nimport { Slot } from '@teambit/harmony';\nimport { NavigationSlot, RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { NavLinkProps } from '@teambit/base-ui.routing.nav-link';\nimport { UIRuntime } from '@teambit/ui';\nimport { isBrowser } from '@teambit/ui-foundation.ui.is-browser';\nimport React from 'react';\nimport { Import } from '@teambit/ui-foundation.ui.use-box.menu';\nimport { RouteProps } from 'react-router-dom';\nimport CommandBarAspect, { CommandBarUI, CommandEntry } from '@teambit/command-bar';\nimport copy from 'copy-to-clipboard';\nimport { ComponentAspect } from './component.aspect';\nimport { Component, ComponentPageElement, ComponentPageSlot } from './ui/component';\nimport { Menu, NavPlugin, OrderedNavigationSlot, ConsumeMethodSlot, ConsumePlugin } from './ui/menu';\nimport { AspectSection } from './aspect.section';\nimport { ComponentModel } from './ui';\n\nexport type Server = {\n env: string;\n url: string;\n};\n\nexport type ComponentMeta = {\n id: string;\n};\n\nexport const componentIdUrlRegex = '[\\\\w\\\\/-]*[\\\\w-]';\n\nexport class ComponentUI {\n readonly routePath = `/:componentId(${componentIdUrlRegex})`;\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 commandBarUI: CommandBarUI\n ) {\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 handler: () => {\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 handler: 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) => {\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 />\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 <Menu\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(route: RouteProps) {\n this.routeSlot.register(route);\n return this;\n }\n\n registerNavigation(nav: NavLinkProps, 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: NavLinkProps, 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 static dependencies = [PubsubAspect, CommandBarAspect];\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 ];\n\n static async provider(\n [pubsub, commandBarUI]: [PubsubUI, CommandBarUI],\n config,\n [routeSlot, navSlot, consumeMethodSlot, widgetSlot, menuItemSlot, pageSlot]: [\n RouteSlot,\n OrderedNavigationSlot,\n ConsumeMethodSlot,\n OrderedNavigationSlot,\n MenuItemSlot,\n ComponentPageSlot\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 commandBarUI\n );\n const section = new AspectSection();\n\n componentUI.commandBarUI.addCommand(...componentUI.keyBindings);\n componentUI.registerMenuItem(componentUI.menuItems);\n componentUI.registerRoute(section.route);\n componentUI.registerWidget(section.navigationLink, section.order);\n componentUI.registerConsumeMethod(componentUI.bitMethod);\n return componentUI;\n }\n}\n\nexport default ComponentUI;\n\nComponentAspect.addRuntime(ComponentUI);\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export type { ComponentMain } from './component.main.runtime';
|
|
|
18
18
|
export type { ComponentUI } from './component.ui.runtime';
|
|
19
19
|
export { Section } from './section';
|
|
20
20
|
export { ComponentContext } from './ui/context/component-context';
|
|
21
|
+
export { ConsumePlugin } from './ui/menu';
|
|
21
22
|
export { ComponentModel, ComponentModelProps } from './ui/component-model';
|
|
22
23
|
export type { ShowFragment, ShowRow } from './show';
|
|
23
24
|
export { default as Config } from './config';
|
package/dist/index.js
CHANGED
|
@@ -71,6 +71,12 @@ Object.defineProperty(exports, "Config", {
|
|
|
71
71
|
return _config().default;
|
|
72
72
|
}
|
|
73
73
|
});
|
|
74
|
+
Object.defineProperty(exports, "ConsumePlugin", {
|
|
75
|
+
enumerable: true,
|
|
76
|
+
get: function () {
|
|
77
|
+
return _menu().ConsumePlugin;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
74
80
|
Object.defineProperty(exports, "InvalidComponent", {
|
|
75
81
|
enumerable: true,
|
|
76
82
|
get: function () {
|
|
@@ -257,6 +263,16 @@ function _componentContext() {
|
|
|
257
263
|
return data;
|
|
258
264
|
}
|
|
259
265
|
|
|
266
|
+
function _menu() {
|
|
267
|
+
const data = require("./ui/menu");
|
|
268
|
+
|
|
269
|
+
_menu = function () {
|
|
270
|
+
return data;
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
return data;
|
|
274
|
+
}
|
|
275
|
+
|
|
260
276
|
function _componentModel() {
|
|
261
277
|
const data = require("./ui/component-model");
|
|
262
278
|
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":["ComponentAspect"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":["ComponentAspect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAIA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAIA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAlBA;AACA;AAGA;AACA;AAcA;AACA;eAEeA,4B","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 } 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 } from './ui/context/component-context';\nexport { ConsumePlugin } from './ui/menu';\nexport { ComponentModel, ComponentModelProps } from './ui/component-model';\nexport type { ShowFragment, ShowRow } from './show';\nexport { default as Config } from './config';\n// export { AspectList } from './aspect-list';\n// export { AspectEntry } from './aspect-entry';\nexport { ComponentAspect };\nexport default ComponentAspect;\n"]}
|
package/dist/show/show.cmd.js
CHANGED
|
@@ -21,6 +21,16 @@ function _defineProperty2() {
|
|
|
21
21
|
return data;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
function _lodash() {
|
|
25
|
+
const data = require("lodash");
|
|
26
|
+
|
|
27
|
+
_lodash = function () {
|
|
28
|
+
return data;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
return data;
|
|
32
|
+
}
|
|
33
|
+
|
|
24
34
|
function _cliTable() {
|
|
25
35
|
const data = require("@teambit/cli-table");
|
|
26
36
|
|
|
@@ -117,9 +127,10 @@ class ShowCmd {
|
|
|
117
127
|
const fragments = this.component.getShowFragments();
|
|
118
128
|
const rows = await Promise.all(fragments.map(async fragment => {
|
|
119
129
|
const row = await fragment.renderRow(component);
|
|
130
|
+
if (!row.content) return null;
|
|
120
131
|
return [row.title, row.content];
|
|
121
132
|
}));
|
|
122
|
-
const table = new (_cliTable().CLITable)([], rows);
|
|
133
|
+
const table = new (_cliTable().CLITable)([], (0, _lodash().compact)(rows));
|
|
123
134
|
return table.render();
|
|
124
135
|
}
|
|
125
136
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["show.cmd.ts"],"names":["ShowCmd","constructor","component","getComponent","idStr","remote","bitId","BitId","parse","host","getHost","id","resolveComponentId","getRemoteComponent","Error","get","MissingBitMapComponent","useLegacy","json","compare","legacyShow","LegacyShow","showData","action","versions","undefined","report","legacy","fragments","getShowFragments","rows","Promise","all","map","fragment","row","renderRow","
|
|
1
|
+
{"version":3,"sources":["show.cmd.ts"],"names":["ShowCmd","constructor","component","getComponent","idStr","remote","bitId","BitId","parse","host","getHost","id","resolveComponentId","getRemoteComponent","Error","get","MissingBitMapComponent","useLegacy","json","compare","legacyShow","LegacyShow","showData","action","versions","undefined","report","legacy","fragments","getShowFragments","rows","Promise","all","map","fragment","row","renderRow","content","title","table","CLITable","render","JSON","filter"],"mappings":"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","sourcesContent":["import { Command, CommandOptions } from '@teambit/cli';\nimport { compact } from 'lodash';\n// import { Logger } from '@teambit/logger';\n// import chalk from 'chalk';\nimport { CLITable } from '@teambit/cli-table';\nimport { MissingBitMapComponent } from '@teambit/legacy/dist/consumer/bit-map/exceptions';\nimport { BitId } from '@teambit/legacy-bit-id';\nimport LegacyShow from '@teambit/legacy/dist/cli/commands/public-cmds/show-cmd';\nimport { ComponentMain } from '../component.main.runtime';\n\nexport class ShowCmd implements Command {\n name = 'show <id>';\n description = 'show a component';\n alias = '';\n group = 'info';\n options = [\n ['j', 'json', 'return the component data in json format'],\n ['l', 'legacy', 'use the legacy bit show.'],\n ['r', 'remote', 'show a remote component'],\n [\n 'c',\n 'compare',\n 'compare current file system component to latest tagged component [default=latest]. only works in legacy.',\n ],\n ] as CommandOptions;\n\n constructor(private component: ComponentMain) {}\n\n private async getComponent(idStr: string, remote: boolean) {\n if (remote) {\n const bitId: BitId = BitId.parse(idStr, true); // user used --remote so we know it has a scope\n const host = this.component.getHost('teambit.scope/scope');\n const id = await host.resolveComponentId(bitId);\n if (!host.getRemoteComponent) {\n throw new Error('Component Host does not implement getRemoteComponent()');\n }\n const component = await host.getRemoteComponent(id);\n return component;\n }\n const host = this.component.getHost();\n const id = await host.resolveComponentId(idStr);\n const component = await host.get(id);\n if (!component) throw new MissingBitMapComponent(idStr);\n return component;\n }\n\n async useLegacy(id: string, json = false, remote = false, compare = false) {\n const legacyShow = new LegacyShow();\n const showData = await legacyShow.action([id], {\n json,\n versions: undefined,\n remote,\n compare,\n });\n\n return legacyShow.report(showData);\n }\n\n async report([idStr]: [string], { legacy, remote, compare }: { legacy: boolean; remote: boolean; compare: boolean }) {\n if (legacy) return this.useLegacy(idStr, false, remote, compare);\n const component = await this.getComponent(idStr, remote);\n const fragments = this.component.getShowFragments();\n const rows = await Promise.all(\n fragments.map(async (fragment) => {\n const row = await fragment.renderRow(component);\n if (!row.content) return null;\n return [row.title, row.content];\n })\n );\n\n const table = new CLITable([], compact(rows));\n return table.render();\n }\n\n async json([idStr]: [string], { remote, legacy }: { remote: boolean; legacy: boolean }) {\n if (legacy) return JSON.parse(await this.useLegacy(idStr, true, remote));\n const component = await this.getComponent(idStr, remote);\n const fragments = this.component.getShowFragments();\n const rows = await Promise.all(\n fragments.map(async (fragment) => {\n return fragment.json ? fragment.json(component) : undefined;\n })\n );\n\n return rows.filter((row) => !!row);\n }\n}\n"]}
|
|
@@ -20,6 +20,7 @@ export declare type ComponentModelProps = {
|
|
|
20
20
|
env?: Descriptor;
|
|
21
21
|
labels?: string[];
|
|
22
22
|
host?: string;
|
|
23
|
+
latest?: string;
|
|
23
24
|
};
|
|
24
25
|
export declare type ComponentServer = {
|
|
25
26
|
env: string;
|
|
@@ -83,6 +84,10 @@ export declare class ComponentModel {
|
|
|
83
84
|
* host of the component
|
|
84
85
|
*/
|
|
85
86
|
readonly host?: string | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* latest version of component
|
|
89
|
+
*/
|
|
90
|
+
readonly latest?: string | undefined;
|
|
86
91
|
constructor(
|
|
87
92
|
/**
|
|
88
93
|
* id of the component
|
|
@@ -139,12 +144,16 @@ export declare class ComponentModel {
|
|
|
139
144
|
/**
|
|
140
145
|
* host of the component
|
|
141
146
|
*/
|
|
142
|
-
host?: string | undefined
|
|
147
|
+
host?: string | undefined,
|
|
148
|
+
/**
|
|
149
|
+
* latest version of component
|
|
150
|
+
*/
|
|
151
|
+
latest?: string | undefined);
|
|
143
152
|
get version(): string;
|
|
144
153
|
/**
|
|
145
154
|
* create an instance of a component from a plain object.
|
|
146
155
|
*/
|
|
147
|
-
static from({ id, server, displayName, compositions, packageName, elementsUrl, tags, deprecation, buildStatus, env, status, issuesCount, description, labels, host, }: ComponentModelProps): ComponentModel;
|
|
156
|
+
static from({ id, server, displayName, compositions, packageName, elementsUrl, tags, deprecation, buildStatus, env, status, issuesCount, description, labels, host, latest, }: ComponentModelProps): ComponentModel;
|
|
148
157
|
static fromArray(componentsProps: ComponentModelProps[]): ComponentModel[];
|
|
149
158
|
static empty(): ComponentModel;
|
|
150
159
|
}
|
|
@@ -104,7 +104,11 @@ class ComponentModel {
|
|
|
104
104
|
/**
|
|
105
105
|
* host of the component
|
|
106
106
|
*/
|
|
107
|
-
host
|
|
107
|
+
host,
|
|
108
|
+
/**
|
|
109
|
+
* latest version of component
|
|
110
|
+
*/
|
|
111
|
+
latest) {
|
|
108
112
|
this.id = id;
|
|
109
113
|
this.displayName = displayName;
|
|
110
114
|
this.packageName = packageName;
|
|
@@ -120,6 +124,7 @@ class ComponentModel {
|
|
|
120
124
|
this.description = description;
|
|
121
125
|
this.labels = labels;
|
|
122
126
|
this.host = host;
|
|
127
|
+
this.latest = latest;
|
|
123
128
|
}
|
|
124
129
|
|
|
125
130
|
get version() {
|
|
@@ -146,9 +151,10 @@ class ComponentModel {
|
|
|
146
151
|
issuesCount,
|
|
147
152
|
description,
|
|
148
153
|
labels,
|
|
149
|
-
host
|
|
154
|
+
host,
|
|
155
|
+
latest
|
|
150
156
|
}) {
|
|
151
|
-
return new ComponentModel(_componentId().ComponentID.fromObject(id), displayName, packageName, server, _compositions().Composition.fromArray(compositions), _tagMap().TagMap.fromArray(tags.map(tag => _tag().Tag.fromObject(tag))), buildStatus, issuesCount, elementsUrl, status, deprecation, env, description, labels, host);
|
|
157
|
+
return new ComponentModel(_componentId().ComponentID.fromObject(id), displayName, packageName, server, _compositions().Composition.fromArray(compositions), _tagMap().TagMap.fromArray(tags.map(tag => _tag().Tag.fromObject(tag))), buildStatus, issuesCount, elementsUrl, status, deprecation, env, description, labels, host, latest);
|
|
152
158
|
}
|
|
153
159
|
|
|
154
160
|
static fromArray(componentsProps) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["component-model.ts"],"names":["ComponentModel","constructor","id","displayName","packageName","server","compositions","tags","buildStatus","issuesCount","elementsUrl","status","deprecation","environment","description","labels","host","version","from","env","ComponentID","fromObject","Composition","fromArray","TagMap","map","tag","Tag","componentsProps","rawComponent","empty","name","scope","url"],"mappings":";;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;
|
|
1
|
+
{"version":3,"sources":["component-model.ts"],"names":["ComponentModel","constructor","id","displayName","packageName","server","compositions","tags","buildStatus","issuesCount","elementsUrl","status","deprecation","environment","description","labels","host","latest","version","from","env","ComponentID","fromObject","Composition","fromArray","TagMap","map","tag","Tag","componentsProps","rawComponent","empty","name","scope","url"],"mappings":"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","sourcesContent":["import { Composition, CompositionProps } from '@teambit/compositions';\nimport { DeprecationInfo } from '@teambit/deprecation';\nimport { Descriptor } from '@teambit/envs';\nimport { ComponentID, ComponentIdObj } from '@teambit/component-id';\n\nimport { Tag } from '../../tag';\nimport { TagMap } from '../../tag-map';\nimport { TagProps } from '../../tag/tag';\n// import { Snap } from '../../snap';\n\n// ADDING MORE PROPERTIES HERE IS NOT ALLOWED!!! IF YOU NEED DATA PLEASE ADD A NEW\n// HOOK FROM YOUR ASPECT!!!\n// TODO: remove all properties from here to their rightful place in their aspects.\nexport type ComponentModelProps = {\n id: ComponentIdObj;\n description: string;\n buildStatus?: string;\n server?: ComponentServer;\n displayName: string;\n packageName: string; // pkg aspect\n elementsUrl?: string; // pkg aspect\n compositions?: CompositionProps[];\n tags?: TagProps[];\n issuesCount?: number; // component/issues aspect\n status?: any; // workspace aspect.\n deprecation?: DeprecationInfo; // deprecation aspect\n env?: Descriptor; // env aspect.\n labels?: string[];\n host?: string;\n latest?: string;\n};\n\nexport type ComponentServer = {\n env: string;\n url: string;\n};\n\nexport class ComponentModel {\n constructor(\n /**\n * id of the component\n */\n readonly id: ComponentID,\n\n /**\n * display name of the component.\n */\n readonly displayName: string,\n\n /**\n * package name of the component.\n */\n readonly packageName: string,\n\n /**\n * the component server.\n */\n readonly server: ComponentServer | undefined,\n\n /**\n * array of compositions\n */\n readonly compositions: Composition[],\n\n /**\n * tags of the component.\n */\n readonly tags: TagMap,\n\n /**\n * component build status\n */\n readonly buildStatus?: string,\n\n /**\n * issues of component.\n */\n readonly issuesCount?: number,\n /**\n * elements url\n */\n readonly elementsUrl?: string,\n /**\n * status of component.\n */\n readonly status?: any,\n\n /**\n * deprecation info of the component.\n */\n readonly deprecation?: DeprecationInfo,\n\n /**\n * env descriptor.\n */\n readonly environment?: Descriptor,\n\n /**\n * description of the component.\n */\n\n readonly description = '',\n\n readonly labels: string[] = [],\n\n /**\n * host of the component\n */\n readonly host?: string,\n\n /**\n * latest version of component\n */\n readonly latest?: string\n ) {}\n\n get version() {\n if (!this.id.version) return 'new';\n return this.id.version;\n }\n\n /**\n * create an instance of a component from a plain object.\n */\n static from({\n id,\n server,\n displayName,\n compositions = [],\n packageName,\n elementsUrl,\n tags = [],\n deprecation,\n buildStatus,\n env,\n status,\n issuesCount,\n description,\n labels,\n host,\n latest,\n }: ComponentModelProps) {\n return new ComponentModel(\n ComponentID.fromObject(id),\n displayName,\n packageName,\n server,\n Composition.fromArray(compositions),\n TagMap.fromArray(tags.map((tag) => Tag.fromObject(tag))),\n buildStatus,\n issuesCount,\n elementsUrl,\n status,\n deprecation,\n env,\n description,\n labels,\n host,\n latest\n );\n }\n\n static fromArray(componentsProps: ComponentModelProps[]) {\n return componentsProps.map((rawComponent) => ComponentModel.from(rawComponent));\n }\n\n static empty() {\n return new ComponentModel(\n ComponentID.fromObject({ name: 'root', scope: 'temp' }),\n '',\n '',\n { env: '', url: '' },\n [],\n TagMap.empty()\n );\n }\n}\n"]}
|
package/dist/ui/menu/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { Menu } from './menu';
|
|
2
|
-
export type { NavPlugin, OrderedNavigationSlot } from './nav-plugin';
|
|
2
|
+
export type { NavPlugin, OrderedNavigationSlot, ConsumePlugin, ConsumeMethodSlot } from './nav-plugin';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA","sourcesContent":["export { Menu } from './menu';\nexport type { NavPlugin, OrderedNavigationSlot } from './nav-plugin';\n"]}
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA","sourcesContent":["export { Menu } from './menu';\nexport type { NavPlugin, OrderedNavigationSlot, ConsumePlugin, ConsumeMethodSlot } from './nav-plugin';\n"]}
|
package/dist/ui/menu/menu.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MenuItemSlot } from '@teambit/ui-foundation.ui.main-dropdown';
|
|
2
|
-
import { OrderedNavigationSlot } from './nav-plugin';
|
|
2
|
+
import { OrderedNavigationSlot, ConsumeMethodSlot } from './nav-plugin';
|
|
3
3
|
export declare type MenuProps = {
|
|
4
4
|
className?: string;
|
|
5
5
|
/**
|
|
@@ -15,8 +15,9 @@ export declare type MenuProps = {
|
|
|
15
15
|
* main dropdown item slot
|
|
16
16
|
*/
|
|
17
17
|
menuItemSlot: MenuItemSlot;
|
|
18
|
+
consumeMethodSlot: ConsumeMethodSlot;
|
|
18
19
|
};
|
|
19
20
|
/**
|
|
20
21
|
* top bar menu.
|
|
21
22
|
*/
|
|
22
|
-
export declare function Menu({ navigationSlot, widgetSlot, className, host, menuItemSlot }: MenuProps): JSX.Element;
|
|
23
|
+
export declare function Menu({ navigationSlot, widgetSlot, className, host, menuItemSlot, consumeMethodSlot }: MenuProps): JSX.Element;
|
package/dist/ui/menu/menu.js
CHANGED
|
@@ -4,8 +4,6 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
|
|
5
5
|
require("core-js/modules/es.array.iterator.js");
|
|
6
6
|
|
|
7
|
-
require("core-js/modules/es.regexp.exec.js");
|
|
8
|
-
|
|
9
7
|
Object.defineProperty(exports, "__esModule", {
|
|
10
8
|
value: true
|
|
11
9
|
});
|
|
@@ -133,7 +131,8 @@ function Menu({
|
|
|
133
131
|
widgetSlot,
|
|
134
132
|
className,
|
|
135
133
|
host,
|
|
136
|
-
menuItemSlot
|
|
134
|
+
menuItemSlot,
|
|
135
|
+
consumeMethodSlot
|
|
137
136
|
}) {
|
|
138
137
|
const {
|
|
139
138
|
component
|
|
@@ -153,14 +152,16 @@ function Menu({
|
|
|
153
152
|
}, /*#__PURE__*/_react().default.createElement(_menuNav().MenuNav, {
|
|
154
153
|
navigationSlot: widgetSlot
|
|
155
154
|
})), /*#__PURE__*/_react().default.createElement(VersionRelatedDropdowns, {
|
|
156
|
-
component: component
|
|
155
|
+
component: component,
|
|
156
|
+
consumeMethods: consumeMethodSlot
|
|
157
157
|
}), /*#__PURE__*/_react().default.createElement(_uiFoundationUi().MainDropdown, {
|
|
158
158
|
menuItems: mainMenuItems
|
|
159
159
|
})));
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
function VersionRelatedDropdowns({
|
|
163
|
-
component
|
|
163
|
+
component,
|
|
164
|
+
consumeMethods
|
|
164
165
|
}) {
|
|
165
166
|
const versionList = (0, _react().useMemo)(() => {
|
|
166
167
|
var _component$tags;
|
|
@@ -171,21 +172,13 @@ function VersionRelatedDropdowns({
|
|
|
171
172
|
return tag === null || tag === void 0 ? void 0 : (_tag$version = tag.version) === null || _tag$version === void 0 ? void 0 : _tag$version.version;
|
|
172
173
|
}).filter(x => x !== undefined).reverse();
|
|
173
174
|
}, [component.tags]) || [];
|
|
174
|
-
const
|
|
175
|
-
const packageVersion = (0, _react().useMemo)(() => isLatestVersion ? '' : `@${component.version}`, [component.version]);
|
|
176
|
-
const origin = typeof window !== undefined ? window.location.origin : undefined;
|
|
177
|
-
const finalElementsUrl = origin && component.elementsUrl ? `${origin}${component.elementsUrl}` : undefined;
|
|
175
|
+
const methods = useConsumeMethods(consumeMethods, component);
|
|
178
176
|
return /*#__PURE__*/_react().default.createElement(_react().default.Fragment, null, versionList.length > 0 && /*#__PURE__*/_react().default.createElement(_uiFoundationUiUseBox().UseBoxDropdown, {
|
|
179
177
|
position: "bottom-end",
|
|
180
178
|
className: _menuModule().default.useBox,
|
|
181
|
-
Menu:
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
ignoreVersion: isLatestVersion
|
|
185
|
-
}),
|
|
186
|
-
packageName: `${component.packageName}${packageVersion}`,
|
|
187
|
-
elementsUrl: finalElementsUrl,
|
|
188
|
-
registryName: component.packageName.split('/')[0]
|
|
179
|
+
Menu: /*#__PURE__*/_react().default.createElement(_uiFoundationUiUseBox2().Menu, {
|
|
180
|
+
methods: methods,
|
|
181
|
+
componentName: component.id.name
|
|
189
182
|
})
|
|
190
183
|
}), /*#__PURE__*/_react().default.createElement(_componentUi().VersionDropdown, {
|
|
191
184
|
versions: versionList,
|
|
@@ -193,4 +186,10 @@ function VersionRelatedDropdowns({
|
|
|
193
186
|
}));
|
|
194
187
|
}
|
|
195
188
|
|
|
189
|
+
function useConsumeMethods(consumeMethods, componentModel) {
|
|
190
|
+
return (0, _react().useMemo)(() => (0, _lodash().flatten)(consumeMethods.values()).map(method => {
|
|
191
|
+
return method === null || method === void 0 ? void 0 : method(componentModel);
|
|
192
|
+
}).filter(x => !!x && x.Component && x.Title), [consumeMethods, componentModel]);
|
|
193
|
+
}
|
|
194
|
+
|
|
196
195
|
//# sourceMappingURL=menu.js.map
|
package/dist/ui/menu/menu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["menu.tsx"],"names":["Menu","navigationSlot","widgetSlot","className","host","menuItemSlot","component","mainMenuItems","values","styles","topBar","leftSide","rightSide","widgets","VersionRelatedDropdowns","versionList","tags","toArray","map","tag","version","filter","x","undefined","reverse","
|
|
1
|
+
{"version":3,"sources":["menu.tsx"],"names":["Menu","navigationSlot","widgetSlot","className","host","menuItemSlot","consumeMethodSlot","component","mainMenuItems","values","styles","topBar","leftSide","rightSide","widgets","VersionRelatedDropdowns","consumeMethods","versionList","tags","toArray","map","tag","version","filter","x","undefined","reverse","methods","useConsumeMethods","length","useBox","id","name","componentModel","method","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/legacy/dist/to-eject/full-loader';\nimport type { ConsumeMethod } from '@teambit/ui-foundation.ui.use-box.menu';\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 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} />\n <MainDropdown menuItems={mainMenuItems} />\n </div>\n </div>\n );\n}\n\nfunction VersionRelatedDropdowns({\n component,\n consumeMethods,\n}: {\n component: ComponentModel;\n consumeMethods: ConsumeMethodSlot;\n}) {\n const versionList =\n useMemo(\n () =>\n component.tags\n ?.toArray()\n .map((tag) => tag?.version?.version)\n .filter((x) => x !== undefined)\n .reverse(),\n [component.tags]\n ) || [];\n\n const methods = useConsumeMethods(consumeMethods, component);\n return (\n <>\n {versionList.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 versions={versionList} currentVersion={component.version} />\n </>\n );\n}\n\nfunction useConsumeMethods(consumeMethods: ConsumeMethodSlot, componentModel: ComponentModel): ConsumeMethod[] {\n return useMemo(\n () =>\n flatten(consumeMethods.values())\n .map((method) => {\n return method?.(componentModel);\n })\n .filter((x) => !!x && x.Component && x.Title) as ConsumeMethod[],\n [consumeMethods, componentModel]\n );\n}\n"]}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { SlotRegistry } from '@teambit/harmony';
|
|
2
2
|
import { NavLinkProps } from '@teambit/base-ui.routing.nav-link';
|
|
3
|
+
import type { ConsumeMethod } from '@teambit/ui-foundation.ui.use-box.menu';
|
|
4
|
+
import { ComponentModel } from '../../ui';
|
|
3
5
|
export declare type NavPlugin = {
|
|
4
6
|
props: NavLinkProps;
|
|
5
7
|
order?: number;
|
|
6
8
|
};
|
|
7
9
|
export declare type OrderedNavigationSlot = SlotRegistry<NavPlugin>;
|
|
10
|
+
export declare type ConsumePlugin = (componentModel: ComponentModel) => ConsumeMethod | undefined;
|
|
11
|
+
export declare type ConsumeMethodSlot = SlotRegistry<ConsumePlugin[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["use-component-query.ts"],"names":["componentIdFields","componentFields","GET_COMPONENT","SUB_SUBSCRIPTION_ADDED","SUB_COMPONENT_CHANGED","SUB_COMPONENT_REMOVED","useComponentQuery","componentId","host","idRef","current","data","error","loading","subscribeToMore","variables","id","extensionId","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","ComponentModel","from","undefined","ComponentError","message"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;AAEA,MAAMA,iBAAiB,GAAG,kBAAI;AAC9B;AACA;AACA;AACA;AACA;AACA,CANA;AAQA,MAAMC,eAAe,GAAG,kBAAI;AAC5B;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,
|
|
1
|
+
{"version":3,"sources":["use-component-query.ts"],"names":["componentIdFields","componentFields","GET_COMPONENT","SUB_SUBSCRIPTION_ADDED","SUB_COMPONENT_CHANGED","SUB_COMPONENT_REMOVED","useComponentQuery","componentId","host","idRef","current","data","error","loading","subscribeToMore","variables","id","extensionId","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","ComponentModel","from","undefined","ComponentError","message"],"mappings":"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","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';\n\nimport { ComponentModel } from './component-model';\nimport { ComponentError } from './component-error';\n\nconst componentIdFields = gql`\n fragment componentIdFields on ComponentID {\n name\n version\n scope\n }\n`;\n\nconst componentFields = gql`\n fragment componentFields on Component {\n id {\n ...componentIdFields\n }\n packageName\n elementsUrl\n displayName\n latest\n server {\n env\n url\n }\n buildStatus\n compositions {\n identifier\n displayName\n }\n tags {\n version\n }\n env {\n id\n icon\n }\n }\n ${componentIdFields}\n`;\n\nconst GET_COMPONENT = gql`\n query Component($id: String!, $extensionId: String!) {\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 {\n componentAdded {\n component {\n ...componentFields\n }\n }\n }\n ${componentFields}\n`;\n\nconst SUB_COMPONENT_CHANGED = gql`\n subscription OnComponentChanged {\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`;\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) {\n const idRef = useRef(componentId);\n idRef.current = componentId;\n const { data, error, loading, subscribeToMore } = useDataQuery(GET_COMPONENT, {\n variables: { id: componentId, extensionId: host },\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\n return useMemo(() => {\n return {\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 };\n }, [rawComponent, host, error]);\n}\n"]}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/component",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.597",
|
|
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.
|
|
9
|
+
"version": "0.0.597"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"lodash": "4.17.21",
|
|
@@ -26,38 +26,38 @@
|
|
|
26
26
|
"@teambit/base-ui.routing.nav-link": "1.0.0",
|
|
27
27
|
"@teambit/documenter.ui.heading": "4.1.1",
|
|
28
28
|
"@teambit/documenter.ui.separator": "4.1.1",
|
|
29
|
-
"@teambit/component-id": "0.0.
|
|
30
|
-
"@teambit/ui-foundation.ui.menu-widget-icon": "0.0.
|
|
31
|
-
"@teambit/aspect-loader": "0.0.
|
|
32
|
-
"@teambit/legacy-bit-id": "0.0.
|
|
33
|
-
"@teambit/toolbox.string.capitalize": "0.0.
|
|
34
|
-
"@teambit/cli": "0.0.
|
|
35
|
-
"@teambit/config": "0.0.
|
|
36
|
-
"@teambit/express": "0.0.
|
|
37
|
-
"@teambit/graphql": "0.0.
|
|
38
|
-
"@teambit/bit-error": "0.0.
|
|
39
|
-
"@teambit/command-bar": "0.0.
|
|
40
|
-
"@teambit/preview": "0.0.
|
|
41
|
-
"@teambit/pubsub": "0.0.
|
|
42
|
-
"@teambit/ui-foundation.ui.is-browser": "0.0.
|
|
43
|
-
"@teambit/ui-foundation.ui.main-dropdown": "0.0.
|
|
44
|
-
"@teambit/ui-foundation.ui.react-router.slot-router": "0.0.
|
|
45
|
-
"@teambit/ui": "0.0.
|
|
46
|
-
"@teambit/
|
|
47
|
-
"@teambit/
|
|
48
|
-
"@teambit/
|
|
49
|
-
"@teambit/
|
|
29
|
+
"@teambit/component-id": "0.0.398",
|
|
30
|
+
"@teambit/ui-foundation.ui.menu-widget-icon": "0.0.487",
|
|
31
|
+
"@teambit/aspect-loader": "0.0.597",
|
|
32
|
+
"@teambit/legacy-bit-id": "0.0.397",
|
|
33
|
+
"@teambit/toolbox.string.capitalize": "0.0.482",
|
|
34
|
+
"@teambit/cli": "0.0.410",
|
|
35
|
+
"@teambit/config": "0.0.422",
|
|
36
|
+
"@teambit/express": "0.0.502",
|
|
37
|
+
"@teambit/graphql": "0.0.597",
|
|
38
|
+
"@teambit/bit-error": "0.0.394",
|
|
39
|
+
"@teambit/command-bar": "0.0.597",
|
|
40
|
+
"@teambit/preview": "0.0.597",
|
|
41
|
+
"@teambit/pubsub": "0.0.597",
|
|
42
|
+
"@teambit/ui-foundation.ui.is-browser": "0.0.485",
|
|
43
|
+
"@teambit/ui-foundation.ui.main-dropdown": "0.0.485",
|
|
44
|
+
"@teambit/ui-foundation.ui.react-router.slot-router": "0.0.487",
|
|
45
|
+
"@teambit/ui-foundation.ui.use-box.menu": "0.0.107",
|
|
46
|
+
"@teambit/ui": "0.0.597",
|
|
47
|
+
"@teambit/component-issues": "0.0.45",
|
|
48
|
+
"@teambit/ui-foundation.ui.hooks.use-data-query": "0.0.486",
|
|
49
|
+
"@teambit/cli-table": "0.0.33",
|
|
50
|
+
"@teambit/ui-foundation.ui.react-router.use-query": "0.0.485",
|
|
50
51
|
"@teambit/design.ui.empty-box": "0.0.352",
|
|
51
|
-
"@teambit/harmony.ui.aspect-box": "0.0.
|
|
52
|
-
"@teambit/compositions": "0.0.593",
|
|
53
|
-
"@teambit/deprecation": "0.0.593",
|
|
54
|
-
"@teambit/envs": "0.0.593",
|
|
52
|
+
"@teambit/harmony.ui.aspect-box": "0.0.485",
|
|
55
53
|
"@teambit/design.ui.pages.not-found": "0.0.352",
|
|
56
54
|
"@teambit/design.ui.pages.server-error": "0.0.352",
|
|
57
|
-
"@teambit/
|
|
58
|
-
"@teambit/
|
|
59
|
-
"@teambit/
|
|
60
|
-
"@teambit/
|
|
55
|
+
"@teambit/compositions": "0.0.597",
|
|
56
|
+
"@teambit/deprecation": "0.0.597",
|
|
57
|
+
"@teambit/envs": "0.0.597",
|
|
58
|
+
"@teambit/component.ui.version-dropdown": "0.0.489",
|
|
59
|
+
"@teambit/ui-foundation.ui.use-box.dropdown": "0.0.107",
|
|
60
|
+
"@teambit/ui-foundation.ui.react-router.extend-path": "0.0.485"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@types/lodash": "4.14.165",
|
|
@@ -72,11 +72,11 @@
|
|
|
72
72
|
"@types/jest": "^26.0.0",
|
|
73
73
|
"@types/react-dom": "^17.0.5",
|
|
74
74
|
"@types/node": "12.20.4",
|
|
75
|
-
"@teambit/component.aspect-docs.component": "0.0.
|
|
75
|
+
"@teambit/component.aspect-docs.component": "0.0.130"
|
|
76
76
|
},
|
|
77
77
|
"peerDependencies": {
|
|
78
78
|
"@apollo/client": "^3.0.0",
|
|
79
|
-
"@teambit/legacy": "1.0.
|
|
79
|
+
"@teambit/legacy": "1.0.197",
|
|
80
80
|
"react-dom": "^16.8.0 || ^17.0.0",
|
|
81
81
|
"react": "^16.8.0 || ^17.0.0"
|
|
82
82
|
},
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"react": "-"
|
|
105
105
|
},
|
|
106
106
|
"peerDependencies": {
|
|
107
|
-
"@teambit/legacy": "1.0.
|
|
107
|
+
"@teambit/legacy": "1.0.197",
|
|
108
108
|
"react-dom": "^16.8.0 || ^17.0.0",
|
|
109
109
|
"react": "^16.8.0 || ^17.0.0"
|
|
110
110
|
}
|
package/show/show.cmd.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Command, CommandOptions } from '@teambit/cli';
|
|
2
|
+
import { compact } from 'lodash';
|
|
2
3
|
// import { Logger } from '@teambit/logger';
|
|
3
4
|
// import chalk from 'chalk';
|
|
4
5
|
import { CLITable } from '@teambit/cli-table';
|
|
@@ -62,11 +63,12 @@ export class ShowCmd implements Command {
|
|
|
62
63
|
const rows = await Promise.all(
|
|
63
64
|
fragments.map(async (fragment) => {
|
|
64
65
|
const row = await fragment.renderRow(component);
|
|
66
|
+
if (!row.content) return null;
|
|
65
67
|
return [row.title, row.content];
|
|
66
68
|
})
|
|
67
69
|
);
|
|
68
70
|
|
|
69
|
-
const table = new CLITable([], rows);
|
|
71
|
+
const table = new CLITable([], compact(rows));
|
|
70
72
|
return table.render();
|
|
71
73
|
}
|
|
72
74
|
|
|
@@ -27,6 +27,7 @@ export type ComponentModelProps = {
|
|
|
27
27
|
env?: Descriptor; // env aspect.
|
|
28
28
|
labels?: string[];
|
|
29
29
|
host?: string;
|
|
30
|
+
latest?: string;
|
|
30
31
|
};
|
|
31
32
|
|
|
32
33
|
export type ComponentServer = {
|
|
@@ -105,7 +106,12 @@ export class ComponentModel {
|
|
|
105
106
|
/**
|
|
106
107
|
* host of the component
|
|
107
108
|
*/
|
|
108
|
-
readonly host?: string
|
|
109
|
+
readonly host?: string,
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* latest version of component
|
|
113
|
+
*/
|
|
114
|
+
readonly latest?: string
|
|
109
115
|
) {}
|
|
110
116
|
|
|
111
117
|
get version() {
|
|
@@ -132,6 +138,7 @@ export class ComponentModel {
|
|
|
132
138
|
description,
|
|
133
139
|
labels,
|
|
134
140
|
host,
|
|
141
|
+
latest,
|
|
135
142
|
}: ComponentModelProps) {
|
|
136
143
|
return new ComponentModel(
|
|
137
144
|
ComponentID.fromObject(id),
|
|
@@ -148,7 +155,8 @@ export class ComponentModel {
|
|
|
148
155
|
env,
|
|
149
156
|
description,
|
|
150
157
|
labels,
|
|
151
|
-
host
|
|
158
|
+
host,
|
|
159
|
+
latest
|
|
152
160
|
);
|
|
153
161
|
}
|
|
154
162
|
|
package/ui/menu/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { Menu } from './menu';
|
|
2
|
-
export type { NavPlugin, OrderedNavigationSlot } from './nav-plugin';
|
|
2
|
+
export type { NavPlugin, OrderedNavigationSlot, ConsumePlugin, ConsumeMethodSlot } from './nav-plugin';
|
package/ui/menu/menu.tsx
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { MainDropdown, MenuItemSlot } from '@teambit/ui-foundation.ui.main-dropdown';
|
|
2
2
|
import { VersionDropdown } from '@teambit/component.ui.version-dropdown';
|
|
3
3
|
import { FullLoader } from '@teambit/legacy/dist/to-eject/full-loader';
|
|
4
|
+
import type { ConsumeMethod } from '@teambit/ui-foundation.ui.use-box.menu';
|
|
4
5
|
import { flatten, groupBy } from 'lodash';
|
|
5
6
|
import classnames from 'classnames';
|
|
6
7
|
import React, { useMemo } from 'react';
|
|
7
8
|
import { UseBoxDropdown } from '@teambit/ui-foundation.ui.use-box.dropdown';
|
|
8
|
-
import { Menu as
|
|
9
|
+
import { Menu as ConsumeMethodsMenu } from '@teambit/ui-foundation.ui.use-box.menu';
|
|
9
10
|
import type { ComponentModel } from '../component-model';
|
|
10
11
|
import { useComponent } from '../use-component';
|
|
11
12
|
import { MenuNav } from './menu-nav';
|
|
12
13
|
import styles from './menu.module.scss';
|
|
13
|
-
import { OrderedNavigationSlot } from './nav-plugin';
|
|
14
|
+
import { OrderedNavigationSlot, ConsumeMethodSlot } from './nav-plugin';
|
|
14
15
|
|
|
15
16
|
export type MenuProps = {
|
|
16
17
|
className?: string;
|
|
@@ -27,17 +28,17 @@ export type MenuProps = {
|
|
|
27
28
|
* main dropdown item slot
|
|
28
29
|
*/
|
|
29
30
|
menuItemSlot: MenuItemSlot;
|
|
31
|
+
|
|
32
|
+
consumeMethodSlot: ConsumeMethodSlot;
|
|
30
33
|
};
|
|
31
34
|
|
|
32
35
|
/**
|
|
33
36
|
* top bar menu.
|
|
34
37
|
*/
|
|
35
|
-
export function Menu({ navigationSlot, widgetSlot, className, host, menuItemSlot }: MenuProps) {
|
|
38
|
+
export function Menu({ navigationSlot, widgetSlot, className, host, menuItemSlot, consumeMethodSlot }: MenuProps) {
|
|
36
39
|
const { component } = useComponent(host);
|
|
37
40
|
const mainMenuItems = useMemo(() => groupBy(flatten(menuItemSlot.values()), 'category'), [menuItemSlot]);
|
|
38
|
-
|
|
39
41
|
if (!component) return <FullLoader />;
|
|
40
|
-
|
|
41
42
|
return (
|
|
42
43
|
<div className={classnames(styles.topBar, className)}>
|
|
43
44
|
<div className={styles.leftSide}>
|
|
@@ -47,14 +48,20 @@ export function Menu({ navigationSlot, widgetSlot, className, host, menuItemSlot
|
|
|
47
48
|
<div className={styles.widgets}>
|
|
48
49
|
<MenuNav navigationSlot={widgetSlot} />
|
|
49
50
|
</div>
|
|
50
|
-
<VersionRelatedDropdowns component={component} />
|
|
51
|
+
<VersionRelatedDropdowns component={component} consumeMethods={consumeMethodSlot} />
|
|
51
52
|
<MainDropdown menuItems={mainMenuItems} />
|
|
52
53
|
</div>
|
|
53
54
|
</div>
|
|
54
55
|
);
|
|
55
56
|
}
|
|
56
57
|
|
|
57
|
-
function VersionRelatedDropdowns({
|
|
58
|
+
function VersionRelatedDropdowns({
|
|
59
|
+
component,
|
|
60
|
+
consumeMethods,
|
|
61
|
+
}: {
|
|
62
|
+
component: ComponentModel;
|
|
63
|
+
consumeMethods: ConsumeMethodSlot;
|
|
64
|
+
}) {
|
|
58
65
|
const versionList =
|
|
59
66
|
useMemo(
|
|
60
67
|
() =>
|
|
@@ -66,29 +73,29 @@ function VersionRelatedDropdowns({ component }: { component: ComponentModel }) {
|
|
|
66
73
|
[component.tags]
|
|
67
74
|
) || [];
|
|
68
75
|
|
|
69
|
-
const
|
|
70
|
-
const packageVersion = useMemo(() => (isLatestVersion ? '' : `@${component.version}`), [component.version]);
|
|
71
|
-
const origin = typeof window !== undefined ? window.location.origin : undefined;
|
|
72
|
-
const finalElementsUrl = origin && component.elementsUrl ? `${origin}${component.elementsUrl}` : undefined;
|
|
73
|
-
|
|
76
|
+
const methods = useConsumeMethods(consumeMethods, component);
|
|
74
77
|
return (
|
|
75
78
|
<>
|
|
76
79
|
{versionList.length > 0 && (
|
|
77
80
|
<UseBoxDropdown
|
|
78
81
|
position="bottom-end"
|
|
79
82
|
className={styles.useBox}
|
|
80
|
-
Menu={
|
|
81
|
-
<UseBoxMenu
|
|
82
|
-
componentName={component.id.name}
|
|
83
|
-
componentId={component.id.toString({ ignoreVersion: isLatestVersion })}
|
|
84
|
-
packageName={`${component.packageName}${packageVersion}`}
|
|
85
|
-
elementsUrl={finalElementsUrl}
|
|
86
|
-
registryName={component.packageName.split('/')[0]}
|
|
87
|
-
/>
|
|
88
|
-
)}
|
|
83
|
+
Menu={<ConsumeMethodsMenu methods={methods} componentName={component.id.name} />}
|
|
89
84
|
/>
|
|
90
85
|
)}
|
|
91
86
|
<VersionDropdown versions={versionList} currentVersion={component.version} />
|
|
92
87
|
</>
|
|
93
88
|
);
|
|
94
89
|
}
|
|
90
|
+
|
|
91
|
+
function useConsumeMethods(consumeMethods: ConsumeMethodSlot, componentModel: ComponentModel): ConsumeMethod[] {
|
|
92
|
+
return useMemo(
|
|
93
|
+
() =>
|
|
94
|
+
flatten(consumeMethods.values())
|
|
95
|
+
.map((method) => {
|
|
96
|
+
return method?.(componentModel);
|
|
97
|
+
})
|
|
98
|
+
.filter((x) => !!x && x.Component && x.Title) as ConsumeMethod[],
|
|
99
|
+
[consumeMethods, componentModel]
|
|
100
|
+
);
|
|
101
|
+
}
|
package/ui/menu/nav-plugin.tsx
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
// import { ReactNode } from 'react';
|
|
1
2
|
import { SlotRegistry } from '@teambit/harmony';
|
|
2
3
|
import { NavLinkProps } from '@teambit/base-ui.routing.nav-link';
|
|
4
|
+
import type { ConsumeMethod } from '@teambit/ui-foundation.ui.use-box.menu';
|
|
5
|
+
import { ComponentModel } from '../../ui';
|
|
3
6
|
|
|
4
7
|
export type NavPlugin = {
|
|
5
8
|
props: NavLinkProps;
|
|
@@ -7,3 +10,7 @@ export type NavPlugin = {
|
|
|
7
10
|
};
|
|
8
11
|
|
|
9
12
|
export type OrderedNavigationSlot = SlotRegistry<NavPlugin>;
|
|
13
|
+
|
|
14
|
+
export type ConsumePlugin = (componentModel: ComponentModel) => ConsumeMethod | undefined;
|
|
15
|
+
|
|
16
|
+
export type ConsumeMethodSlot = SlotRegistry<ConsumePlugin[]>;
|
|
Binary file
|