@teambit/component.ui.component-compare.component-compare 0.0.20 → 0.0.22

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.
@@ -29,8 +29,8 @@
29
29
 
30
30
  .navigation {
31
31
  display: flex;
32
- list-style: none;
33
32
  min-height: 48px;
33
+ align-items: center;
34
34
 
35
35
  @media screen and (max-width: 768px) {
36
36
  padding-left: 6px;
@@ -44,8 +44,84 @@
44
44
  }
45
45
 
46
46
  .loader {
47
+ padding: 16px 24px;
48
+ color: var(--bit-bg-dent, #f6f6f6);
49
+ }
50
+
51
+ .tabLoader {
52
+ color: var(--bit-bg-dent, #f6f6f6);
53
+ }
54
+
55
+ .compareLoader {
47
56
  display: flex;
48
- height: 100%;
49
- width: 100%;
50
- margin: auto;
57
+ padding-top: 16px;
58
+ }
59
+
60
+ .compareSidebarLoader {
61
+ width: 30%;
62
+ }
63
+
64
+ .compareViewLoader {
65
+ width: 70%;
66
+ padding-right: 16px;
67
+ }
68
+
69
+ .activeNav {
70
+ > div {
71
+ color: var(--bit-accent-color, #6c5ce7);
72
+ border-radius: 5px;
73
+ background-color: var(--bit-accent-bg, #edebfc);
74
+ }
75
+
76
+ &:after {
77
+ // unset default selection styles
78
+ height: 0 !important;
79
+ }
80
+ }
81
+
82
+ .loadingNav {
83
+ // > div {
84
+ // color: var(--bit-accent-color, #6c5ce7);
85
+ // border-radius: 5px;
86
+ // background-color: var(--bit-accent-bg, #edebfc);
87
+ // }
88
+
89
+ &:after {
90
+ // unset default selection styles
91
+ height: 0 !important;
92
+ }
93
+ }
94
+
95
+ .navItem {
96
+ position: relative;
97
+ color: var(--bit-text-color-light, #707279);
98
+
99
+ &.none {
100
+ > div {
101
+ opacity: 65%;
102
+ }
103
+ }
104
+ }
105
+
106
+ .compareMenuTab {
107
+ position: relative;
108
+ }
109
+
110
+ .indicator {
111
+ position: absolute;
112
+ top: -8px;
113
+ right: -8px;
114
+ border-radius: 100%;
115
+ padding: 4px;
116
+ box-sizing: border-box;
117
+
118
+ &.hasChanged {
119
+ background-color: #ff8b00;
120
+ }
121
+
122
+ &.new {
123
+ // @todo - review styles
124
+ display: none;
125
+ background-color: var(--bit-accent-success-color, #37b26c);
126
+ }
51
127
  }
@@ -1,20 +1,26 @@
1
- import React, { useContext, useMemo } from 'react';
1
+ import React, { useContext, useMemo, HTMLAttributes } from 'react';
2
2
  import classnames from 'classnames';
3
3
  import { LegacyComponentLog } from '@teambit/legacy-component-log';
4
- import { ComponentContext, TopBarNav, useComponent } from '@teambit/component';
4
+ import { CollapsibleMenuNav, ComponentContext, ComponentID, NavPlugin, useComponent } from '@teambit/component';
5
5
  import { ComponentCompareContext } from '@teambit/component.ui.component-compare.context';
6
+ import { useComponentCompareQuery } from '@teambit/component.ui.component-compare.hooks.use-component-compare';
7
+ import {
8
+ FileCompareResult,
9
+ FieldCompareResult,
10
+ } from '@teambit/component.ui.component-compare.models.component-compare-model';
6
11
  import { useCompareQueryParam } from '@teambit/component.ui.component-compare.hooks.use-component-compare-url';
7
12
  import { ComponentCompareVersionPicker } from '@teambit/component.ui.component-compare.version-picker';
8
13
  import { ComponentCompareBlankState } from '@teambit/component.ui.component-compare.blank-state';
9
14
  import { ComponentCompareHooks } from '@teambit/component.ui.component-compare.models.component-compare-hooks';
10
- import { RoundLoader } from '@teambit/design.ui.round-loader';
11
15
  import { useLocation } from '@teambit/base-react.navigation.link';
12
16
  import { SlotRouter } from '@teambit/ui-foundation.ui.react-router.slot-router';
13
- import { ComponentCompareProps } from '@teambit/component.ui.component-compare.models.component-compare-props';
17
+ import { ComponentCompareProps, TabItem } from '@teambit/component.ui.component-compare.models.component-compare-props';
14
18
  import { groupByVersion } from '@teambit/component.ui.component-compare.utils.group-by-version';
15
19
  import { sortTabs } from '@teambit/component.ui.component-compare.utils.sort-tabs';
16
20
  import { sortByDateDsc } from '@teambit/component.ui.component-compare.utils.sort-logs';
17
21
  import { extractLazyLoadedData } from '@teambit/component.ui.component-compare.utils.lazy-loading';
22
+ import { BlockSkeleton, WordSkeleton } from '@teambit/base-ui.loaders.skeleton';
23
+ import { ChangeType } from '@teambit/component.ui.component-compare.models.component-compare-change-type';
18
24
 
19
25
  import styles from './component-compare.module.scss';
20
26
 
@@ -40,13 +46,14 @@ export function ComponentCompare(props: ComponentCompareProps) {
40
46
  tabs,
41
47
  className,
42
48
  hooks,
49
+ changes: changesFromProps,
43
50
  customUseComponent,
51
+ Loader = CompareLoader,
44
52
  ...rest
45
53
  } = props;
46
54
  const baseVersion = useCompareQueryParam('baseVersion');
47
55
  const component = useContext(ComponentContext);
48
56
  const location = useLocation();
49
-
50
57
  const isWorkspace = host === 'teambit.workspace/workspace';
51
58
  const allVersionInfo = useMemo(() => component.logs?.slice().sort(sortByDateDsc) || [], [component.id.toString()]);
52
59
  const isNew = allVersionInfo.length === 0;
@@ -77,10 +84,38 @@ export function ComponentCompare(props: ComponentCompareProps) {
77
84
 
78
85
  const isEmpty = !loading && !compareIsLocalChanges && !compare && !base;
79
86
 
87
+ const compCompareId = `${base?.id.toString()}-${compare?.id.toString()}`;
88
+
80
89
  const logsByVersion = useMemo(() => {
81
90
  return (compare?.logs || []).slice().reduce(groupByVersion, new Map<string, LegacyComponentLog>());
82
91
  }, [compare?.id.toString()]);
83
92
 
93
+ const { loading: compCompareLoading, componentCompareData } = useComponentCompareQuery(
94
+ base?.id.toString(),
95
+ compare?.id.toString()
96
+ );
97
+
98
+ const fileCompareDataByName = useMemo(() => {
99
+ if (loading || compCompareLoading) return undefined;
100
+ if (!compCompareLoading && !componentCompareData) return null;
101
+
102
+ const _fileCompareDataByName = new Map<string, FileCompareResult>();
103
+ (componentCompareData?.code || []).forEach((codeCompareData) => {
104
+ _fileCompareDataByName.set(codeCompareData.fileName, codeCompareData);
105
+ });
106
+ return _fileCompareDataByName;
107
+ }, [compCompareLoading, loading, compCompareId]);
108
+
109
+ const fieldCompareDataByName = useMemo(() => {
110
+ if (loading || compCompareLoading) return undefined;
111
+ if (!compCompareLoading && !componentCompareData) return null;
112
+ const _fieldCompareDataByName = new Map<string, FieldCompareResult>();
113
+ (componentCompareData?.aspects || []).forEach((aspectCompareData) => {
114
+ _fieldCompareDataByName.set(aspectCompareData.fieldName, aspectCompareData);
115
+ });
116
+ return _fieldCompareDataByName;
117
+ }, [compCompareLoading, loading, compCompareId]);
118
+
84
119
  const componentCompareModel = {
85
120
  compare: compare && {
86
121
  model: compare,
@@ -93,18 +128,19 @@ export function ComponentCompare(props: ComponentCompareProps) {
93
128
  logsByVersion,
94
129
  state,
95
130
  hooks,
131
+ fieldCompareDataByName,
132
+ fileCompareDataByName,
96
133
  };
97
134
 
135
+ const changes =
136
+ changesFromProps || deriveChangeType(baseId, compare?.id, fileCompareDataByName, fieldCompareDataByName);
137
+
98
138
  return (
99
139
  <ComponentCompareContext.Provider value={componentCompareModel}>
100
140
  <div className={classnames(styles.componentCompareContainer, className)} {...rest}>
101
- {loading && (
102
- <div className={styles.loader}>
103
- <RoundLoader />
104
- </div>
105
- )}
141
+ {loading && <Loader className={classnames(styles.loader)} />}
106
142
  {isEmpty && <ComponentCompareBlankState />}
107
- {!isEmpty && <RenderCompareScreen {...props} />}
143
+ {!loading && !isEmpty && <RenderCompareScreen key={compCompareId} {...props} changes={changes} />}
108
144
  </div>
109
145
  </ComponentCompareContext.Provider>
110
146
  );
@@ -112,12 +148,13 @@ export function ComponentCompare(props: ComponentCompareProps) {
112
148
 
113
149
  function RenderCompareScreen(props: ComponentCompareProps) {
114
150
  const { routes, state } = props;
151
+ const showVersionPicker = state?.versionPicker?.element !== null;
115
152
 
116
153
  return (
117
154
  <>
118
- <div className={styles.top}>
119
- {(!state?.versionPicker && <ComponentCompareVersionPicker />) || state?.versionPicker?.element}
120
- </div>
155
+ {showVersionPicker && (
156
+ <div className={styles.top}>{state?.versionPicker?.element || <ComponentCompareVersionPicker />}</div>
157
+ )}
121
158
  <div className={styles.bottom}>
122
159
  <CompareMenuNav {...props} />
123
160
  {(extractLazyLoadedData(routes) || []).length > 0 && (
@@ -129,29 +166,55 @@ function RenderCompareScreen(props: ComponentCompareProps) {
129
166
  );
130
167
  }
131
168
 
132
- function CompareMenuNav({ tabs, state, hooks }: ComponentCompareProps) {
133
- const sortedTabs = (extractLazyLoadedData(tabs) || []).sort(sortTabs);
134
-
169
+ function CompareMenuNav({ tabs, state, hooks, changes: changed }: ComponentCompareProps) {
135
170
  const activeTab = state?.tabs?.id;
136
171
  const isControlled = state?.tabs?.controlled;
172
+ const _tabs = extractLazyLoadedData(tabs) || [];
173
+
174
+ const extractedTabs: [string, NavPlugin & TabItem][] = useMemo(
175
+ () =>
176
+ _tabs.sort(sortTabs).map((tab, index) => {
177
+ const isActive = !state ? undefined : !!activeTab && !!tab?.id && activeTab === tab.id;
178
+ const changeTypeCss = deriveChangeTypeCssForNav(tab, changed);
179
+ const loading = changed === undefined;
180
+ const key = `${tab.id}-tab-${changeTypeCss}`;
181
+ return [
182
+ tab.id || `tab-${index}`,
183
+ {
184
+ ...tab,
185
+ props: {
186
+ ...(tab.props || {}),
187
+ key,
188
+ displayName: (!loading && tab.displayName) || undefined,
189
+ active: isActive,
190
+ onClick: onNavClicked({ id: tab.id, hooks }),
191
+ href: (!isControlled && tab.props?.href) || undefined,
192
+ activeClassName: (!loading && styles.activeNav) || styles.loadingNav,
193
+ className: styles.navItem,
194
+ children: (
195
+ <CompareMenuTab key={key} loading={loading} changeTypeCss={changeTypeCss} changed={changed}>
196
+ {tab.props?.children}
197
+ </CompareMenuTab>
198
+ ),
199
+ },
200
+ },
201
+ ];
202
+ }),
203
+ [_tabs.length, activeTab, changed?.length]
204
+ );
205
+
206
+ const sortedTabs = useMemo(
207
+ () => extractedTabs.filter(([, tab]) => !tab.widget),
208
+ [extractedTabs.length, activeTab, changed?.length]
209
+ );
210
+ const sortedWidgets = useMemo(
211
+ () => extractedTabs.filter(([, tab]) => tab.widget),
212
+ [extractedTabs.length, activeTab, changed?.length]
213
+ );
137
214
 
138
215
  return (
139
216
  <div className={styles.navContainer}>
140
- <nav className={styles.navigation}>
141
- {sortedTabs.map((tabItem, index) => {
142
- const isActive = !state ? undefined : !!activeTab && !!tabItem.id && activeTab === tabItem.id;
143
-
144
- return (
145
- <TopBarNav
146
- {...(tabItem.props || {})}
147
- key={`compare-menu-nav-${index}-${tabItem.id}`}
148
- active={isActive}
149
- onClick={onNavClicked({ id: tabItem.id, hooks })}
150
- href={(!isControlled && tabItem.props?.href) || undefined}
151
- />
152
- );
153
- })}
154
- </nav>
217
+ <CollapsibleMenuNav navPlugins={sortedTabs} widgetPlugins={sortedWidgets} />
155
218
  </div>
156
219
  );
157
220
  }
@@ -160,3 +223,92 @@ function onNavClicked({ hooks, id }: { hooks?: ComponentCompareHooks; id?: strin
160
223
  if (!hooks?.tabs?.onClick) return undefined;
161
224
  return (e) => hooks?.tabs?.onClick?.(id, e);
162
225
  }
226
+
227
+ function CompareLoader({ className, ...rest }: React.HTMLAttributes<HTMLDivElement>) {
228
+ return (
229
+ <div className={className} {...rest}>
230
+ <BlockSkeleton className={styles.navLoader} lines={3} />
231
+ <div className={styles.compareLoader}>
232
+ <div className={styles.compareViewLoader}>
233
+ <BlockSkeleton lines={30} />
234
+ </div>
235
+ <div className={styles.compareSidebarLoader}>
236
+ <BlockSkeleton lines={30} />
237
+ </div>
238
+ </div>
239
+ </div>
240
+ );
241
+ }
242
+
243
+ function TabLoader() {
244
+ return <WordSkeleton className={styles.tabLoader} length={5} />;
245
+ }
246
+
247
+ function deriveChangeType(
248
+ baseId?: ComponentID,
249
+ compareId?: ComponentID,
250
+ fileCompareDataByName?: Map<string, FileCompareResult> | null,
251
+ fieldCompareDataByName?: Map<string, FieldCompareResult> | null
252
+ ): ChangeType[] | undefined | null {
253
+ if (!baseId && !compareId) return null;
254
+ if (!baseId?.version) return [ChangeType.NEW];
255
+
256
+ if (fileCompareDataByName === null || fieldCompareDataByName === null) return null;
257
+ if (fileCompareDataByName === undefined || fieldCompareDataByName === undefined) return undefined;
258
+
259
+ if (
260
+ fieldCompareDataByName.size === 0 &&
261
+ (fileCompareDataByName.size === 0 || [...fileCompareDataByName.values()].every((f) => f.status === 'UNCHANGED'))
262
+ ) {
263
+ return [ChangeType.NONE];
264
+ }
265
+
266
+ const changed: ChangeType[] = [];
267
+ const DEPS_FIELD = ['dependencies', 'devDependencies', 'extensionDependencies'];
268
+
269
+ if (fileCompareDataByName.size > 0 && [...fileCompareDataByName.values()].some((f) => f.status !== 'UNCHANGED')) {
270
+ changed.push(ChangeType.SOURCE_CODE);
271
+ }
272
+
273
+ if (fieldCompareDataByName.size > 0) {
274
+ changed.push(ChangeType.ASPECTS);
275
+ }
276
+
277
+ if ([...fieldCompareDataByName.values()].some((field) => DEPS_FIELD.includes(field.fieldName))) {
278
+ changed.push(ChangeType.DEPENDENCY);
279
+ }
280
+
281
+ return changed;
282
+ }
283
+ function deriveChangeTypeCssForNav(tab: TabItem, changed: ChangeType[] | null | undefined): string | null {
284
+ if (!changed || !tab.changeType) return null;
285
+ const hasChanged = changed.some((change) => tab.changeType === change);
286
+ return hasChanged ? styles.hasChanged : null;
287
+ }
288
+
289
+ function CompareMenuTab({
290
+ children,
291
+ changed,
292
+ changeTypeCss,
293
+ loading,
294
+ className,
295
+ ...rest
296
+ }: HTMLAttributes<HTMLDivElement> & {
297
+ changeTypeCss?: string | null;
298
+ loading?: boolean;
299
+ changed?: ChangeType[] | null;
300
+ }) {
301
+ const hasChanged = useMemo(
302
+ () => changed?.some((change) => change !== ChangeType.NONE && change !== ChangeType.NEW),
303
+ [changeTypeCss]
304
+ );
305
+
306
+ if (loading) return <TabLoader />;
307
+
308
+ return (
309
+ <div {...rest} className={classnames(styles.compareMenuTab, className)}>
310
+ {changeTypeCss && hasChanged && <div className={classnames(styles.indicator, changeTypeCss)}></div>}
311
+ <div className={classnames(styles.menuTab)}>{children}</div>
312
+ </div>
313
+ );
314
+ }
@@ -42,16 +42,18 @@ const react_1 = __importStar(require("react"));
42
42
  const classnames_1 = __importDefault(require("classnames"));
43
43
  const component_1 = require("@teambit/component");
44
44
  const component_ui_component_compare_context_1 = require("@teambit/component.ui.component-compare.context");
45
+ const component_ui_component_compare_hooks_use_component_compare_1 = require("@teambit/component.ui.component-compare.hooks.use-component-compare");
45
46
  const component_ui_component_compare_hooks_use_component_compare_url_1 = require("@teambit/component.ui.component-compare.hooks.use-component-compare-url");
46
47
  const component_ui_component_compare_version_picker_1 = require("@teambit/component.ui.component-compare.version-picker");
47
48
  const component_ui_component_compare_blank_state_1 = require("@teambit/component.ui.component-compare.blank-state");
48
- const design_ui_round_loader_1 = require("@teambit/design.ui.round-loader");
49
49
  const base_react_navigation_link_1 = require("@teambit/base-react.navigation.link");
50
50
  const ui_foundation_ui_react_router_slot_router_1 = require("@teambit/ui-foundation.ui.react-router.slot-router");
51
51
  const component_ui_component_compare_utils_group_by_version_1 = require("@teambit/component.ui.component-compare.utils.group-by-version");
52
52
  const component_ui_component_compare_utils_sort_tabs_1 = require("@teambit/component.ui.component-compare.utils.sort-tabs");
53
53
  const component_ui_component_compare_utils_sort_logs_1 = require("@teambit/component.ui.component-compare.utils.sort-logs");
54
54
  const component_ui_component_compare_utils_lazy_loading_1 = require("@teambit/component.ui.component-compare.utils.lazy-loading");
55
+ const base_ui_loaders_skeleton_1 = require("@teambit/base-ui.loaders.skeleton");
56
+ const component_ui_component_compare_models_component_compare_change_type_1 = require("@teambit/component.ui.component-compare.models.component-compare-change-type");
55
57
  const component_compare_module_scss_1 = __importDefault(require("./component-compare.module.scss"));
56
58
  const findPrevVersionFromCurrent = (compareVersion) => (_, index, logs) => {
57
59
  if (compareVersion === 'workspace' || logs.length === 1)
@@ -66,7 +68,7 @@ function ComponentCompare(props) {
66
68
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
67
69
  routes, state,
68
70
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
69
- tabs, className, hooks, customUseComponent } = props, rest = __rest(props, ["host", "baseId", "compareId", "routes", "state", "tabs", "className", "hooks", "customUseComponent"]);
71
+ tabs, className, hooks, changes: changesFromProps, customUseComponent, Loader = CompareLoader } = props, rest = __rest(props, ["host", "baseId", "compareId", "routes", "state", "tabs", "className", "hooks", "changes", "customUseComponent", "Loader"]);
70
72
  const baseVersion = (0, component_ui_component_compare_hooks_use_component_compare_url_1.useCompareQueryParam)('baseVersion');
71
73
  const component = (0, react_1.useContext)(component_1.ComponentContext);
72
74
  const location = (0, base_react_navigation_link_1.useLocation)();
@@ -91,9 +93,33 @@ function ComponentCompare(props) {
91
93
  const loading = loadingBase || loadingCompare;
92
94
  const compare = _compareId ? compareComponent : component;
93
95
  const isEmpty = !loading && !compareIsLocalChanges && !compare && !base;
96
+ const compCompareId = `${base === null || base === void 0 ? void 0 : base.id.toString()}-${compare === null || compare === void 0 ? void 0 : compare.id.toString()}`;
94
97
  const logsByVersion = (0, react_1.useMemo)(() => {
95
98
  return ((compare === null || compare === void 0 ? void 0 : compare.logs) || []).slice().reduce(component_ui_component_compare_utils_group_by_version_1.groupByVersion, new Map());
96
99
  }, [compare === null || compare === void 0 ? void 0 : compare.id.toString()]);
100
+ const { loading: compCompareLoading, componentCompareData } = (0, component_ui_component_compare_hooks_use_component_compare_1.useComponentCompareQuery)(base === null || base === void 0 ? void 0 : base.id.toString(), compare === null || compare === void 0 ? void 0 : compare.id.toString());
101
+ const fileCompareDataByName = (0, react_1.useMemo)(() => {
102
+ if (loading || compCompareLoading)
103
+ return undefined;
104
+ if (!compCompareLoading && !componentCompareData)
105
+ return null;
106
+ const _fileCompareDataByName = new Map();
107
+ ((componentCompareData === null || componentCompareData === void 0 ? void 0 : componentCompareData.code) || []).forEach((codeCompareData) => {
108
+ _fileCompareDataByName.set(codeCompareData.fileName, codeCompareData);
109
+ });
110
+ return _fileCompareDataByName;
111
+ }, [compCompareLoading, loading, compCompareId]);
112
+ const fieldCompareDataByName = (0, react_1.useMemo)(() => {
113
+ if (loading || compCompareLoading)
114
+ return undefined;
115
+ if (!compCompareLoading && !componentCompareData)
116
+ return null;
117
+ const _fieldCompareDataByName = new Map();
118
+ ((componentCompareData === null || componentCompareData === void 0 ? void 0 : componentCompareData.aspects) || []).forEach((aspectCompareData) => {
119
+ _fieldCompareDataByName.set(aspectCompareData.fieldName, aspectCompareData);
120
+ });
121
+ return _fieldCompareDataByName;
122
+ }, [compCompareLoading, loading, compCompareId]);
97
123
  const componentCompareModel = {
98
124
  compare: compare && {
99
125
  model: compare,
@@ -106,36 +132,48 @@ function ComponentCompare(props) {
106
132
  logsByVersion,
107
133
  state,
108
134
  hooks,
135
+ fieldCompareDataByName,
136
+ fileCompareDataByName,
109
137
  };
138
+ const changes = changesFromProps || deriveChangeType(baseId, compare === null || compare === void 0 ? void 0 : compare.id, fileCompareDataByName, fieldCompareDataByName);
110
139
  return (react_1.default.createElement(component_ui_component_compare_context_1.ComponentCompareContext.Provider, { value: componentCompareModel },
111
140
  react_1.default.createElement("div", Object.assign({ className: (0, classnames_1.default)(component_compare_module_scss_1.default.componentCompareContainer, className) }, rest),
112
- loading && (react_1.default.createElement("div", { className: component_compare_module_scss_1.default.loader },
113
- react_1.default.createElement(design_ui_round_loader_1.RoundLoader, null))),
141
+ loading && react_1.default.createElement(Loader, { className: (0, classnames_1.default)(component_compare_module_scss_1.default.loader) }),
114
142
  isEmpty && react_1.default.createElement(component_ui_component_compare_blank_state_1.ComponentCompareBlankState, null),
115
- !isEmpty && react_1.default.createElement(RenderCompareScreen, Object.assign({}, props)))));
143
+ !loading && !isEmpty && react_1.default.createElement(RenderCompareScreen, Object.assign({ key: compCompareId }, props, { changes: changes })))));
116
144
  }
117
145
  exports.ComponentCompare = ComponentCompare;
118
146
  function RenderCompareScreen(props) {
119
- var _a, _b;
147
+ var _a, _b, _c;
120
148
  const { routes, state } = props;
149
+ const showVersionPicker = ((_a = state === null || state === void 0 ? void 0 : state.versionPicker) === null || _a === void 0 ? void 0 : _a.element) !== null;
121
150
  return (react_1.default.createElement(react_1.default.Fragment, null,
122
- react_1.default.createElement("div", { className: component_compare_module_scss_1.default.top }, (!(state === null || state === void 0 ? void 0 : state.versionPicker) && react_1.default.createElement(component_ui_component_compare_version_picker_1.ComponentCompareVersionPicker, null)) || ((_a = state === null || state === void 0 ? void 0 : state.versionPicker) === null || _a === void 0 ? void 0 : _a.element)),
151
+ showVersionPicker && (react_1.default.createElement("div", { className: component_compare_module_scss_1.default.top }, ((_b = state === null || state === void 0 ? void 0 : state.versionPicker) === null || _b === void 0 ? void 0 : _b.element) || react_1.default.createElement(component_ui_component_compare_version_picker_1.ComponentCompareVersionPicker, null))),
123
152
  react_1.default.createElement("div", { className: component_compare_module_scss_1.default.bottom },
124
153
  react_1.default.createElement(CompareMenuNav, Object.assign({}, props)),
125
- ((0, component_ui_component_compare_utils_lazy_loading_1.extractLazyLoadedData)(routes) || []).length > 0 && (react_1.default.createElement(ui_foundation_ui_react_router_slot_router_1.SlotRouter, { routes: (0, component_ui_component_compare_utils_lazy_loading_1.extractLazyLoadedData)(routes) || [] })), (_b = state === null || state === void 0 ? void 0 : state.tabs) === null || _b === void 0 ? void 0 :
126
- _b.element)));
154
+ ((0, component_ui_component_compare_utils_lazy_loading_1.extractLazyLoadedData)(routes) || []).length > 0 && (react_1.default.createElement(ui_foundation_ui_react_router_slot_router_1.SlotRouter, { routes: (0, component_ui_component_compare_utils_lazy_loading_1.extractLazyLoadedData)(routes) || [] })), (_c = state === null || state === void 0 ? void 0 : state.tabs) === null || _c === void 0 ? void 0 :
155
+ _c.element)));
127
156
  }
128
- function CompareMenuNav({ tabs, state, hooks }) {
157
+ function CompareMenuNav({ tabs, state, hooks, changes: changed }) {
129
158
  var _a, _b;
130
- const sortedTabs = ((0, component_ui_component_compare_utils_lazy_loading_1.extractLazyLoadedData)(tabs) || []).sort(component_ui_component_compare_utils_sort_tabs_1.sortTabs);
131
159
  const activeTab = (_a = state === null || state === void 0 ? void 0 : state.tabs) === null || _a === void 0 ? void 0 : _a.id;
132
160
  const isControlled = (_b = state === null || state === void 0 ? void 0 : state.tabs) === null || _b === void 0 ? void 0 : _b.controlled;
161
+ const _tabs = (0, component_ui_component_compare_utils_lazy_loading_1.extractLazyLoadedData)(tabs) || [];
162
+ const extractedTabs = (0, react_1.useMemo)(() => _tabs.sort(component_ui_component_compare_utils_sort_tabs_1.sortTabs).map((tab, index) => {
163
+ var _a, _b;
164
+ const isActive = !state ? undefined : !!activeTab && !!(tab === null || tab === void 0 ? void 0 : tab.id) && activeTab === tab.id;
165
+ const changeTypeCss = deriveChangeTypeCssForNav(tab, changed);
166
+ const loading = changed === undefined;
167
+ const key = `${tab.id}-tab-${changeTypeCss}`;
168
+ return [
169
+ tab.id || `tab-${index}`,
170
+ Object.assign(Object.assign({}, tab), { props: Object.assign(Object.assign({}, (tab.props || {})), { key, displayName: (!loading && tab.displayName) || undefined, active: isActive, onClick: onNavClicked({ id: tab.id, hooks }), href: (!isControlled && ((_a = tab.props) === null || _a === void 0 ? void 0 : _a.href)) || undefined, activeClassName: (!loading && component_compare_module_scss_1.default.activeNav) || component_compare_module_scss_1.default.loadingNav, className: component_compare_module_scss_1.default.navItem, children: (react_1.default.createElement(CompareMenuTab, { key: key, loading: loading, changeTypeCss: changeTypeCss, changed: changed }, (_b = tab.props) === null || _b === void 0 ? void 0 : _b.children)) }) }),
171
+ ];
172
+ }), [_tabs.length, activeTab, changed === null || changed === void 0 ? void 0 : changed.length]);
173
+ const sortedTabs = (0, react_1.useMemo)(() => extractedTabs.filter(([, tab]) => !tab.widget), [extractedTabs.length, activeTab, changed === null || changed === void 0 ? void 0 : changed.length]);
174
+ const sortedWidgets = (0, react_1.useMemo)(() => extractedTabs.filter(([, tab]) => tab.widget), [extractedTabs.length, activeTab, changed === null || changed === void 0 ? void 0 : changed.length]);
133
175
  return (react_1.default.createElement("div", { className: component_compare_module_scss_1.default.navContainer },
134
- react_1.default.createElement("nav", { className: component_compare_module_scss_1.default.navigation }, sortedTabs.map((tabItem, index) => {
135
- var _a;
136
- const isActive = !state ? undefined : !!activeTab && !!tabItem.id && activeTab === tabItem.id;
137
- return (react_1.default.createElement(component_1.TopBarNav, Object.assign({}, (tabItem.props || {}), { key: `compare-menu-nav-${index}-${tabItem.id}`, active: isActive, onClick: onNavClicked({ id: tabItem.id, hooks }), href: (!isControlled && ((_a = tabItem.props) === null || _a === void 0 ? void 0 : _a.href)) || undefined })));
138
- }))));
176
+ react_1.default.createElement(component_1.CollapsibleMenuNav, { navPlugins: sortedTabs, widgetPlugins: sortedWidgets })));
139
177
  }
140
178
  function onNavClicked({ hooks, id }) {
141
179
  var _a;
@@ -143,4 +181,58 @@ function onNavClicked({ hooks, id }) {
143
181
  return undefined;
144
182
  return (e) => { var _a, _b; return (_b = (_a = hooks === null || hooks === void 0 ? void 0 : hooks.tabs) === null || _a === void 0 ? void 0 : _a.onClick) === null || _b === void 0 ? void 0 : _b.call(_a, id, e); };
145
183
  }
184
+ function CompareLoader(_a) {
185
+ var { className } = _a, rest = __rest(_a, ["className"]);
186
+ return (react_1.default.createElement("div", Object.assign({ className: className }, rest),
187
+ react_1.default.createElement(base_ui_loaders_skeleton_1.BlockSkeleton, { className: component_compare_module_scss_1.default.navLoader, lines: 3 }),
188
+ react_1.default.createElement("div", { className: component_compare_module_scss_1.default.compareLoader },
189
+ react_1.default.createElement("div", { className: component_compare_module_scss_1.default.compareViewLoader },
190
+ react_1.default.createElement(base_ui_loaders_skeleton_1.BlockSkeleton, { lines: 30 })),
191
+ react_1.default.createElement("div", { className: component_compare_module_scss_1.default.compareSidebarLoader },
192
+ react_1.default.createElement(base_ui_loaders_skeleton_1.BlockSkeleton, { lines: 30 })))));
193
+ }
194
+ function TabLoader() {
195
+ return react_1.default.createElement(base_ui_loaders_skeleton_1.WordSkeleton, { className: component_compare_module_scss_1.default.tabLoader, length: 5 });
196
+ }
197
+ function deriveChangeType(baseId, compareId, fileCompareDataByName, fieldCompareDataByName) {
198
+ if (!baseId && !compareId)
199
+ return null;
200
+ if (!(baseId === null || baseId === void 0 ? void 0 : baseId.version))
201
+ return [component_ui_component_compare_models_component_compare_change_type_1.ChangeType.NEW];
202
+ if (fileCompareDataByName === null || fieldCompareDataByName === null)
203
+ return null;
204
+ if (fileCompareDataByName === undefined || fieldCompareDataByName === undefined)
205
+ return undefined;
206
+ if (fieldCompareDataByName.size === 0 &&
207
+ (fileCompareDataByName.size === 0 || [...fileCompareDataByName.values()].every((f) => f.status === 'UNCHANGED'))) {
208
+ return [component_ui_component_compare_models_component_compare_change_type_1.ChangeType.NONE];
209
+ }
210
+ const changed = [];
211
+ const DEPS_FIELD = ['dependencies', 'devDependencies', 'extensionDependencies'];
212
+ if (fileCompareDataByName.size > 0 && [...fileCompareDataByName.values()].some((f) => f.status !== 'UNCHANGED')) {
213
+ changed.push(component_ui_component_compare_models_component_compare_change_type_1.ChangeType.SOURCE_CODE);
214
+ }
215
+ if (fieldCompareDataByName.size > 0) {
216
+ changed.push(component_ui_component_compare_models_component_compare_change_type_1.ChangeType.ASPECTS);
217
+ }
218
+ if ([...fieldCompareDataByName.values()].some((field) => DEPS_FIELD.includes(field.fieldName))) {
219
+ changed.push(component_ui_component_compare_models_component_compare_change_type_1.ChangeType.DEPENDENCY);
220
+ }
221
+ return changed;
222
+ }
223
+ function deriveChangeTypeCssForNav(tab, changed) {
224
+ if (!changed || !tab.changeType)
225
+ return null;
226
+ const hasChanged = changed.some((change) => tab.changeType === change);
227
+ return hasChanged ? component_compare_module_scss_1.default.hasChanged : null;
228
+ }
229
+ function CompareMenuTab(_a) {
230
+ var { children, changed, changeTypeCss, loading, className } = _a, rest = __rest(_a, ["children", "changed", "changeTypeCss", "loading", "className"]);
231
+ const hasChanged = (0, react_1.useMemo)(() => changed === null || changed === void 0 ? void 0 : changed.some((change) => change !== component_ui_component_compare_models_component_compare_change_type_1.ChangeType.NONE && change !== component_ui_component_compare_models_component_compare_change_type_1.ChangeType.NEW), [changeTypeCss]);
232
+ if (loading)
233
+ return react_1.default.createElement(TabLoader, null);
234
+ return (react_1.default.createElement("div", Object.assign({}, rest, { className: (0, classnames_1.default)(component_compare_module_scss_1.default.compareMenuTab, className) }),
235
+ changeTypeCss && hasChanged && react_1.default.createElement("div", { className: (0, classnames_1.default)(component_compare_module_scss_1.default.indicator, changeTypeCss) }),
236
+ react_1.default.createElement("div", { className: (0, classnames_1.default)(component_compare_module_scss_1.default.menuTab) }, children)));
237
+ }
146
238
  //# sourceMappingURL=component-compare.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"component-compare.js","sourceRoot":"","sources":["../component-compare.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component-compare.js","sourceRoot":"","sources":["../component-compare.tsx"],"names":[],"mappings":"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"}
@@ -29,8 +29,8 @@
29
29
 
30
30
  .navigation {
31
31
  display: flex;
32
- list-style: none;
33
32
  min-height: 48px;
33
+ align-items: center;
34
34
 
35
35
  @media screen and (max-width: 768px) {
36
36
  padding-left: 6px;
@@ -44,8 +44,84 @@
44
44
  }
45
45
 
46
46
  .loader {
47
+ padding: 16px 24px;
48
+ color: var(--bit-bg-dent, #f6f6f6);
49
+ }
50
+
51
+ .tabLoader {
52
+ color: var(--bit-bg-dent, #f6f6f6);
53
+ }
54
+
55
+ .compareLoader {
47
56
  display: flex;
48
- height: 100%;
49
- width: 100%;
50
- margin: auto;
57
+ padding-top: 16px;
58
+ }
59
+
60
+ .compareSidebarLoader {
61
+ width: 30%;
62
+ }
63
+
64
+ .compareViewLoader {
65
+ width: 70%;
66
+ padding-right: 16px;
67
+ }
68
+
69
+ .activeNav {
70
+ > div {
71
+ color: var(--bit-accent-color, #6c5ce7);
72
+ border-radius: 5px;
73
+ background-color: var(--bit-accent-bg, #edebfc);
74
+ }
75
+
76
+ &:after {
77
+ // unset default selection styles
78
+ height: 0 !important;
79
+ }
80
+ }
81
+
82
+ .loadingNav {
83
+ // > div {
84
+ // color: var(--bit-accent-color, #6c5ce7);
85
+ // border-radius: 5px;
86
+ // background-color: var(--bit-accent-bg, #edebfc);
87
+ // }
88
+
89
+ &:after {
90
+ // unset default selection styles
91
+ height: 0 !important;
92
+ }
93
+ }
94
+
95
+ .navItem {
96
+ position: relative;
97
+ color: var(--bit-text-color-light, #707279);
98
+
99
+ &.none {
100
+ > div {
101
+ opacity: 65%;
102
+ }
103
+ }
104
+ }
105
+
106
+ .compareMenuTab {
107
+ position: relative;
108
+ }
109
+
110
+ .indicator {
111
+ position: absolute;
112
+ top: -8px;
113
+ right: -8px;
114
+ border-radius: 100%;
115
+ padding: 4px;
116
+ box-sizing: border-box;
117
+
118
+ &.hasChanged {
119
+ background-color: #ff8b00;
120
+ }
121
+
122
+ &.new {
123
+ // @todo - review styles
124
+ display: none;
125
+ background-color: var(--bit-accent-success-color, #37b26c);
126
+ }
51
127
  }
package/package.json CHANGED
@@ -1,28 +1,31 @@
1
1
  {
2
2
  "name": "@teambit/component.ui.component-compare.component-compare",
3
- "version": "0.0.20",
3
+ "version": "0.0.22",
4
4
  "homepage": "https://bit.dev/teambit/component/ui/component-compare/component-compare",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.component",
8
8
  "name": "ui/component-compare/component-compare",
9
- "version": "0.0.20"
9
+ "version": "0.0.22"
10
10
  },
11
11
  "dependencies": {
12
12
  "classnames": "2.2.6",
13
13
  "core-js": "^3.0.0",
14
14
  "@teambit/base-react.navigation.link": "2.0.27",
15
+ "@teambit/base-ui.loaders.skeleton": "1.0.1",
15
16
  "@teambit/component.ui.component-compare.blank-state": "0.0.1",
16
- "@teambit/component.ui.component-compare.context": "0.0.5",
17
+ "@teambit/component.ui.component-compare.context": "0.0.6",
17
18
  "@teambit/component.ui.component-compare.hooks.use-component-compare-url": "0.0.2",
18
- "@teambit/component.ui.component-compare.models.component-compare-hooks": "0.0.2",
19
- "@teambit/component.ui.component-compare.models.component-compare-props": "0.0.2",
19
+ "@teambit/component.ui.component-compare.hooks.use-component-compare": "0.0.4",
20
+ "@teambit/component.ui.component-compare.models.component-compare-change-type": "0.0.1",
21
+ "@teambit/component.ui.component-compare.models.component-compare-hooks": "0.0.3",
22
+ "@teambit/component.ui.component-compare.models.component-compare-model": "0.0.3",
23
+ "@teambit/component.ui.component-compare.models.component-compare-props": "0.0.3",
20
24
  "@teambit/component.ui.component-compare.utils.group-by-version": "0.0.2",
21
25
  "@teambit/component.ui.component-compare.utils.lazy-loading": "0.0.1",
22
26
  "@teambit/component.ui.component-compare.utils.sort-logs": "0.0.2",
23
- "@teambit/component.ui.component-compare.utils.sort-tabs": "0.0.2",
24
- "@teambit/component.ui.component-compare.version-picker": "0.0.20",
25
- "@teambit/design.ui.round-loader": "0.0.355",
27
+ "@teambit/component.ui.component-compare.utils.sort-tabs": "0.0.3",
28
+ "@teambit/component.ui.component-compare.version-picker": "0.0.22",
26
29
  "@teambit/legacy-component-log": "0.0.399",
27
30
  "@teambit/ui-foundation.ui.react-router.slot-router": "0.0.501"
28
31
  },