@teambit/component.ui.component-compare.component-compare 0.0.0-2914de1a41b6ff097e810b8da5f8b65f1593f205

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.
@@ -0,0 +1,132 @@
1
+ .componentCompareContainer {
2
+ display: flex;
3
+ flex-direction: column;
4
+ height: 100%;
5
+ overflow: hidden;
6
+ }
7
+
8
+ .top {
9
+ display: flex;
10
+ flex-direction: column;
11
+ padding: 24px 24px 16px 24px;
12
+ }
13
+
14
+ .bottom {
15
+ display: flex;
16
+ overflow: hidden;
17
+ flex-direction: column;
18
+ flex: 1;
19
+
20
+ &.hidden {
21
+ display: none;
22
+ }
23
+ // padding-bottom: 16px;
24
+ }
25
+
26
+ .navContainer {
27
+ display: flex;
28
+ align-items: center;
29
+ min-height: 48px;
30
+ border-bottom: 1px solid var(--bit-border-color-lightest, #ededed);
31
+ font-size: var(--bit-p-xs, 14px);
32
+ padding-left: 8px;
33
+ }
34
+
35
+ .navigation {
36
+ display: flex;
37
+ min-height: 48px;
38
+ align-items: center;
39
+
40
+ @media screen and (max-width: 768px) {
41
+ padding-left: 6px;
42
+ }
43
+
44
+ > li {
45
+ display: block;
46
+ margin-right: 16px;
47
+ height: 100%;
48
+ }
49
+ }
50
+
51
+ .loader {
52
+ padding: 16px 24px;
53
+ color: var(--bit-bg-dent, #f6f6f6);
54
+ }
55
+
56
+ .tabLoader {
57
+ color: var(--bit-bg-dent, #f6f6f6);
58
+ }
59
+
60
+ .compareLoader {
61
+ display: flex;
62
+ padding-top: 16px;
63
+ }
64
+
65
+ .compareSidebarLoader {
66
+ width: 30%;
67
+ }
68
+
69
+ .compareViewLoader {
70
+ width: 70%;
71
+ padding-right: 16px;
72
+ }
73
+
74
+ .activeNav {
75
+ > div {
76
+ color: var(--bit-accent-color, #6c5ce7);
77
+ border-radius: 5px;
78
+ background-color: var(--bit-accent-bg, #edebfc);
79
+ }
80
+
81
+ &:after {
82
+ // unset default selection styles
83
+ height: 0 !important;
84
+ }
85
+ }
86
+
87
+ .loadingNav {
88
+ // > div {
89
+ // color: var(--bit-accent-color, #6c5ce7);
90
+ // border-radius: 5px;
91
+ // background-color: var(--bit-accent-bg, #edebfc);
92
+ // }
93
+
94
+ &:after {
95
+ // unset default selection styles
96
+ height: 0 !important;
97
+ }
98
+ }
99
+
100
+ .navItem {
101
+ position: relative;
102
+ color: var(--bit-text-color-light, #707279);
103
+
104
+ &.none {
105
+ > div {
106
+ opacity: 65%;
107
+ }
108
+ }
109
+ }
110
+
111
+ .compareMenuTab {
112
+ position: relative;
113
+ }
114
+
115
+ .indicator {
116
+ position: absolute;
117
+ top: -8px;
118
+ right: -8px;
119
+ border-radius: 100%;
120
+ padding: 4px;
121
+ box-sizing: border-box;
122
+
123
+ &.hasChanged {
124
+ background-color: #ff8b00;
125
+ }
126
+
127
+ &.new {
128
+ // @todo - review styles
129
+ display: none;
130
+ background-color: var(--bit-accent-success-color, #37b26c);
131
+ }
132
+ }
@@ -0,0 +1,447 @@
1
+ /* eslint-disable react/destructuring-assignment */
2
+ /* eslint-disable react/require-default-props */
3
+ import React, { useContext, useMemo, HTMLAttributes } from 'react';
4
+ import classnames from 'classnames';
5
+ import { LegacyComponentLog } from '@teambit/legacy-component-log';
6
+ import {
7
+ CollapsibleMenuNav,
8
+ ComponentContext,
9
+ ComponentDescriptorContext,
10
+ ComponentID,
11
+ NavPlugin,
12
+ useComponent,
13
+ } from '@teambit/component';
14
+ import { ComponentCompareContext } from '@teambit/component.ui.component-compare.context';
15
+ import { useComponentCompareQuery } from '@teambit/component.ui.component-compare.hooks.use-component-compare';
16
+ import {
17
+ FileCompareResult,
18
+ FieldCompareResult,
19
+ } from '@teambit/component.ui.component-compare.models.component-compare-model';
20
+ import { useCompareQueryParam } from '@teambit/component.ui.component-compare.hooks.use-component-compare-url';
21
+ import { ComponentCompareVersionPicker } from '@teambit/component.ui.component-compare.version-picker';
22
+ import { ComponentCompareHooks } from '@teambit/component.ui.component-compare.models.component-compare-hooks';
23
+ import { useLocation } from '@teambit/base-react.navigation.link';
24
+ import { SlotRouter } from '@teambit/ui-foundation.ui.react-router.slot-router';
25
+ import type {
26
+ ComponentCompareProps,
27
+ TabItem,
28
+ } from '@teambit/component.ui.component-compare.models.component-compare-props';
29
+ import { groupByVersion } from '@teambit/component.ui.component-compare.utils.group-by-version';
30
+ import { sortTabs } from '@teambit/component.ui.component-compare.utils.sort-tabs';
31
+ import { sortByDateDsc } from '@teambit/component.ui.component-compare.utils.sort-logs';
32
+ import { extractLazyLoadedData } from '@teambit/component.ui.component-compare.utils.lazy-loading';
33
+ import { BlockSkeleton, WordSkeleton } from '@teambit/base-ui.loaders.skeleton';
34
+ import { ChangeType } from '@teambit/component.ui.component-compare.models.component-compare-change-type';
35
+
36
+ import styles from './component-compare.module.scss';
37
+
38
+ const findPrevVersionFromCurrent = (compareVersion) => (_, index: number, logs: LegacyComponentLog[]) => {
39
+ if (compareVersion === 'workspace' || logs.length === 1) return true;
40
+
41
+ if (index === 0) return false;
42
+
43
+ const prevIndex = index - 1;
44
+
45
+ return logs[prevIndex].tag === compareVersion || logs[prevIndex].hash === compareVersion;
46
+ };
47
+
48
+ function deriveChangeTypeCssForNav(tab: TabItem, changed: ChangeType[] | null | undefined): string | null {
49
+ if (!changed || !tab.changeType) return null;
50
+ const hasChanged = changed.some((change) => tab.changeType === change);
51
+ return hasChanged ? styles.hasChanged : null;
52
+ }
53
+
54
+ function onNavClicked({ hooks, id }: { hooks?: ComponentCompareHooks; id?: string }) {
55
+ if (!hooks?.tabs?.onClick) return undefined;
56
+ return (e) => hooks?.tabs?.onClick?.(id, e);
57
+ }
58
+
59
+ function TabLoader() {
60
+ return <WordSkeleton className={styles.tabLoader} length={5} />;
61
+ }
62
+
63
+ function CompareMenuTab({
64
+ children,
65
+ changed,
66
+ changeTypeCss,
67
+ loading,
68
+ className,
69
+ ...rest
70
+ }: HTMLAttributes<HTMLDivElement> & {
71
+ changeTypeCss?: string | null;
72
+ loading?: boolean;
73
+ changed?: ChangeType[] | null;
74
+ }) {
75
+ const hasChanged = useMemo(
76
+ () => changed?.some((change) => change !== ChangeType.NONE && change !== ChangeType.NEW),
77
+ [changeTypeCss]
78
+ );
79
+
80
+ if (loading) return <TabLoader />;
81
+
82
+ return (
83
+ <div {...rest} className={classnames(styles.compareMenuTab, className)}>
84
+ {changeTypeCss && hasChanged && <div className={classnames(styles.indicator, changeTypeCss)} />}
85
+ <div className={classnames(styles.menuTab)}>{children}</div>
86
+ </div>
87
+ );
88
+ }
89
+
90
+ function CompareMenuNav({ tabs, state, hooks, changes: changed }: ComponentCompareProps) {
91
+ const activeTab = state?.tabs?.id;
92
+ const isControlled = state?.tabs?.controlled;
93
+ const tabsFromProps = extractLazyLoadedData(tabs) || [];
94
+
95
+ const extractedTabs: [string, NavPlugin & TabItem][] = useMemo(
96
+ () =>
97
+ tabsFromProps.sort(sortTabs).map((tab, index) => {
98
+ const isActive = !state ? undefined : !!activeTab && !!tab?.id && activeTab === tab.id;
99
+ const changeTypeCss = deriveChangeTypeCssForNav(tab, changed);
100
+ const loading = changed === undefined;
101
+ const key = `${tab.id}-tab-${changeTypeCss}`;
102
+ return [
103
+ tab.id || `tab-${index}`,
104
+ {
105
+ ...tab,
106
+ props: {
107
+ ...tab.props,
108
+ key,
109
+ displayName: (!loading && tab.displayName) || undefined,
110
+ active: isActive,
111
+ onClick: onNavClicked({ id: tab.id, hooks }),
112
+ href: (!isControlled && tab.props?.href) || undefined,
113
+ activeClassName: (!loading && styles.activeNav) || styles.loadingNav,
114
+ className: styles.navItem,
115
+ children: (
116
+ <CompareMenuTab key={key} loading={loading} changeTypeCss={changeTypeCss} changed={changed}>
117
+ {tab.props?.children}
118
+ </CompareMenuTab>
119
+ ),
120
+ },
121
+ },
122
+ ];
123
+ }),
124
+ [tabsFromProps.length, activeTab, changed, changed?.length]
125
+ );
126
+
127
+ const sortedTabs = useMemo(
128
+ () => extractedTabs.filter(([, tab]) => !tab.widget),
129
+ [extractedTabs.length, activeTab, changed?.length, changed]
130
+ );
131
+ const sortedWidgets = useMemo(
132
+ () => extractedTabs.filter(([, tab]) => tab.widget),
133
+ [extractedTabs.length, activeTab, changed?.length, changed]
134
+ );
135
+
136
+ return (
137
+ <div className={styles.navContainer}>
138
+ <CollapsibleMenuNav navPlugins={sortedTabs} widgetPlugins={sortedWidgets} />
139
+ </div>
140
+ );
141
+ }
142
+
143
+ function deriveChangeType(
144
+ baseId?: ComponentID,
145
+ compareId?: ComponentID,
146
+ fileCompareDataByName?: Map<string, FileCompareResult> | null,
147
+ fieldCompareDataByName?: Map<string, FieldCompareResult> | null,
148
+ testCompareDataByName?: Map<string, FileCompareResult> | null
149
+ ): ChangeType[] | undefined | null {
150
+ if (!baseId && !compareId) return null;
151
+ if (!baseId?.version) return [ChangeType.NEW];
152
+
153
+ if (fileCompareDataByName === null || fieldCompareDataByName === null) return null;
154
+ if (fileCompareDataByName === undefined || fieldCompareDataByName === undefined) return undefined;
155
+
156
+ const fileCompareData = [...fileCompareDataByName.values()];
157
+
158
+ if (
159
+ fieldCompareDataByName.size === 0 &&
160
+ (fileCompareDataByName.size === 0 || fileCompareData.every((f) => f.status === 'UNCHANGED'))
161
+ ) {
162
+ return [ChangeType.NONE];
163
+ }
164
+
165
+ const changed: ChangeType[] = [];
166
+ const DEPS_FIELD = ['dependencies', 'devDependencies', 'extensionDependencies', 'packageDependencies'];
167
+
168
+ if (testCompareDataByName?.size) {
169
+ changed.push(ChangeType.TESTS);
170
+ }
171
+
172
+ if (fileCompareDataByName.size > 0 && fileCompareData.some((f) => f.status !== 'UNCHANGED')) {
173
+ changed.push(ChangeType.SOURCE_CODE);
174
+ }
175
+
176
+ if (fieldCompareDataByName.size > 0) {
177
+ changed.push(ChangeType.ASPECTS);
178
+ }
179
+
180
+ if ([...fieldCompareDataByName.values()].some((field) => DEPS_FIELD.includes(field.fieldName))) {
181
+ changed.push(ChangeType.DEPENDENCY);
182
+ }
183
+
184
+ return changed;
185
+ }
186
+
187
+ function CompareLoader({ className, ...rest }: React.HTMLAttributes<HTMLDivElement>) {
188
+ return (
189
+ <div className={className} {...rest}>
190
+ <BlockSkeleton className={styles.navLoader} lines={3} />
191
+ <div className={styles.compareLoader}>
192
+ <div className={styles.compareViewLoader}>
193
+ <BlockSkeleton lines={30} />
194
+ </div>
195
+ <div className={styles.compareSidebarLoader}>
196
+ <BlockSkeleton lines={30} />
197
+ </div>
198
+ </div>
199
+ </div>
200
+ );
201
+ }
202
+
203
+ function RenderCompareScreen(
204
+ props: ComponentCompareProps & {
205
+ baseVersion?: string;
206
+ compareVersion?: string;
207
+ compareHasLocalChanges?: boolean;
208
+ componentId: string;
209
+ loading?: boolean;
210
+ }
211
+ ) {
212
+ const {
213
+ routes,
214
+ state,
215
+ loading,
216
+ Loader = CompareLoader,
217
+ baseVersion,
218
+ compareVersion,
219
+ compareHasLocalChanges,
220
+ componentId,
221
+ hidden,
222
+ } = props;
223
+
224
+ const showVersionPicker = state?.versionPicker?.element !== null;
225
+
226
+ return (
227
+ <>
228
+ {showVersionPicker && (
229
+ <div className={styles.top}>
230
+ {state?.versionPicker?.element || (
231
+ <ComponentCompareVersionPicker
232
+ componentId={componentId}
233
+ baseVersion={baseVersion}
234
+ compareVersion={compareVersion}
235
+ compareHasLocalChanges={compareHasLocalChanges}
236
+ host={props.host}
237
+ customUseComponent={props.customUseComponent}
238
+ />
239
+ )}
240
+ </div>
241
+ )}
242
+ {loading && !hidden && <Loader className={classnames(styles.loader)} />}
243
+ {!loading && (
244
+ <div className={classnames(styles.bottom, hidden && styles.hidden)}>
245
+ <CompareMenuNav {...props} />
246
+ {(extractLazyLoadedData(routes) || []).length > 0 && (
247
+ <SlotRouter routes={extractLazyLoadedData(routes) || []} />
248
+ )}
249
+ {state?.tabs?.element}
250
+ </div>
251
+ )}
252
+ </>
253
+ );
254
+ }
255
+
256
+ // eslint-disable-next-line complexity
257
+ export function ComponentCompare(props: ComponentCompareProps) {
258
+ const {
259
+ host: hostFromProps,
260
+ baseId: baseIdFromProps,
261
+ compareId: compareIdFromProps,
262
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
263
+ routes,
264
+ state,
265
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
266
+ tabs,
267
+ className,
268
+ hooks,
269
+ changes: changesFromProps,
270
+ customUseComponent,
271
+ Loader = CompareLoader,
272
+ baseContext,
273
+ compareContext,
274
+ isFullScreen,
275
+ hidden = false,
276
+ compareIdOverride,
277
+ baseIdOverride,
278
+ ...rest
279
+ } = props;
280
+
281
+ const baseVersion = useCompareQueryParam('baseVersion');
282
+
283
+ const component = useContext(ComponentContext);
284
+ const componentDescriptor = useContext(ComponentDescriptorContext);
285
+ const location = useLocation();
286
+ const isWorkspace = hostFromProps === 'teambit.workspace/workspace';
287
+ const compareHost =
288
+ isWorkspace && !location?.search.includes('version') && !compareIdFromProps && component.logs?.length === 0
289
+ ? hostFromProps
290
+ : 'teambit.scope/scope';
291
+ const host = 'teambit.scope/scope';
292
+ const {
293
+ component: compareComponent,
294
+ loading: loadingCompare,
295
+ componentDescriptor: compareComponentDescriptor,
296
+ } = useComponent(compareHost, compareIdOverride?.toString() || compareIdFromProps?.toString(), {
297
+ skip: hidden || (!compareIdFromProps && !compareIdOverride),
298
+ customUseComponent,
299
+ logFilters: {
300
+ log: {
301
+ // @todo - enable it when we implement lazy loading for logs
302
+ // limit: 3,
303
+ },
304
+ },
305
+ });
306
+
307
+ const allVersionInfo = useMemo(
308
+ () => (compareComponent?.logs || component.logs)?.slice().sort(sortByDateDsc) || [],
309
+ [component.id.toString(), loadingCompare, component.logs?.length, compareComponent?.logs?.length]
310
+ );
311
+ const isNew = useMemo(() => allVersionInfo.length === 0, [allVersionInfo]);
312
+ const compareVersion =
313
+ isWorkspace && !isNew && !location?.search.includes('version') && !compareIdFromProps
314
+ ? 'workspace'
315
+ : component.id.version;
316
+ const compareIsLocalChanges = compareVersion === 'workspace';
317
+
318
+ const lastVersionInfo = useMemo(() => {
319
+ if (compareIsLocalChanges) return allVersionInfo[0];
320
+ const prevVersionInfo = allVersionInfo.find(findPrevVersionFromCurrent(compareVersion));
321
+ return prevVersionInfo;
322
+ }, [component.logs?.length, loadingCompare, compareComponent?.logs?.length]);
323
+
324
+ const baseId = React.useMemo(
325
+ () =>
326
+ baseIdFromProps ||
327
+ (baseVersion && component.id.changeVersion(baseVersion)) ||
328
+ (lastVersionInfo && component.id.changeVersion(lastVersionInfo.tag || lastVersionInfo.hash)) ||
329
+ component.id,
330
+ [loadingCompare, baseIdFromProps, baseVersion, lastVersionInfo?.tag, lastVersionInfo?.hash]
331
+ );
332
+
333
+ const {
334
+ component: base,
335
+ loading: loadingBase,
336
+ componentDescriptor: baseComponentDescriptor,
337
+ } = useComponent(host, baseIdOverride?.toString() || baseId?.toString(), {
338
+ customUseComponent,
339
+ skip: hidden || (!baseId && !baseIdOverride),
340
+ logFilters: {
341
+ log: {
342
+ // @todo - enable it when we implement lazy loading for logs
343
+ // limit: 3,
344
+ },
345
+ },
346
+ });
347
+
348
+ const loading = loadingBase || loadingCompare;
349
+
350
+ const compare = compareIdFromProps ? compareComponent : component;
351
+
352
+ const compCompareId = `${base?.id.toString()}-${compare?.id.toString()}`;
353
+
354
+ const logsByVersion = useMemo(() => {
355
+ return (compare?.logs || []).slice().reduce(groupByVersion, new Map<string, LegacyComponentLog>());
356
+ }, [compare?.id.toString()]);
357
+
358
+ const skipComponentCompareQuery =
359
+ hidden || (base?.id.version?.toString() === compare?.id.version?.toString() && !compareIsLocalChanges);
360
+
361
+ const { loading: compCompareLoading, componentCompareData } = useComponentCompareQuery(
362
+ base?.id.toString(),
363
+ compare?.id.toString(),
364
+ undefined,
365
+ skipComponentCompareQuery
366
+ );
367
+
368
+ const fileCompareDataByName = useMemo(() => {
369
+ if (loading || compCompareLoading) return undefined;
370
+ if (!compCompareLoading && !componentCompareData) return null;
371
+
372
+ const fileCompareDataByNameLookup = new Map<string, FileCompareResult>();
373
+ (componentCompareData?.code || []).forEach((codeCompareData) => {
374
+ fileCompareDataByNameLookup.set(codeCompareData.fileName, codeCompareData);
375
+ });
376
+ return fileCompareDataByNameLookup;
377
+ }, [compCompareLoading, loading, compCompareId]);
378
+
379
+ const fieldCompareDataByName = useMemo(() => {
380
+ if (loading || compCompareLoading) return undefined;
381
+ if (!compCompareLoading && !componentCompareData) return null;
382
+ const fieldCompareDataByNameLookup = new Map<string, FieldCompareResult>();
383
+ (componentCompareData?.aspects || []).forEach((aspectCompareData) => {
384
+ fieldCompareDataByNameLookup.set(aspectCompareData.fieldName, aspectCompareData);
385
+ });
386
+ return fieldCompareDataByNameLookup;
387
+ }, [compCompareLoading, loading, compCompareId]);
388
+
389
+ const testCompareDataByName = useMemo(() => {
390
+ if (loading || compCompareLoading) return undefined;
391
+ if (!compCompareLoading && !componentCompareData) return null;
392
+ const testCompareDataByNameLookup = new Map<string, FileCompareResult>();
393
+ (componentCompareData?.tests || []).forEach((testCompareData) => {
394
+ testCompareDataByNameLookup.set(testCompareData.fileName, testCompareData);
395
+ });
396
+ return testCompareDataByNameLookup;
397
+ }, [compCompareLoading, loading, compCompareId]);
398
+
399
+ const componentCompareModel = {
400
+ compare: compare && {
401
+ model: compare,
402
+ descriptor: compareComponentDescriptor || componentDescriptor,
403
+ hasLocalChanges: compareIsLocalChanges,
404
+ },
405
+ base: base && {
406
+ model: base,
407
+ descriptor: baseComponentDescriptor,
408
+ },
409
+ loading,
410
+ logsByVersion,
411
+ state,
412
+ hooks,
413
+ baseContext,
414
+ compareContext,
415
+ fieldCompareDataByName,
416
+ fileCompareDataByName,
417
+ testCompareDataByName,
418
+ isFullScreen,
419
+ hidden,
420
+ };
421
+
422
+ const changes =
423
+ changesFromProps ||
424
+ deriveChangeType(baseId, compare?.id, fileCompareDataByName, fieldCompareDataByName, testCompareDataByName);
425
+
426
+ return (
427
+ <ComponentCompareContext.Provider value={componentCompareModel}>
428
+ <div className={classnames(styles.componentCompareContainer, className)} {...rest}>
429
+ <RenderCompareScreen
430
+ key={compCompareId}
431
+ {...props}
432
+ componentId={
433
+ compare?.id?.toStringWithoutVersion() ||
434
+ baseId.toStringWithoutVersion() ||
435
+ component?.id?.toStringWithoutVersion()
436
+ }
437
+ baseVersion={baseId.version}
438
+ compareVersion={compareIdFromProps?.version || component.id.version}
439
+ compareHasLocalChanges={compareIsLocalChanges}
440
+ changes={changes}
441
+ loading={loading}
442
+ Loader={Loader}
443
+ />
444
+ </div>
445
+ </ComponentCompareContext.Provider>
446
+ );
447
+ }
@@ -0,0 +1,2 @@
1
+ import type { ComponentCompareProps } from '@teambit/component.ui.component-compare.models.component-compare-props';
2
+ export declare function ComponentCompare(props: ComponentCompareProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,238 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /* eslint-disable react/destructuring-assignment */
3
+ /* eslint-disable react/require-default-props */
4
+ import React, { useContext, useMemo } from 'react';
5
+ import classnames from 'classnames';
6
+ import { CollapsibleMenuNav, ComponentContext, ComponentDescriptorContext, useComponent, } from '@teambit/component';
7
+ import { ComponentCompareContext } from '@teambit/component.ui.component-compare.context';
8
+ import { useComponentCompareQuery } from '@teambit/component.ui.component-compare.hooks.use-component-compare';
9
+ import { useCompareQueryParam } from '@teambit/component.ui.component-compare.hooks.use-component-compare-url';
10
+ import { ComponentCompareVersionPicker } from '@teambit/component.ui.component-compare.version-picker';
11
+ import { useLocation } from '@teambit/base-react.navigation.link';
12
+ import { SlotRouter } from '@teambit/ui-foundation.ui.react-router.slot-router';
13
+ import { groupByVersion } from '@teambit/component.ui.component-compare.utils.group-by-version';
14
+ import { sortTabs } from '@teambit/component.ui.component-compare.utils.sort-tabs';
15
+ import { sortByDateDsc } from '@teambit/component.ui.component-compare.utils.sort-logs';
16
+ import { extractLazyLoadedData } from '@teambit/component.ui.component-compare.utils.lazy-loading';
17
+ import { BlockSkeleton, WordSkeleton } from '@teambit/base-ui.loaders.skeleton';
18
+ import { ChangeType } from '@teambit/component.ui.component-compare.models.component-compare-change-type';
19
+ import styles from './component-compare.module.scss';
20
+ const findPrevVersionFromCurrent = (compareVersion) => (_, index, logs) => {
21
+ if (compareVersion === 'workspace' || logs.length === 1)
22
+ return true;
23
+ if (index === 0)
24
+ return false;
25
+ const prevIndex = index - 1;
26
+ return logs[prevIndex].tag === compareVersion || logs[prevIndex].hash === compareVersion;
27
+ };
28
+ function deriveChangeTypeCssForNav(tab, changed) {
29
+ if (!changed || !tab.changeType)
30
+ return null;
31
+ const hasChanged = changed.some((change) => tab.changeType === change);
32
+ return hasChanged ? styles.hasChanged : null;
33
+ }
34
+ function onNavClicked({ hooks, id }) {
35
+ if (!hooks?.tabs?.onClick)
36
+ return undefined;
37
+ return (e) => hooks?.tabs?.onClick?.(id, e);
38
+ }
39
+ function TabLoader() {
40
+ return _jsx(WordSkeleton, { className: styles.tabLoader, length: 5 });
41
+ }
42
+ function CompareMenuTab({ children, changed, changeTypeCss, loading, className, ...rest }) {
43
+ const hasChanged = useMemo(() => changed?.some((change) => change !== ChangeType.NONE && change !== ChangeType.NEW), [changeTypeCss]);
44
+ if (loading)
45
+ return _jsx(TabLoader, {});
46
+ return (_jsxs("div", { ...rest, className: classnames(styles.compareMenuTab, className), children: [changeTypeCss && hasChanged && _jsx("div", { className: classnames(styles.indicator, changeTypeCss) }), _jsx("div", { className: classnames(styles.menuTab), children: children })] }));
47
+ }
48
+ function CompareMenuNav({ tabs, state, hooks, changes: changed }) {
49
+ const activeTab = state?.tabs?.id;
50
+ const isControlled = state?.tabs?.controlled;
51
+ const tabsFromProps = extractLazyLoadedData(tabs) || [];
52
+ const extractedTabs = useMemo(() => tabsFromProps.sort(sortTabs).map((tab, index) => {
53
+ const isActive = !state ? undefined : !!activeTab && !!tab?.id && activeTab === tab.id;
54
+ const changeTypeCss = deriveChangeTypeCssForNav(tab, changed);
55
+ const loading = changed === undefined;
56
+ const key = `${tab.id}-tab-${changeTypeCss}`;
57
+ return [
58
+ tab.id || `tab-${index}`,
59
+ {
60
+ ...tab,
61
+ props: {
62
+ ...tab.props,
63
+ key,
64
+ displayName: (!loading && tab.displayName) || undefined,
65
+ active: isActive,
66
+ onClick: onNavClicked({ id: tab.id, hooks }),
67
+ href: (!isControlled && tab.props?.href) || undefined,
68
+ activeClassName: (!loading && styles.activeNav) || styles.loadingNav,
69
+ className: styles.navItem,
70
+ children: (_jsx(CompareMenuTab, { loading: loading, changeTypeCss: changeTypeCss, changed: changed, children: tab.props?.children }, key)),
71
+ },
72
+ },
73
+ ];
74
+ }), [tabsFromProps.length, activeTab, changed, changed?.length]);
75
+ const sortedTabs = useMemo(() => extractedTabs.filter(([, tab]) => !tab.widget), [extractedTabs.length, activeTab, changed?.length, changed]);
76
+ const sortedWidgets = useMemo(() => extractedTabs.filter(([, tab]) => tab.widget), [extractedTabs.length, activeTab, changed?.length, changed]);
77
+ return (_jsx("div", { className: styles.navContainer, children: _jsx(CollapsibleMenuNav, { navPlugins: sortedTabs, widgetPlugins: sortedWidgets }) }));
78
+ }
79
+ function deriveChangeType(baseId, compareId, fileCompareDataByName, fieldCompareDataByName, testCompareDataByName) {
80
+ if (!baseId && !compareId)
81
+ return null;
82
+ if (!baseId?.version)
83
+ return [ChangeType.NEW];
84
+ if (fileCompareDataByName === null || fieldCompareDataByName === null)
85
+ return null;
86
+ if (fileCompareDataByName === undefined || fieldCompareDataByName === undefined)
87
+ return undefined;
88
+ const fileCompareData = [...fileCompareDataByName.values()];
89
+ if (fieldCompareDataByName.size === 0 &&
90
+ (fileCompareDataByName.size === 0 || fileCompareData.every((f) => f.status === 'UNCHANGED'))) {
91
+ return [ChangeType.NONE];
92
+ }
93
+ const changed = [];
94
+ const DEPS_FIELD = ['dependencies', 'devDependencies', 'extensionDependencies', 'packageDependencies'];
95
+ if (testCompareDataByName?.size) {
96
+ changed.push(ChangeType.TESTS);
97
+ }
98
+ if (fileCompareDataByName.size > 0 && fileCompareData.some((f) => f.status !== 'UNCHANGED')) {
99
+ changed.push(ChangeType.SOURCE_CODE);
100
+ }
101
+ if (fieldCompareDataByName.size > 0) {
102
+ changed.push(ChangeType.ASPECTS);
103
+ }
104
+ if ([...fieldCompareDataByName.values()].some((field) => DEPS_FIELD.includes(field.fieldName))) {
105
+ changed.push(ChangeType.DEPENDENCY);
106
+ }
107
+ return changed;
108
+ }
109
+ function CompareLoader({ className, ...rest }) {
110
+ return (_jsxs("div", { className: className, ...rest, children: [_jsx(BlockSkeleton, { className: styles.navLoader, lines: 3 }), _jsxs("div", { className: styles.compareLoader, children: [_jsx("div", { className: styles.compareViewLoader, children: _jsx(BlockSkeleton, { lines: 30 }) }), _jsx("div", { className: styles.compareSidebarLoader, children: _jsx(BlockSkeleton, { lines: 30 }) })] })] }));
111
+ }
112
+ function RenderCompareScreen(props) {
113
+ const { routes, state, loading, Loader = CompareLoader, baseVersion, compareVersion, compareHasLocalChanges, componentId, hidden, } = props;
114
+ const showVersionPicker = state?.versionPicker?.element !== null;
115
+ return (_jsxs(_Fragment, { children: [showVersionPicker && (_jsx("div", { className: styles.top, children: state?.versionPicker?.element || (_jsx(ComponentCompareVersionPicker, { componentId: componentId, baseVersion: baseVersion, compareVersion: compareVersion, compareHasLocalChanges: compareHasLocalChanges, host: props.host, customUseComponent: props.customUseComponent })) })), loading && !hidden && _jsx(Loader, { className: classnames(styles.loader) }), !loading && (_jsxs("div", { className: classnames(styles.bottom, hidden && styles.hidden), children: [_jsx(CompareMenuNav, { ...props }), (extractLazyLoadedData(routes) || []).length > 0 && (_jsx(SlotRouter, { routes: extractLazyLoadedData(routes) || [] })), state?.tabs?.element] }))] }));
116
+ }
117
+ // eslint-disable-next-line complexity
118
+ export function ComponentCompare(props) {
119
+ const { host: hostFromProps, baseId: baseIdFromProps, compareId: compareIdFromProps,
120
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
121
+ routes, state,
122
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
123
+ tabs, className, hooks, changes: changesFromProps, customUseComponent, Loader = CompareLoader, baseContext, compareContext, isFullScreen, hidden = false, compareIdOverride, baseIdOverride, ...rest } = props;
124
+ const baseVersion = useCompareQueryParam('baseVersion');
125
+ const component = useContext(ComponentContext);
126
+ const componentDescriptor = useContext(ComponentDescriptorContext);
127
+ const location = useLocation();
128
+ const isWorkspace = hostFromProps === 'teambit.workspace/workspace';
129
+ const compareHost = isWorkspace && !location?.search.includes('version') && !compareIdFromProps && component.logs?.length === 0
130
+ ? hostFromProps
131
+ : 'teambit.scope/scope';
132
+ const host = 'teambit.scope/scope';
133
+ const { component: compareComponent, loading: loadingCompare, componentDescriptor: compareComponentDescriptor, } = useComponent(compareHost, compareIdOverride?.toString() || compareIdFromProps?.toString(), {
134
+ skip: hidden || (!compareIdFromProps && !compareIdOverride),
135
+ customUseComponent,
136
+ logFilters: {
137
+ log: {
138
+ // @todo - enable it when we implement lazy loading for logs
139
+ // limit: 3,
140
+ },
141
+ },
142
+ });
143
+ const allVersionInfo = useMemo(() => (compareComponent?.logs || component.logs)?.slice().sort(sortByDateDsc) || [], [component.id.toString(), loadingCompare, component.logs?.length, compareComponent?.logs?.length]);
144
+ const isNew = useMemo(() => allVersionInfo.length === 0, [allVersionInfo]);
145
+ const compareVersion = isWorkspace && !isNew && !location?.search.includes('version') && !compareIdFromProps
146
+ ? 'workspace'
147
+ : component.id.version;
148
+ const compareIsLocalChanges = compareVersion === 'workspace';
149
+ const lastVersionInfo = useMemo(() => {
150
+ if (compareIsLocalChanges)
151
+ return allVersionInfo[0];
152
+ const prevVersionInfo = allVersionInfo.find(findPrevVersionFromCurrent(compareVersion));
153
+ return prevVersionInfo;
154
+ }, [component.logs?.length, loadingCompare, compareComponent?.logs?.length]);
155
+ const baseId = React.useMemo(() => baseIdFromProps ||
156
+ (baseVersion && component.id.changeVersion(baseVersion)) ||
157
+ (lastVersionInfo && component.id.changeVersion(lastVersionInfo.tag || lastVersionInfo.hash)) ||
158
+ component.id, [loadingCompare, baseIdFromProps, baseVersion, lastVersionInfo?.tag, lastVersionInfo?.hash]);
159
+ const { component: base, loading: loadingBase, componentDescriptor: baseComponentDescriptor, } = useComponent(host, baseIdOverride?.toString() || baseId?.toString(), {
160
+ customUseComponent,
161
+ skip: hidden || (!baseId && !baseIdOverride),
162
+ logFilters: {
163
+ log: {
164
+ // @todo - enable it when we implement lazy loading for logs
165
+ // limit: 3,
166
+ },
167
+ },
168
+ });
169
+ const loading = loadingBase || loadingCompare;
170
+ const compare = compareIdFromProps ? compareComponent : component;
171
+ const compCompareId = `${base?.id.toString()}-${compare?.id.toString()}`;
172
+ const logsByVersion = useMemo(() => {
173
+ return (compare?.logs || []).slice().reduce(groupByVersion, new Map());
174
+ }, [compare?.id.toString()]);
175
+ const skipComponentCompareQuery = hidden || (base?.id.version?.toString() === compare?.id.version?.toString() && !compareIsLocalChanges);
176
+ const { loading: compCompareLoading, componentCompareData } = useComponentCompareQuery(base?.id.toString(), compare?.id.toString(), undefined, skipComponentCompareQuery);
177
+ const fileCompareDataByName = useMemo(() => {
178
+ if (loading || compCompareLoading)
179
+ return undefined;
180
+ if (!compCompareLoading && !componentCompareData)
181
+ return null;
182
+ const fileCompareDataByNameLookup = new Map();
183
+ (componentCompareData?.code || []).forEach((codeCompareData) => {
184
+ fileCompareDataByNameLookup.set(codeCompareData.fileName, codeCompareData);
185
+ });
186
+ return fileCompareDataByNameLookup;
187
+ }, [compCompareLoading, loading, compCompareId]);
188
+ const fieldCompareDataByName = useMemo(() => {
189
+ if (loading || compCompareLoading)
190
+ return undefined;
191
+ if (!compCompareLoading && !componentCompareData)
192
+ return null;
193
+ const fieldCompareDataByNameLookup = new Map();
194
+ (componentCompareData?.aspects || []).forEach((aspectCompareData) => {
195
+ fieldCompareDataByNameLookup.set(aspectCompareData.fieldName, aspectCompareData);
196
+ });
197
+ return fieldCompareDataByNameLookup;
198
+ }, [compCompareLoading, loading, compCompareId]);
199
+ const testCompareDataByName = useMemo(() => {
200
+ if (loading || compCompareLoading)
201
+ return undefined;
202
+ if (!compCompareLoading && !componentCompareData)
203
+ return null;
204
+ const testCompareDataByNameLookup = new Map();
205
+ (componentCompareData?.tests || []).forEach((testCompareData) => {
206
+ testCompareDataByNameLookup.set(testCompareData.fileName, testCompareData);
207
+ });
208
+ return testCompareDataByNameLookup;
209
+ }, [compCompareLoading, loading, compCompareId]);
210
+ const componentCompareModel = {
211
+ compare: compare && {
212
+ model: compare,
213
+ descriptor: compareComponentDescriptor || componentDescriptor,
214
+ hasLocalChanges: compareIsLocalChanges,
215
+ },
216
+ base: base && {
217
+ model: base,
218
+ descriptor: baseComponentDescriptor,
219
+ },
220
+ loading,
221
+ logsByVersion,
222
+ state,
223
+ hooks,
224
+ baseContext,
225
+ compareContext,
226
+ fieldCompareDataByName,
227
+ fileCompareDataByName,
228
+ testCompareDataByName,
229
+ isFullScreen,
230
+ hidden,
231
+ };
232
+ const changes = changesFromProps ||
233
+ deriveChangeType(baseId, compare?.id, fileCompareDataByName, fieldCompareDataByName, testCompareDataByName);
234
+ return (_jsx(ComponentCompareContext.Provider, { value: componentCompareModel, children: _jsx("div", { className: classnames(styles.componentCompareContainer, className), ...rest, children: _jsx(RenderCompareScreen, { ...props, componentId: compare?.id?.toStringWithoutVersion() ||
235
+ baseId.toStringWithoutVersion() ||
236
+ component?.id?.toStringWithoutVersion(), baseVersion: baseId.version, compareVersion: compareIdFromProps?.version || component.id.version, compareHasLocalChanges: compareIsLocalChanges, changes: changes, loading: loading, Loader: Loader }, compCompareId) }) }));
237
+ }
238
+ //# sourceMappingURL=component-compare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-compare.js","sourceRoot":"","sources":["../component-compare.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ .componentCompareContainer {
2
+ display: flex;
3
+ flex-direction: column;
4
+ height: 100%;
5
+ overflow: hidden;
6
+ }
7
+
8
+ .top {
9
+ display: flex;
10
+ flex-direction: column;
11
+ padding: 24px 24px 16px 24px;
12
+ }
13
+
14
+ .bottom {
15
+ display: flex;
16
+ overflow: hidden;
17
+ flex-direction: column;
18
+ flex: 1;
19
+
20
+ &.hidden {
21
+ display: none;
22
+ }
23
+ // padding-bottom: 16px;
24
+ }
25
+
26
+ .navContainer {
27
+ display: flex;
28
+ align-items: center;
29
+ min-height: 48px;
30
+ border-bottom: 1px solid var(--bit-border-color-lightest, #ededed);
31
+ font-size: var(--bit-p-xs, 14px);
32
+ padding-left: 8px;
33
+ }
34
+
35
+ .navigation {
36
+ display: flex;
37
+ min-height: 48px;
38
+ align-items: center;
39
+
40
+ @media screen and (max-width: 768px) {
41
+ padding-left: 6px;
42
+ }
43
+
44
+ > li {
45
+ display: block;
46
+ margin-right: 16px;
47
+ height: 100%;
48
+ }
49
+ }
50
+
51
+ .loader {
52
+ padding: 16px 24px;
53
+ color: var(--bit-bg-dent, #f6f6f6);
54
+ }
55
+
56
+ .tabLoader {
57
+ color: var(--bit-bg-dent, #f6f6f6);
58
+ }
59
+
60
+ .compareLoader {
61
+ display: flex;
62
+ padding-top: 16px;
63
+ }
64
+
65
+ .compareSidebarLoader {
66
+ width: 30%;
67
+ }
68
+
69
+ .compareViewLoader {
70
+ width: 70%;
71
+ padding-right: 16px;
72
+ }
73
+
74
+ .activeNav {
75
+ > div {
76
+ color: var(--bit-accent-color, #6c5ce7);
77
+ border-radius: 5px;
78
+ background-color: var(--bit-accent-bg, #edebfc);
79
+ }
80
+
81
+ &:after {
82
+ // unset default selection styles
83
+ height: 0 !important;
84
+ }
85
+ }
86
+
87
+ .loadingNav {
88
+ // > div {
89
+ // color: var(--bit-accent-color, #6c5ce7);
90
+ // border-radius: 5px;
91
+ // background-color: var(--bit-accent-bg, #edebfc);
92
+ // }
93
+
94
+ &:after {
95
+ // unset default selection styles
96
+ height: 0 !important;
97
+ }
98
+ }
99
+
100
+ .navItem {
101
+ position: relative;
102
+ color: var(--bit-text-color-light, #707279);
103
+
104
+ &.none {
105
+ > div {
106
+ opacity: 65%;
107
+ }
108
+ }
109
+ }
110
+
111
+ .compareMenuTab {
112
+ position: relative;
113
+ }
114
+
115
+ .indicator {
116
+ position: absolute;
117
+ top: -8px;
118
+ right: -8px;
119
+ border-radius: 100%;
120
+ padding: 4px;
121
+ box-sizing: border-box;
122
+
123
+ &.hasChanged {
124
+ background-color: #ff8b00;
125
+ }
126
+
127
+ &.new {
128
+ // @todo - review styles
129
+ display: none;
130
+ background-color: var(--bit-accent-success-color, #37b26c);
131
+ }
132
+ }
@@ -0,0 +1 @@
1
+ export { ComponentCompare } from './component-compare';
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { ComponentCompare } from './component-compare';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,7 @@
1
+ ;
2
+ ;
3
+
4
+ export const compositions = [];
5
+ export const overview = [];
6
+
7
+ export const compositions_metadata = {"compositions":[]};
package/index.ts ADDED
@@ -0,0 +1 @@
1
+ export { ComponentCompare } from './component-compare';
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@teambit/component.ui.component-compare.component-compare",
3
+ "version": "0.0.0-2914de1a41b6ff097e810b8da5f8b65f1593f205",
4
+ "homepage": "https://bit.cloud/teambit/component/ui/component-compare/component-compare",
5
+ "main": "dist/index.js",
6
+ "componentId": {
7
+ "scope": "teambit.component",
8
+ "name": "ui/component-compare/component-compare",
9
+ "version": "2914de1a41b6ff097e810b8da5f8b65f1593f205"
10
+ },
11
+ "dependencies": {
12
+ "classnames": "2.2.6",
13
+ "@teambit/base-ui.loaders.skeleton": "1.0.1",
14
+ "@teambit/component.ui.component-compare.hooks.use-component-compare-url": "0.0.13",
15
+ "@teambit/component.ui.component-compare.models.component-compare-change-type": "0.0.7",
16
+ "@teambit/component.ui.component-compare.models.component-compare-hooks": "0.0.11",
17
+ "@teambit/component.ui.component-compare.models.component-compare-model": "0.0.112",
18
+ "@teambit/component.ui.component-compare.utils.group-by-version": "0.0.8",
19
+ "@teambit/component.ui.component-compare.utils.sort-logs": "0.0.8",
20
+ "@teambit/component.ui.component-compare.utils.sort-tabs": "0.0.104",
21
+ "@teambit/component.ui.component-compare.hooks.use-component-compare": "0.0.113",
22
+ "@teambit/component.ui.component-compare.context": "0.0.0-7c47c29b5cd9231a833d4cca0f632dfeaba76844",
23
+ "@teambit/component.ui.component-compare.models.component-compare-props": "0.0.0-b851134365ceb7d4a74d5e209eadadba31b10e38",
24
+ "@teambit/component.ui.component-compare.utils.lazy-loading": "0.0.7",
25
+ "@teambit/component.ui.component-compare.version-picker": "0.0.0-1907599d05327d861524936122c9509a6ae21da7",
26
+ "@teambit/legacy-component-log": "0.0.407",
27
+ "@teambit/ui-foundation.ui.react-router.slot-router": "0.0.516"
28
+ },
29
+ "devDependencies": {
30
+ "@types/classnames": "2.2.11",
31
+ "@types/mocha": "9.1.0",
32
+ "@teambit/react.v17.react-env": "1.1.82"
33
+ },
34
+ "peerDependencies": {
35
+ "react": "^16.8.0 || ^17.0.0",
36
+ "@types/react": "^17.0.0",
37
+ "@teambit/base-react.navigation.link": "2.0.33"
38
+ },
39
+ "license": "Apache-2.0",
40
+ "optionalDependencies": {},
41
+ "peerDependenciesMeta": {},
42
+ "private": false,
43
+ "engines": {
44
+ "node": ">=12.22.0"
45
+ },
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "https://github.com/teambit/bit"
49
+ },
50
+ "keywords": [
51
+ "bit",
52
+ "components",
53
+ "collaboration",
54
+ "web",
55
+ "react",
56
+ "react-components",
57
+ "angular",
58
+ "angular-components"
59
+ ]
60
+ }
@@ -0,0 +1,41 @@
1
+ declare module '*.png' {
2
+ const value: any;
3
+ export = value;
4
+ }
5
+ declare module '*.svg' {
6
+ import type { FunctionComponent, SVGProps } from 'react';
7
+
8
+ export const ReactComponent: FunctionComponent<
9
+ SVGProps<SVGSVGElement> & { title?: string }
10
+ >;
11
+ const src: string;
12
+ export default src;
13
+ }
14
+ declare module '*.jpg' {
15
+ const value: any;
16
+ export = value;
17
+ }
18
+ declare module '*.jpeg' {
19
+ const value: any;
20
+ export = value;
21
+ }
22
+ declare module '*.gif' {
23
+ const value: any;
24
+ export = value;
25
+ }
26
+ declare module '*.bmp' {
27
+ const value: any;
28
+ export = value;
29
+ }
30
+ declare module '*.otf' {
31
+ const value: any;
32
+ export = value;
33
+ }
34
+ declare module '*.woff' {
35
+ const value: any;
36
+ export = value;
37
+ }
38
+ declare module '*.woff2' {
39
+ const value: any;
40
+ export = value;
41
+ }
@@ -0,0 +1,42 @@
1
+ declare module '*.module.css' {
2
+ const classes: { readonly [key: string]: string };
3
+ export default classes;
4
+ }
5
+ declare module '*.module.scss' {
6
+ const classes: { readonly [key: string]: string };
7
+ export default classes;
8
+ }
9
+ declare module '*.module.sass' {
10
+ const classes: { readonly [key: string]: string };
11
+ export default classes;
12
+ }
13
+
14
+ declare module '*.module.less' {
15
+ const classes: { readonly [key: string]: string };
16
+ export default classes;
17
+ }
18
+
19
+ declare module '*.less' {
20
+ const classes: { readonly [key: string]: string };
21
+ export default classes;
22
+ }
23
+
24
+ declare module '*.css' {
25
+ const classes: { readonly [key: string]: string };
26
+ export default classes;
27
+ }
28
+
29
+ declare module '*.sass' {
30
+ const classes: { readonly [key: string]: string };
31
+ export default classes;
32
+ }
33
+
34
+ declare module '*.scss' {
35
+ const classes: { readonly [key: string]: string };
36
+ export default classes;
37
+ }
38
+
39
+ declare module '*.mdx' {
40
+ const component: any;
41
+ export default component;
42
+ }