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