@teambit/component.ui.version-dropdown 0.0.490 → 0.0.493

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.
Files changed (38) hide show
  1. package/__preview-1646295435675.js +2 -0
  2. package/dist/lane-info/index.d.ts +1 -0
  3. package/dist/lane-info/index.js +6 -0
  4. package/dist/lane-info/index.js.map +1 -0
  5. package/dist/lane-info/lane-info.d.ts +6 -0
  6. package/dist/lane-info/lane-info.js +21 -0
  7. package/dist/lane-info/lane-info.js.map +1 -0
  8. package/dist/lane-info/lane-info.module.scss +30 -0
  9. package/dist/version-dropdown.composition.d.ts +3 -2
  10. package/dist/version-dropdown.composition.js +8 -8
  11. package/dist/version-dropdown.composition.js.map +1 -1
  12. package/dist/version-dropdown.d.ts +15 -4
  13. package/dist/version-dropdown.docs.d.ts +1 -0
  14. package/dist/version-dropdown.js +77 -15
  15. package/dist/version-dropdown.js.map +1 -1
  16. package/dist/version-dropdown.module.scss +41 -5
  17. package/dist/version-dropdown.spec.js +2 -2
  18. package/dist/version-dropdown.spec.js.map +1 -1
  19. package/dist/version-info/index.d.ts +1 -0
  20. package/dist/version-info/index.js +6 -0
  21. package/dist/version-info/index.js.map +1 -0
  22. package/dist/version-info/version-info.d.ts +7 -0
  23. package/dist/version-info/version-info.js +53 -0
  24. package/dist/version-info/version-info.js.map +1 -0
  25. package/dist/version-info/version-info.module.scss +44 -0
  26. package/lane-info/index.ts +1 -0
  27. package/lane-info/lane-info.module.scss +30 -0
  28. package/lane-info/lane-info.tsx +26 -0
  29. package/package-tar/teambit-component.ui.version-dropdown-0.0.493.tgz +0 -0
  30. package/package.json +14 -7
  31. package/version-dropdown.composition.tsx +5 -5
  32. package/version-dropdown.module.scss +41 -5
  33. package/version-dropdown.spec.tsx +3 -3
  34. package/version-dropdown.tsx +144 -31
  35. package/version-info/index.ts +1 -0
  36. package/version-info/version-info.module.scss +44 -0
  37. package/version-info/version-info.tsx +43 -0
  38. package/package-tar/teambit-component.ui.version-dropdown-0.0.490.tgz +0 -0
@@ -0,0 +1,2 @@
1
+ export const compositions = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_ui_version-dropdown@0.0.493/dist/version-dropdown.composition.js')]
2
+ export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_ui_version-dropdown@0.0.493/dist/version-dropdown.docs.js')]
@@ -0,0 +1 @@
1
+ export { LaneInfo, LaneInfoProps } from './lane-info';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LaneInfo = void 0;
4
+ var lane_info_1 = require("./lane-info");
5
+ Object.defineProperty(exports, "LaneInfo", { enumerable: true, get: function () { return lane_info_1.LaneInfo; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lane-info/index.ts"],"names":[],"mappings":";;;AAAA,yCAAsD;AAA7C,qGAAA,QAAQ,OAAA"}
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ import { LaneModel } from '@teambit/lanes.ui.lanes';
3
+ export declare type LaneInfoProps = LaneModel & {
4
+ currentLane?: LaneModel;
5
+ };
6
+ export declare function LaneInfo({ id, url, currentLane }: LaneInfoProps): JSX.Element;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LaneInfo = void 0;
7
+ const classnames_1 = __importDefault(require("classnames"));
8
+ const react_1 = __importDefault(require("react"));
9
+ const base_ui_routing_nav_link_1 = require("@teambit/base-ui.routing.nav-link");
10
+ const evangelist_elements_icon_1 = require("@teambit/evangelist.elements.icon");
11
+ const lane_info_module_scss_1 = __importDefault(require("./lane-info.module.scss"));
12
+ function LaneInfo({ id, url, currentLane }) {
13
+ const isCurrent = (currentLane === null || currentLane === void 0 ? void 0 : currentLane.id) === id;
14
+ return (react_1.default.createElement("div", { key: id },
15
+ react_1.default.createElement(base_ui_routing_nav_link_1.NavLink, { href: url, className: (0, classnames_1.default)(lane_info_module_scss_1.default.versionLine, lane_info_module_scss_1.default.versionRow, isCurrent && lane_info_module_scss_1.default.currentVersion) },
16
+ react_1.default.createElement("span", null,
17
+ react_1.default.createElement(evangelist_elements_icon_1.Icon, { className: lane_info_module_scss_1.default.laneIcon, of: "lane" }),
18
+ id))));
19
+ }
20
+ exports.LaneInfo = LaneInfo;
21
+ //# sourceMappingURL=lane-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lane-info.js","sourceRoot":"","sources":["../../lane-info/lane-info.tsx"],"names":[],"mappings":";;;;;;AACA,4DAAoC;AACpC,kDAA0B;AAC1B,gFAA4D;AAC5D,gFAAyD;AACzD,oFAA6C;AAI7C,SAAgB,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAiB;IAC9D,MAAM,SAAS,GAAG,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,EAAE,MAAK,EAAE,CAAC;IAEzC,OAAO,CACL,uCAAK,GAAG,EAAE,EAAE;QACV,8BAAC,kCAAO,IACN,IAAI,EAAE,GAAG,EACT,SAAS,EAAE,IAAA,oBAAU,EAAC,+BAAM,CAAC,WAAW,EAAE,+BAAM,CAAC,UAAU,EAAE,SAAS,IAAI,+BAAM,CAAC,cAAc,CAAC;YAEhG;gBACE,8BAAC,+BAAI,IAAC,SAAS,EAAE,+BAAM,CAAC,QAAQ,EAAE,EAAE,EAAC,MAAM,GAAQ;gBAClD,EAAE,CACE,CACC,CACN,CACP,CAAC;AACJ,CAAC;AAhBD,4BAgBC"}
@@ -0,0 +1,30 @@
1
+ .versionLine {
2
+ cursor: pointer;
3
+ display: flex;
4
+ align-items: center;
5
+ height: 36px;
6
+ padding: 0 24px;
7
+ text-decoration: none;
8
+ color: var(--bit-text-color-heavy);
9
+ &:hover {
10
+ background-color: var(--bit-bg-heavy, #f6f6f6);
11
+ }
12
+ &:last-child {
13
+ margin-bottom: 8px;
14
+ }
15
+ &.currentVersion {
16
+ background: var(--bit-accent-bg, #eceaff);
17
+ }
18
+ .label {
19
+ background-color: white;
20
+ padding: 0px 8px;
21
+ }
22
+ }
23
+
24
+ .versionRow {
25
+ display: flex;
26
+ justify-content: space-between;
27
+ .laneIcon {
28
+ padding: 0px 4px;
29
+ }
30
+ }
@@ -1,2 +1,3 @@
1
- export declare const VersionDropdownWithOneVerion: () => JSX.Element;
2
- export declare const VersionDropdownWithMultipleVerions: () => JSX.Element;
1
+ /// <reference types="react" />
2
+ export declare const VersionDropdownWithOneVersion: () => JSX.Element;
3
+ export declare const VersionDropdownWithMultipleVersions: () => JSX.Element;
@@ -3,24 +3,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.VersionDropdownWithMultipleVerions = exports.VersionDropdownWithOneVerion = void 0;
6
+ exports.VersionDropdownWithMultipleVersions = exports.VersionDropdownWithOneVersion = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const react_router_dom_1 = require("react-router-dom");
9
9
  const history_1 = require("history");
10
10
  const documenter_theme_theme_compositions_1 = require("@teambit/documenter.theme.theme-compositions");
11
11
  const version_dropdown_1 = require("./version-dropdown");
12
12
  const style = { display: 'flex', justifyContent: 'center', alignContent: 'center' };
13
- const VersionDropdownWithOneVerion = () => {
13
+ const VersionDropdownWithOneVersion = () => {
14
14
  return (react_1.default.createElement(documenter_theme_theme_compositions_1.ThemeCompositions, { style: style },
15
- react_1.default.createElement(version_dropdown_1.VersionDropdown, { versions: ['0.1'], currentVersion: "0.1" })));
15
+ react_1.default.createElement(version_dropdown_1.VersionDropdown, { tags: [{ version: '0.1' }], currentVersion: "0.1" })));
16
16
  };
17
- exports.VersionDropdownWithOneVerion = VersionDropdownWithOneVerion;
18
- const VersionDropdownWithMultipleVerions = () => {
17
+ exports.VersionDropdownWithOneVersion = VersionDropdownWithOneVersion;
18
+ const VersionDropdownWithMultipleVersions = () => {
19
19
  const history = (0, history_1.createBrowserHistory)();
20
- const versions = ['0.3', '0.2', '0.1'];
20
+ const versions = ['0.3', '0.2', '0.1'].map((version) => ({ version }));
21
21
  return (react_1.default.createElement(documenter_theme_theme_compositions_1.ThemeCompositions, { style: style },
22
22
  react_1.default.createElement(react_router_dom_1.Router, { history: history },
23
- react_1.default.createElement(version_dropdown_1.VersionDropdown, { versions: versions, currentVersion: versions[0] }))));
23
+ react_1.default.createElement(version_dropdown_1.VersionDropdown, { tags: versions, currentVersion: versions[0].version }))));
24
24
  };
25
- exports.VersionDropdownWithMultipleVerions = VersionDropdownWithMultipleVerions;
25
+ exports.VersionDropdownWithMultipleVersions = VersionDropdownWithMultipleVersions;
26
26
  //# sourceMappingURL=version-dropdown.composition.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version-dropdown.composition.js","sourceRoot":"","sources":["../version-dropdown.composition.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,uDAA0C;AAC1C,qCAA+C;AAC/C,sGAAiF;AACjF,yDAAqD;AAErD,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AAE7E,MAAM,4BAA4B,GAAG,GAAG,EAAE;IAC/C,OAAO,CACL,8BAAC,uDAAiB,IAAC,KAAK,EAAE,KAAK;QAC7B,8BAAC,kCAAe,IAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,cAAc,EAAC,KAAK,GAAG,CACzC,CACrB,CAAC;AACJ,CAAC,CAAC;AANW,QAAA,4BAA4B,gCAMvC;AAEK,MAAM,kCAAkC,GAAG,GAAG,EAAE;IACrD,MAAM,OAAO,GAAG,IAAA,8BAAoB,GAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACvC,OAAO,CACL,8BAAC,uDAAiB,IAAC,KAAK,EAAE,KAAK;QAC7B,8BAAC,yBAAM,IAAC,OAAO,EAAE,OAAO;YACtB,8BAAC,kCAAe,IAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAI,CAC7D,CACS,CACrB,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,kCAAkC,sCAU7C"}
1
+ {"version":3,"file":"version-dropdown.composition.js","sourceRoot":"","sources":["../version-dropdown.composition.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,uDAA0C;AAC1C,qCAA+C;AAC/C,sGAAiF;AACjF,yDAAqD;AAErD,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AAE7E,MAAM,6BAA6B,GAAG,GAAG,EAAE;IAChD,OAAO,CACL,8BAAC,uDAAiB,IAAC,KAAK,EAAE,KAAK;QAC7B,8BAAC,kCAAe,IAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAC,KAAK,GAAG,CAClD,CACrB,CAAC;AACJ,CAAC,CAAC;AANW,QAAA,6BAA6B,iCAMxC;AAEK,MAAM,mCAAmC,GAAG,GAAG,EAAE;IACtD,MAAM,OAAO,GAAG,IAAA,8BAAoB,GAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACvE,OAAO,CACL,8BAAC,uDAAiB,IAAC,KAAK,EAAE,KAAK;QAC7B,8BAAC,yBAAM,IAAC,OAAO,EAAE,OAAO;YACtB,8BAAC,kCAAe,IAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAI,CACjE,CACS,CACrB,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,mCAAmC,uCAU9C"}
@@ -1,7 +1,18 @@
1
+ import { LegacyComponentLog } from '@teambit/legacy-component-log';
2
+ import { LaneModel } from '@teambit/lanes.ui.lanes';
1
3
  import React from 'react';
2
- declare type VersionDropdownProps = {
3
- versions: string[];
4
+ export declare const LOCAL_VERSION = "workspace";
5
+ export declare type DropdownComponentVersion = Partial<LegacyComponentLog> & {
6
+ version: string;
7
+ };
8
+ export declare type VersionDropdownProps = {
9
+ tags: DropdownComponentVersion[];
10
+ snaps?: DropdownComponentVersion[];
11
+ lanes?: LaneModel[];
12
+ localVersion?: boolean;
4
13
  currentVersion?: string;
14
+ currentLane?: LaneModel;
15
+ latestVersion?: string;
16
+ loading?: boolean;
5
17
  } & React.HTMLAttributes<HTMLDivElement>;
6
- export declare function VersionDropdown({ versions, currentVersion }: VersionDropdownProps): JSX.Element;
7
- export {};
18
+ export declare function VersionDropdown({ snaps, tags, lanes, currentVersion, latestVersion, localVersion, loading, currentLane, }: VersionDropdownProps): JSX.Element;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { Router } from 'react-router-dom';
2
3
  import { createBrowserHistory } from 'history';
3
4
  import { VersionDropdown } from './version-dropdown';
@@ -1,32 +1,63 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __rest = (this && this.__rest) || function (s, e) {
22
+ var t = {};
23
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
24
+ t[p] = s[p];
25
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
26
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
27
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
28
+ t[p[i]] = s[p[i]];
29
+ }
30
+ return t;
31
+ };
2
32
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
33
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
34
  };
5
35
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.VersionDropdown = void 0;
36
+ exports.VersionDropdown = exports.LOCAL_VERSION = void 0;
7
37
  const evangelist_elements_icon_1 = require("@teambit/evangelist.elements.icon");
8
- const react_router_dom_1 = require("react-router-dom");
38
+ const base_ui_routing_nav_link_1 = require("@teambit/base-ui.routing.nav-link");
9
39
  const evangelist_surfaces_dropdown_1 = require("@teambit/evangelist.surfaces.dropdown");
10
- const component_ui_version_label_1 = require("@teambit/component.ui.version-label");
11
40
  const design_ui_styles_ellipsis_1 = require("@teambit/design.ui.styles.ellipsis");
41
+ const ui_foundation_ui_use_box_tab_1 = require("@teambit/ui-foundation.ui.use-box.tab");
42
+ const design_ui_avatar_1 = require("@teambit/design.ui.avatar");
43
+ const base_ui_loaders_skeleton_1 = require("@teambit/base-ui.loaders.skeleton");
12
44
  const classnames_1 = __importDefault(require("classnames"));
13
- const react_1 = __importDefault(require("react"));
45
+ const react_1 = __importStar(require("react"));
14
46
  const version_dropdown_module_scss_1 = __importDefault(require("./version-dropdown.module.scss"));
15
- function VersionDropdown({ versions, currentVersion }) {
16
- if (versions.length < 2) {
47
+ const version_info_1 = require("./version-info");
48
+ const lane_info_1 = require("./lane-info");
49
+ exports.LOCAL_VERSION = 'workspace';
50
+ function VersionDropdown({ snaps, tags, lanes, currentVersion, latestVersion, localVersion, loading, currentLane, }) {
51
+ const [key, setKey] = (0, react_1.useState)(0);
52
+ const singleVersion = (snaps || []).concat(tags).length < 2;
53
+ if (singleVersion && !loading) {
17
54
  return (react_1.default.createElement("div", { className: version_dropdown_module_scss_1.default.noVersions },
18
55
  react_1.default.createElement(VersionPlaceholder, { currentVersion: currentVersion })));
19
56
  }
20
57
  return (react_1.default.createElement("div", { className: version_dropdown_module_scss_1.default.versionDropdown },
21
- react_1.default.createElement(evangelist_surfaces_dropdown_1.Dropdown, { className: version_dropdown_module_scss_1.default.dropdown, dropClass: version_dropdown_module_scss_1.default.menu, placeholder: "", clickOutside: true, PlaceholderComponent: () => (react_1.default.createElement(VersionPlaceholder, { currentVersion: currentVersion, className: version_dropdown_module_scss_1.default.withVersions })) },
22
- react_1.default.createElement("div", null,
23
- react_1.default.createElement("div", { className: version_dropdown_module_scss_1.default.title }, "Select version to view"),
24
- react_1.default.createElement("div", { className: version_dropdown_module_scss_1.default.versionContainer }, versions.map((version, index) => {
25
- const isCurrent = version === currentVersion;
26
- return (react_1.default.createElement(react_router_dom_1.NavLink, { to: `?version=${version}`, key: index, className: (0, classnames_1.default)(version_dropdown_module_scss_1.default.versionLine, isCurrent && version_dropdown_module_scss_1.default.currentVersion) },
27
- react_1.default.createElement("span", { className: version_dropdown_module_scss_1.default.version }, version),
28
- index === 0 && react_1.default.createElement(component_ui_version_label_1.VersionLabel, { className: version_dropdown_module_scss_1.default.label, status: "latest" })));
29
- }))))));
58
+ react_1.default.createElement(evangelist_surfaces_dropdown_1.Dropdown, { className: version_dropdown_module_scss_1.default.dropdown, dropClass: version_dropdown_module_scss_1.default.menu, clickToggles: false, clickPlaceholderToggles: true, onChange: (_e, open) => open && setKey((x) => x + 1), placeholder: react_1.default.createElement(VersionPlaceholder, { currentVersion: currentVersion, className: version_dropdown_module_scss_1.default.withVersions }) },
59
+ loading && react_1.default.createElement(base_ui_loaders_skeleton_1.LineSkeleton, { className: version_dropdown_module_scss_1.default.loading, count: 6 }),
60
+ loading || (react_1.default.createElement(VersionMenu, { key: key, tags: tags, snaps: snaps, lanes: lanes, currentVersion: currentVersion, latestVersion: latestVersion, localVersion: localVersion, currentLane: currentLane })))));
30
61
  }
31
62
  exports.VersionDropdown = VersionDropdown;
32
63
  function VersionPlaceholder({ currentVersion, className }) {
@@ -34,4 +65,35 @@ function VersionPlaceholder({ currentVersion, className }) {
34
65
  react_1.default.createElement(design_ui_styles_ellipsis_1.Ellipsis, null, currentVersion),
35
66
  react_1.default.createElement(evangelist_elements_icon_1.Icon, { of: "fat-arrow-down" })));
36
67
  }
68
+ const VERSION_TAB_NAMES = ['TAG', 'SNAP', 'LANE'];
69
+ function VersionMenu(_a) {
70
+ var { tags, snaps, lanes, currentVersion, localVersion, latestVersion, currentLane } = _a, rest = __rest(_a, ["tags", "snaps", "lanes", "currentVersion", "localVersion", "latestVersion", "currentLane"]);
71
+ const [activeTabIndex, setActiveTab] = (0, react_1.useState)(0);
72
+ const tabs = VERSION_TAB_NAMES.map((name) => {
73
+ switch (name) {
74
+ case 'SNAP':
75
+ return { name, payload: snaps || [] };
76
+ case 'LANE':
77
+ return { name, payload: lanes || [] };
78
+ default:
79
+ return { name, payload: tags || [] };
80
+ }
81
+ }).filter((tab) => tab.payload.length > 0);
82
+ return (react_1.default.createElement("div", Object.assign({}, rest),
83
+ react_1.default.createElement("div", { className: version_dropdown_module_scss_1.default.top },
84
+ react_1.default.createElement("div", { className: version_dropdown_module_scss_1.default.title },
85
+ react_1.default.createElement("span", null, "Switch to view tags, snaps, or lanes")),
86
+ localVersion && (react_1.default.createElement(base_ui_routing_nav_link_1.NavLink, { href: '?', className: (0, classnames_1.default)(version_dropdown_module_scss_1.default.versionLine, version_dropdown_module_scss_1.default.versionRow, currentVersion === exports.LOCAL_VERSION && version_dropdown_module_scss_1.default.currentVersion) },
87
+ react_1.default.createElement("div", { className: version_dropdown_module_scss_1.default.version },
88
+ react_1.default.createElement(design_ui_avatar_1.UserAvatar, { size: 20, account: {}, className: version_dropdown_module_scss_1.default.versionUserAvatar }),
89
+ react_1.default.createElement("span", { className: version_dropdown_module_scss_1.default.versionName }, exports.LOCAL_VERSION))))),
90
+ react_1.default.createElement("div", { className: version_dropdown_module_scss_1.default.tabs }, tabs.map(({ name }, index) => {
91
+ return (react_1.default.createElement(ui_foundation_ui_use_box_tab_1.Tab, { className: version_dropdown_module_scss_1.default.tab, key: name, isActive: activeTabIndex === index, onClick: () => setActiveTab(index) }, name));
92
+ })),
93
+ react_1.default.createElement("div", { className: version_dropdown_module_scss_1.default.versionContainer },
94
+ tabs[activeTabIndex].name === 'LANE' &&
95
+ tabs[activeTabIndex].payload.map((payload) => (react_1.default.createElement(lane_info_1.LaneInfo, Object.assign({ key: payload.id, currentLane: currentLane }, payload)))),
96
+ tabs[activeTabIndex].name !== 'LANE' &&
97
+ tabs[activeTabIndex].payload.map((payload) => (react_1.default.createElement(version_info_1.VersionInfo, Object.assign({ key: payload.hash, currentVersion: currentVersion, latestVersion: latestVersion }, payload)))))));
98
+ }
37
99
  //# sourceMappingURL=version-dropdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version-dropdown.js","sourceRoot":"","sources":["../version-dropdown.tsx"],"names":[],"mappings":";;;;;;AAAA,gFAAyD;AACzD,uDAA2C;AAC3C,wFAAiE;AACjE,oFAAmE;AACnE,kFAA8D;AAC9D,4DAAoC;AACpC,kDAA0B;AAE1B,kGAAoD;AAOpD,SAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAwB;IAChF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;QACvB,OAAO,CACL,uCAAK,SAAS,EAAE,sCAAM,CAAC,UAAU;YAC/B,8BAAC,kBAAkB,IAAC,cAAc,EAAE,cAAc,GAAI,CAClD,CACP,CAAC;KACH;IACD,OAAO,CACL,uCAAK,SAAS,EAAE,sCAAM,CAAC,eAAe;QACpC,8BAAC,uCAAQ,IACP,SAAS,EAAE,sCAAM,CAAC,QAAQ,EAC1B,SAAS,EAAE,sCAAM,CAAC,IAAI,EACtB,WAAW,EAAC,EAAE,EACd,YAAY,QACZ,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAC1B,8BAAC,kBAAkB,IAAC,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,sCAAM,CAAC,YAAY,GAAI,CACvF;YAED;gBACE,uCAAK,SAAS,EAAE,sCAAM,CAAC,KAAK,6BAA8B;gBAC1D,uCAAK,SAAS,EAAE,sCAAM,CAAC,gBAAgB,IACpC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;oBAC/B,MAAM,SAAS,GAAG,OAAO,KAAK,cAAc,CAAC;oBAC7C,OAAO,CACL,8BAAC,0BAAO,IACN,EAAE,EAAE,YAAY,OAAO,EAAE,EACzB,GAAG,EAAE,KAAK,EACV,SAAS,EAAE,IAAA,oBAAU,EAAC,sCAAM,CAAC,WAAW,EAAE,SAAS,IAAI,sCAAM,CAAC,cAAc,CAAC;wBAE7E,wCAAM,SAAS,EAAE,sCAAM,CAAC,OAAO,IAAG,OAAO,CAAQ;wBAChD,KAAK,KAAK,CAAC,IAAI,8BAAC,yCAAY,IAAC,SAAS,EAAE,sCAAM,CAAC,KAAK,EAAE,MAAM,EAAC,QAAQ,GAAG,CAEjE,CACX,CAAC;gBACJ,CAAC,CAAC,CACE,CACF,CACG,CACP,CACP,CAAC;AACJ,CAAC;AAzCD,0CAyCC;AAED,SAAS,kBAAkB,CAAC,EAAE,cAAc,EAAE,SAAS,EAAmD;IACxG,OAAO,CACL,uCAAK,SAAS,EAAE,IAAA,oBAAU,EAAC,sCAAM,CAAC,WAAW,EAAE,SAAS,CAAC;QACvD,8BAAC,oCAAQ,QAAE,cAAc,CAAY;QACrC,8BAAC,+BAAI,IAAC,EAAE,EAAC,gBAAgB,GAAG,CACxB,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"version-dropdown.js","sourceRoot":"","sources":["../version-dropdown.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gFAAyD;AACzD,gFAA4D;AAC5D,wFAAiE;AAEjE,kFAA8D;AAC9D,wFAA4D;AAE5D,gEAAuD;AACvD,gFAAiE;AAEjE,4DAAoC;AACpC,+CAAwC;AAExC,kGAAoD;AACpD,iDAA6C;AAC7C,2CAAuC;AAE1B,QAAA,aAAa,GAAG,WAAW,CAAC;AAezC,SAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,IAAI,EACJ,KAAK,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,OAAO,EACP,WAAW,GACU;IACrB,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;IAElC,MAAM,aAAa,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAE5D,IAAI,aAAa,IAAI,CAAC,OAAO,EAAE;QAC7B,OAAO,CACL,uCAAK,SAAS,EAAE,sCAAM,CAAC,UAAU;YAC/B,8BAAC,kBAAkB,IAAC,cAAc,EAAE,cAAc,GAAI,CAClD,CACP,CAAC;KACH;IAED,OAAO,CACL,uCAAK,SAAS,EAAE,sCAAM,CAAC,eAAe;QACpC,8BAAC,uCAAQ,IACP,SAAS,EAAE,sCAAM,CAAC,QAAQ,EAC1B,SAAS,EAAE,sCAAM,CAAC,IAAI,EACtB,YAAY,EAAE,KAAK,EACnB,uBAAuB,EAAE,IAAI,EAC7B,QAAQ,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EACpD,WAAW,EAAE,8BAAC,kBAAkB,IAAC,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,sCAAM,CAAC,YAAY,GAAI;YAElG,OAAO,IAAI,8BAAC,uCAAY,IAAC,SAAS,EAAE,sCAAM,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,GAAI;YAChE,OAAO,IAAI,CACV,8BAAC,WAAW,IACV,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,GACxB,CACH,CACQ,CACP,CACP,CAAC;AACJ,CAAC;AAhDD,0CAgDC;AAED,SAAS,kBAAkB,CAAC,EAAE,cAAc,EAAE,SAAS,EAAmD;IACxG,OAAO,CACL,uCAAK,SAAS,EAAE,IAAA,oBAAU,EAAC,sCAAM,CAAC,WAAW,EAAE,SAAS,CAAC;QACvD,8BAAC,oCAAQ,QAAE,cAAc,CAAY;QACrC,8BAAC,+BAAI,IAAC,EAAE,EAAC,gBAAgB,GAAG,CACxB,CACP,CAAC;AACJ,CAAC;AAWD,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAE3D,SAAS,WAAW,CAAC,EASF;QATE,EACnB,IAAI,EACJ,KAAK,EACL,KAAK,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,WAAW,OAEM,EADd,IAAI,cARY,4FASpB,CADQ;IAEP,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAS,CAAC,CAAC,CAAC;IAE3D,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1C,QAAQ,IAAI,EAAE;YACZ,KAAK,MAAM;gBACT,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;YACxC,KAAK,MAAM;gBACT,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;YACxC;gBACE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;SACxC;IACH,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE3C,OAAO,CACL,uDAAS,IAAI;QACX,uCAAK,SAAS,EAAE,sCAAM,CAAC,GAAG;YACxB,uCAAK,SAAS,EAAE,sCAAM,CAAC,KAAK;gBAC1B,mFAAiD,CAC7C;YACL,YAAY,IAAI,CACf,8BAAC,kCAAO,IACN,IAAI,EAAE,GAAG,EACT,SAAS,EAAE,IAAA,oBAAU,EACnB,sCAAM,CAAC,WAAW,EAClB,sCAAM,CAAC,UAAU,EACjB,cAAc,KAAK,qBAAa,IAAI,sCAAM,CAAC,cAAc,CAC1D;gBAED,uCAAK,SAAS,EAAE,sCAAM,CAAC,OAAO;oBAC5B,8BAAC,6BAAU,IAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,sCAAM,CAAC,iBAAiB,GAAI;oBAC1E,wCAAM,SAAS,EAAE,sCAAM,CAAC,WAAW,IAAG,qBAAa,CAAQ,CACvD,CACE,CACX,CACG;QACN,uCAAK,SAAS,EAAE,sCAAM,CAAC,IAAI,IACxB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE;YAC5B,OAAO,CACL,8BAAC,kCAAG,IACF,SAAS,EAAE,sCAAM,CAAC,GAAG,EACrB,GAAG,EAAE,IAAI,EACT,QAAQ,EAAE,cAAc,KAAK,KAAK,EAClC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAEjC,IAAI,CACD,CACP,CAAC;QACJ,CAAC,CAAC,CACE;QACN,uCAAK,SAAS,EAAE,sCAAM,CAAC,gBAAgB;YACpC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,KAAK,MAAM;gBACnC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAC5C,8BAAC,oBAAQ,kBAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,WAAW,IAAM,OAAO,EAAa,CAC9E,CAAC;YACH,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,KAAK,MAAM;gBACnC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAC5C,8BAAC,0BAAW,kBACV,GAAG,EAAE,OAAO,CAAC,IAAI,EACjB,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,IACxB,OAAO,EACE,CAChB,CAAC,CACA,CACF,CACP,CAAC;AACJ,CAAC"}
@@ -6,7 +6,7 @@
6
6
  align-items: center;
7
7
  }
8
8
  .menu {
9
- width: 300px;
9
+ width: 350px;
10
10
  padding: 0;
11
11
  right: 0;
12
12
  // top: 43px;
@@ -43,12 +43,9 @@
43
43
  &.currentVersion {
44
44
  background: var(--bit-accent-bg, #eceaff);
45
45
  }
46
- .version {
47
- margin-right: 16px;
48
- }
49
46
  .label {
50
47
  background-color: white;
51
- margin-right: 8px;
48
+ padding: 0px 8px;
52
49
  }
53
50
  }
54
51
 
@@ -90,3 +87,42 @@
90
87
  }
91
88
  }
92
89
  }
90
+
91
+ .tabs {
92
+ display: flex;
93
+ padding: 0 24px;
94
+ line-height: 14px;
95
+ border-bottom: 1px solid var(--bit-border-color-lightest, #ededed);
96
+ overflow-x: auto;
97
+ .tab {
98
+ font-weight: bold;
99
+ padding-top: 4px;
100
+ font-size: 12px;
101
+ }
102
+ }
103
+ .versionRow {
104
+ display: flex;
105
+ justify-content: space-between;
106
+
107
+ .versionTimestamp {
108
+ margin-right: 2px;
109
+ }
110
+ .versionUserAvatar {
111
+ padding: 0px 8px;
112
+ }
113
+ .laneIcon {
114
+ padding: 0px 4px;
115
+ }
116
+ .version {
117
+ width: 60%;
118
+ display: flex;
119
+ flex-direction: row;
120
+ align-content: space-between;
121
+ }
122
+ .versionName {
123
+ padding: 0px 8px;
124
+ }
125
+ }
126
+ .loading {
127
+ color: var(--bit-bg-heavy, #f6f6f6);
128
+ }
@@ -8,12 +8,12 @@ const react_2 = require("@testing-library/react");
8
8
  const chai_1 = require("chai");
9
9
  const version_dropdown_composition_1 = require("./version-dropdown.composition");
10
10
  it('should render one version', () => {
11
- const { getByText } = (0, react_2.render)(react_1.default.createElement(version_dropdown_composition_1.VersionDropdownWithOneVerion, null));
11
+ const { getByText } = (0, react_2.render)(react_1.default.createElement(version_dropdown_composition_1.VersionDropdownWithOneVersion, null));
12
12
  const textVersion = getByText(/^0.1$/);
13
13
  (0, chai_1.expect)(textVersion).to.exist;
14
14
  });
15
15
  it('should return multiple versions', () => {
16
- const { getByText, getAllByText } = (0, react_2.render)(react_1.default.createElement(version_dropdown_composition_1.VersionDropdownWithMultipleVerions, null));
16
+ const { getByText, getAllByText } = (0, react_2.render)(react_1.default.createElement(version_dropdown_composition_1.VersionDropdownWithMultipleVersions, null));
17
17
  const textVersionOne = getByText(/^0.1$/);
18
18
  const textVersionTwo = getByText(/^0.2$/);
19
19
  const textVersionThree = getAllByText(/^0.3$/);
@@ -1 +1 @@
1
- {"version":3,"file":"version-dropdown.spec.js","sourceRoot":"","sources":["../version-dropdown.spec.tsx"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,kDAAgD;AAChD,+BAA8B;AAC9B,iFAAkH;AAElH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACnC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAAC,8BAAC,2DAA4B,OAAG,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACvC,IAAA,aAAM,EAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;AAC/B,CAAC,CAAC,CAAC;AACH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;IACzC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,IAAA,cAAM,EAAC,8BAAC,iEAAkC,OAAG,CAAC,CAAC;IACnF,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAA,aAAM,EAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAChC,IAAA,aAAM,EAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAChC,IAAA,aAAM,EAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"version-dropdown.spec.js","sourceRoot":"","sources":["../version-dropdown.spec.tsx"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,kDAAgD;AAChD,+BAA8B;AAC9B,iFAAoH;AAEpH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACnC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAM,EAAC,8BAAC,4DAA6B,OAAG,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACvC,IAAA,aAAM,EAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;AAC/B,CAAC,CAAC,CAAC;AACH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;IACzC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,IAAA,cAAM,EAAC,8BAAC,kEAAmC,OAAG,CAAC,CAAC;IACpF,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAA,aAAM,EAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAChC,IAAA,aAAM,EAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAChC,IAAA,aAAM,EAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export { VersionInfo, VersionInfoProps } from './version-info';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VersionInfo = void 0;
4
+ var version_info_1 = require("./version-info");
5
+ Object.defineProperty(exports, "VersionInfo", { enumerable: true, get: function () { return version_info_1.VersionInfo; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../version-info/index.ts"],"names":[],"mappings":";;;AAAA,+CAA+D;AAAtD,2GAAA,WAAW,OAAA"}
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { DropdownComponentVersion } from '../version-dropdown';
3
+ export declare type VersionInfoProps = DropdownComponentVersion & {
4
+ currentVersion?: string;
5
+ latestVersion?: string;
6
+ };
7
+ export declare function VersionInfo({ version, currentVersion, latestVersion, date, username, email }: VersionInfoProps): JSX.Element;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.VersionInfo = void 0;
26
+ const base_ui_routing_nav_link_1 = require("@teambit/base-ui.routing.nav-link");
27
+ const design_ui_time_ago_1 = require("@teambit/design.ui.time-ago");
28
+ const component_ui_version_label_1 = require("@teambit/component.ui.version-label");
29
+ const react_1 = __importStar(require("react"));
30
+ const classnames_1 = __importDefault(require("classnames"));
31
+ const design_ui_avatar_1 = require("@teambit/design.ui.avatar");
32
+ const design_ui_styles_ellipsis_1 = require("@teambit/design.ui.styles.ellipsis");
33
+ const version_dropdown_1 = require("../version-dropdown");
34
+ const version_info_module_scss_1 = __importDefault(require("./version-info.module.scss"));
35
+ function VersionInfo({ version, currentVersion, latestVersion, date, username, email }) {
36
+ const isCurrent = version === currentVersion;
37
+ const author = (0, react_1.useMemo)(() => {
38
+ return {
39
+ displayName: username,
40
+ email,
41
+ };
42
+ }, [version]);
43
+ const timestamp = (0, react_1.useMemo)(() => (date ? new Date(parseInt(date)).toString() : new Date().toString()), [date]);
44
+ return (react_1.default.createElement("div", { key: version },
45
+ react_1.default.createElement(base_ui_routing_nav_link_1.NavLink, { href: version === version_dropdown_1.LOCAL_VERSION ? '?' : `?version=${version}`, className: (0, classnames_1.default)(version_info_module_scss_1.default.versionLine, version_info_module_scss_1.default.versionRow, isCurrent && version_info_module_scss_1.default.currentVersion) },
46
+ react_1.default.createElement("div", { className: version_info_module_scss_1.default.version },
47
+ react_1.default.createElement(design_ui_avatar_1.UserAvatar, { size: 20, account: author, className: version_info_module_scss_1.default.versionUserAvatar }),
48
+ react_1.default.createElement(design_ui_styles_ellipsis_1.Ellipsis, { className: version_info_module_scss_1.default.versionName }, version),
49
+ version === latestVersion && react_1.default.createElement(component_ui_version_label_1.VersionLabel, { className: version_info_module_scss_1.default.label, status: "latest" })),
50
+ react_1.default.createElement(design_ui_time_ago_1.TimeAgo, { className: version_info_module_scss_1.default.versionTimestamp, date: timestamp }))));
51
+ }
52
+ exports.VersionInfo = VersionInfo;
53
+ //# sourceMappingURL=version-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-info.js","sourceRoot":"","sources":["../../version-info/version-info.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gFAA4D;AAC5D,oEAAsD;AACtD,oFAAmE;AACnE,+CAAuC;AACvC,4DAAoC;AACpC,gEAAuD;AACvD,kFAA8D;AAE9D,0DAA8E;AAC9E,0FAAgD;AAOhD,SAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAoB;IAC7G,MAAM,SAAS,GAAG,OAAO,KAAK,cAAc,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC1B,OAAO;YACL,WAAW,EAAE,QAAQ;YACrB,KAAK;SACN,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,SAAS,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9G,OAAO,CACL,uCAAK,GAAG,EAAE,OAAO;QACf,8BAAC,kCAAO,IACN,IAAI,EAAE,OAAO,KAAK,gCAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,OAAO,EAAE,EAC7D,SAAS,EAAE,IAAA,oBAAU,EAAC,kCAAM,CAAC,WAAW,EAAE,kCAAM,CAAC,UAAU,EAAE,SAAS,IAAI,kCAAM,CAAC,cAAc,CAAC;YAEhG,uCAAK,SAAS,EAAE,kCAAM,CAAC,OAAO;gBAC5B,8BAAC,6BAAU,IAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,kCAAM,CAAC,iBAAiB,GAAI;gBAC9E,8BAAC,oCAAQ,IAAC,SAAS,EAAE,kCAAM,CAAC,WAAW,IAAG,OAAO,CAAY;gBAC5D,OAAO,KAAK,aAAa,IAAI,8BAAC,yCAAY,IAAC,SAAS,EAAE,kCAAM,CAAC,KAAK,EAAE,MAAM,EAAC,QAAQ,GAAG,CACnF;YACN,8BAAC,4BAAO,IAAC,SAAS,EAAE,kCAAM,CAAC,gBAAgB,EAAE,IAAI,EAAE,SAAS,GAAI,CACxD,CACN,CACP,CAAC;AACJ,CAAC;AA1BD,kCA0BC"}
@@ -0,0 +1,44 @@
1
+ .versionRow {
2
+ display: flex;
3
+ justify-content: space-between;
4
+
5
+ .versionTimestamp {
6
+ margin-right: 2px;
7
+ }
8
+ .versionUserAvatar {
9
+ padding: 0px 8px;
10
+ }
11
+ .version {
12
+ width: 60%;
13
+ display: flex;
14
+ flex-direction: row;
15
+ align-content: space-between;
16
+ }
17
+ .versionName {
18
+ padding: 0px 8px;
19
+ align-self: center;
20
+ line-height: 14px;
21
+ }
22
+ }
23
+ .versionLine {
24
+ cursor: pointer;
25
+ display: flex;
26
+ align-items: center;
27
+ height: 36px;
28
+ padding: 0 24px;
29
+ text-decoration: none;
30
+ color: var(--bit-text-color-heavy);
31
+ &:hover {
32
+ background-color: var(--bit-bg-heavy, #f6f6f6);
33
+ }
34
+ &:last-child {
35
+ margin-bottom: 8px;
36
+ }
37
+ &.currentVersion {
38
+ background: var(--bit-accent-bg, #eceaff);
39
+ }
40
+ .label {
41
+ background-color: white;
42
+ padding: 0px 8px;
43
+ }
44
+ }
@@ -0,0 +1 @@
1
+ export { LaneInfo, LaneInfoProps } from './lane-info';
@@ -0,0 +1,30 @@
1
+ .versionLine {
2
+ cursor: pointer;
3
+ display: flex;
4
+ align-items: center;
5
+ height: 36px;
6
+ padding: 0 24px;
7
+ text-decoration: none;
8
+ color: var(--bit-text-color-heavy);
9
+ &:hover {
10
+ background-color: var(--bit-bg-heavy, #f6f6f6);
11
+ }
12
+ &:last-child {
13
+ margin-bottom: 8px;
14
+ }
15
+ &.currentVersion {
16
+ background: var(--bit-accent-bg, #eceaff);
17
+ }
18
+ .label {
19
+ background-color: white;
20
+ padding: 0px 8px;
21
+ }
22
+ }
23
+
24
+ .versionRow {
25
+ display: flex;
26
+ justify-content: space-between;
27
+ .laneIcon {
28
+ padding: 0px 4px;
29
+ }
30
+ }
@@ -0,0 +1,26 @@
1
+ import { LaneModel } from '@teambit/lanes.ui.lanes';
2
+ import classNames from 'classnames';
3
+ import React from 'react';
4
+ import { NavLink } from '@teambit/base-ui.routing.nav-link';
5
+ import { Icon } from '@teambit/evangelist.elements.icon';
6
+ import styles from './lane-info.module.scss';
7
+
8
+ export type LaneInfoProps = LaneModel & { currentLane?: LaneModel };
9
+
10
+ export function LaneInfo({ id, url, currentLane }: LaneInfoProps) {
11
+ const isCurrent = currentLane?.id === id;
12
+
13
+ return (
14
+ <div key={id}>
15
+ <NavLink
16
+ href={url}
17
+ className={classNames(styles.versionLine, styles.versionRow, isCurrent && styles.currentVersion)}
18
+ >
19
+ <span>
20
+ <Icon className={styles.laneIcon} of="lane"></Icon>
21
+ {id}
22
+ </span>
23
+ </NavLink>
24
+ </div>
25
+ );
26
+ }
package/package.json CHANGED
@@ -1,24 +1,31 @@
1
1
  {
2
2
  "name": "@teambit/component.ui.version-dropdown",
3
- "version": "0.0.490",
3
+ "version": "0.0.493",
4
4
  "homepage": "https://bit.dev/teambit/component/ui/version-dropdown",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.component",
8
8
  "name": "ui/version-dropdown",
9
- "version": "0.0.490"
9
+ "version": "0.0.493"
10
10
  },
11
11
  "dependencies": {
12
12
  "classnames": "2.2.6",
13
- "react-router-dom": "5.2.0",
14
13
  "core-js": "^3.0.0",
14
+ "@teambit/base-ui.loaders.skeleton": "1.0.1",
15
+ "@teambit/base-ui.routing.nav-link": "1.0.0",
15
16
  "@teambit/evangelist.elements.icon": "1.0.2",
16
17
  "@teambit/evangelist.surfaces.dropdown": "1.0.2",
17
- "@teambit/component.ui.version-label": "0.0.490",
18
- "@teambit/design.ui.styles.ellipsis": "0.0.347"
18
+ "@teambit/design.ui.avatar": "0.0.494",
19
+ "@teambit/design.ui.styles.ellipsis": "0.0.347",
20
+ "@teambit/lanes.ui.lanes": "0.0.9",
21
+ "@teambit/legacy-component-log": "0.0.391",
22
+ "@teambit/ui-foundation.ui.use-box.tab": "0.0.105",
23
+ "@teambit/component.ui.version-label": "0.0.491",
24
+ "@teambit/design.ui.time-ago": "0.0.351"
19
25
  },
20
26
  "devDependencies": {
21
27
  "history": "4.10.1",
28
+ "react-router-dom": "5.2.0",
22
29
  "@types/history": "4.7.8",
23
30
  "@types/react-router-dom": "5.1.7",
24
31
  "@types/react": "^17.0.8",
@@ -26,7 +33,7 @@
26
33
  "chai": "4.3.0",
27
34
  "@types/chai": "4.2.15",
28
35
  "@types/classnames": "2.2.11",
29
- "@types/mocha": "5.2.7",
36
+ "@types/mocha": "9.1.0",
30
37
  "@types/testing-library__jest-dom": "5.9.5",
31
38
  "@babel/runtime": "7.12.18",
32
39
  "@types/jest": "^26.0.0",
@@ -53,7 +60,7 @@
53
60
  },
54
61
  "devDependencies": {
55
62
  "@teambit/legacy": "-",
56
- "@types/mocha": "5.2.7",
63
+ "@types/mocha": "9.1.0",
57
64
  "@types/testing-library__jest-dom": "5.9.5",
58
65
  "@babel/runtime": "7.12.18",
59
66
  "@types/jest": "^26.0.0",
@@ -6,21 +6,21 @@ import { VersionDropdown } from './version-dropdown';
6
6
 
7
7
  const style = { display: 'flex', justifyContent: 'center', alignContent: 'center' };
8
8
 
9
- export const VersionDropdownWithOneVerion = () => {
9
+ export const VersionDropdownWithOneVersion = () => {
10
10
  return (
11
11
  <ThemeCompositions style={style}>
12
- <VersionDropdown versions={['0.1']} currentVersion="0.1" />
12
+ <VersionDropdown tags={[{ version: '0.1' }]} currentVersion="0.1" />
13
13
  </ThemeCompositions>
14
14
  );
15
15
  };
16
16
 
17
- export const VersionDropdownWithMultipleVerions = () => {
17
+ export const VersionDropdownWithMultipleVersions = () => {
18
18
  const history = createBrowserHistory();
19
- const versions = ['0.3', '0.2', '0.1'];
19
+ const versions = ['0.3', '0.2', '0.1'].map((version) => ({ version }));
20
20
  return (
21
21
  <ThemeCompositions style={style}>
22
22
  <Router history={history}>
23
- <VersionDropdown versions={versions} currentVersion={versions[0]} />
23
+ <VersionDropdown tags={versions} currentVersion={versions[0].version} />
24
24
  </Router>
25
25
  </ThemeCompositions>
26
26
  );
@@ -6,7 +6,7 @@
6
6
  align-items: center;
7
7
  }
8
8
  .menu {
9
- width: 300px;
9
+ width: 350px;
10
10
  padding: 0;
11
11
  right: 0;
12
12
  // top: 43px;
@@ -43,12 +43,9 @@
43
43
  &.currentVersion {
44
44
  background: var(--bit-accent-bg, #eceaff);
45
45
  }
46
- .version {
47
- margin-right: 16px;
48
- }
49
46
  .label {
50
47
  background-color: white;
51
- margin-right: 8px;
48
+ padding: 0px 8px;
52
49
  }
53
50
  }
54
51
 
@@ -90,3 +87,42 @@
90
87
  }
91
88
  }
92
89
  }
90
+
91
+ .tabs {
92
+ display: flex;
93
+ padding: 0 24px;
94
+ line-height: 14px;
95
+ border-bottom: 1px solid var(--bit-border-color-lightest, #ededed);
96
+ overflow-x: auto;
97
+ .tab {
98
+ font-weight: bold;
99
+ padding-top: 4px;
100
+ font-size: 12px;
101
+ }
102
+ }
103
+ .versionRow {
104
+ display: flex;
105
+ justify-content: space-between;
106
+
107
+ .versionTimestamp {
108
+ margin-right: 2px;
109
+ }
110
+ .versionUserAvatar {
111
+ padding: 0px 8px;
112
+ }
113
+ .laneIcon {
114
+ padding: 0px 4px;
115
+ }
116
+ .version {
117
+ width: 60%;
118
+ display: flex;
119
+ flex-direction: row;
120
+ align-content: space-between;
121
+ }
122
+ .versionName {
123
+ padding: 0px 8px;
124
+ }
125
+ }
126
+ .loading {
127
+ color: var(--bit-bg-heavy, #f6f6f6);
128
+ }
@@ -1,15 +1,15 @@
1
1
  import React from 'react';
2
2
  import { render } from '@testing-library/react';
3
3
  import { expect } from 'chai';
4
- import { VersionDropdownWithOneVerion, VersionDropdownWithMultipleVerions } from './version-dropdown.composition';
4
+ import { VersionDropdownWithOneVersion, VersionDropdownWithMultipleVersions } from './version-dropdown.composition';
5
5
 
6
6
  it('should render one version', () => {
7
- const { getByText } = render(<VersionDropdownWithOneVerion />);
7
+ const { getByText } = render(<VersionDropdownWithOneVersion />);
8
8
  const textVersion = getByText(/^0.1$/);
9
9
  expect(textVersion).to.exist;
10
10
  });
11
11
  it('should return multiple versions', () => {
12
- const { getByText, getAllByText } = render(<VersionDropdownWithMultipleVerions />);
12
+ const { getByText, getAllByText } = render(<VersionDropdownWithMultipleVersions />);
13
13
  const textVersionOne = getByText(/^0.1$/);
14
14
  const textVersionTwo = getByText(/^0.2$/);
15
15
  const textVersionThree = getAllByText(/^0.3$/);
@@ -1,56 +1,80 @@
1
1
  import { Icon } from '@teambit/evangelist.elements.icon';
2
- import { NavLink } from 'react-router-dom';
2
+ import { NavLink } from '@teambit/base-ui.routing.nav-link';
3
3
  import { Dropdown } from '@teambit/evangelist.surfaces.dropdown';
4
- import { VersionLabel } from '@teambit/component.ui.version-label';
4
+
5
5
  import { Ellipsis } from '@teambit/design.ui.styles.ellipsis';
6
+ import { Tab } from '@teambit/ui-foundation.ui.use-box.tab';
7
+ import { LegacyComponentLog } from '@teambit/legacy-component-log';
8
+ import { UserAvatar } from '@teambit/design.ui.avatar';
9
+ import { LineSkeleton } from '@teambit/base-ui.loaders.skeleton';
10
+ import { LaneModel } from '@teambit/lanes.ui.lanes';
6
11
  import classNames from 'classnames';
7
- import React from 'react';
12
+ import React, { useState } from 'react';
8
13
 
9
14
  import styles from './version-dropdown.module.scss';
15
+ import { VersionInfo } from './version-info';
16
+ import { LaneInfo } from './lane-info';
17
+
18
+ export const LOCAL_VERSION = 'workspace';
19
+
20
+ export type DropdownComponentVersion = Partial<LegacyComponentLog> & { version: string };
10
21
 
11
- type VersionDropdownProps = {
12
- versions: string[];
22
+ export type VersionDropdownProps = {
23
+ tags: DropdownComponentVersion[];
24
+ snaps?: DropdownComponentVersion[];
25
+ lanes?: LaneModel[];
26
+ localVersion?: boolean;
13
27
  currentVersion?: string;
28
+ currentLane?: LaneModel;
29
+ latestVersion?: string;
30
+ loading?: boolean;
14
31
  } & React.HTMLAttributes<HTMLDivElement>;
15
32
 
16
- export function VersionDropdown({ versions, currentVersion }: VersionDropdownProps) {
17
- if (versions.length < 2) {
33
+ export function VersionDropdown({
34
+ snaps,
35
+ tags,
36
+ lanes,
37
+ currentVersion,
38
+ latestVersion,
39
+ localVersion,
40
+ loading,
41
+ currentLane,
42
+ }: VersionDropdownProps) {
43
+ const [key, setKey] = useState(0);
44
+
45
+ const singleVersion = (snaps || []).concat(tags).length < 2;
46
+
47
+ if (singleVersion && !loading) {
18
48
  return (
19
49
  <div className={styles.noVersions}>
20
50
  <VersionPlaceholder currentVersion={currentVersion} />
21
51
  </div>
22
52
  );
23
53
  }
54
+
24
55
  return (
25
56
  <div className={styles.versionDropdown}>
26
57
  <Dropdown
27
58
  className={styles.dropdown}
28
59
  dropClass={styles.menu}
29
- placeholder=""
30
- clickOutside
31
- PlaceholderComponent={() => (
32
- <VersionPlaceholder currentVersion={currentVersion} className={styles.withVersions} />
33
- )}
60
+ clickToggles={false}
61
+ clickPlaceholderToggles={true}
62
+ onChange={(_e, open) => open && setKey((x) => x + 1)} // to reset menu to initial state when toggling
63
+ placeholder={<VersionPlaceholder currentVersion={currentVersion} className={styles.withVersions} />}
34
64
  >
35
- <div>
36
- <div className={styles.title}>Select version to view</div>
37
- <div className={styles.versionContainer}>
38
- {versions.map((version, index) => {
39
- const isCurrent = version === currentVersion;
40
- return (
41
- <NavLink
42
- to={`?version=${version}`}
43
- key={index}
44
- className={classNames(styles.versionLine, isCurrent && styles.currentVersion)}
45
- >
46
- <span className={styles.version}>{version}</span>
47
- {index === 0 && <VersionLabel className={styles.label} status="latest" />}
48
- {/* {version === currentVersion && <VersionLabel className={styles.label} status="checked-out" />} */}
49
- </NavLink>
50
- );
51
- })}
52
- </div>
53
- </div>
65
+ {loading && <LineSkeleton className={styles.loading} count={6} />}
66
+ {loading || (
67
+ <VersionMenu
68
+ key={key}
69
+ tags={tags}
70
+ snaps={snaps}
71
+ lanes={lanes}
72
+ currentVersion={currentVersion}
73
+ latestVersion={latestVersion}
74
+ localVersion={localVersion}
75
+ currentLane={currentLane}
76
+ />
77
+ )}
54
78
  </Dropdown>
55
79
  </div>
56
80
  );
@@ -64,3 +88,92 @@ function VersionPlaceholder({ currentVersion, className }: { currentVersion?: st
64
88
  </div>
65
89
  );
66
90
  }
91
+ type VersionMenuProps = {
92
+ tags?: DropdownComponentVersion[];
93
+ snaps?: DropdownComponentVersion[];
94
+ lanes?: LaneModel[];
95
+ localVersion?: boolean;
96
+ currentVersion?: string;
97
+ latestVersion?: string;
98
+ currentLane?: LaneModel;
99
+ } & React.HTMLAttributes<HTMLDivElement>;
100
+
101
+ const VERSION_TAB_NAMES = ['TAG', 'SNAP', 'LANE'] as const;
102
+
103
+ function VersionMenu({
104
+ tags,
105
+ snaps,
106
+ lanes,
107
+ currentVersion,
108
+ localVersion,
109
+ latestVersion,
110
+ currentLane,
111
+ ...rest
112
+ }: VersionMenuProps) {
113
+ const [activeTabIndex, setActiveTab] = useState<number>(0);
114
+
115
+ const tabs = VERSION_TAB_NAMES.map((name) => {
116
+ switch (name) {
117
+ case 'SNAP':
118
+ return { name, payload: snaps || [] };
119
+ case 'LANE':
120
+ return { name, payload: lanes || [] };
121
+ default:
122
+ return { name, payload: tags || [] };
123
+ }
124
+ }).filter((tab) => tab.payload.length > 0);
125
+
126
+ return (
127
+ <div {...rest}>
128
+ <div className={styles.top}>
129
+ <div className={styles.title}>
130
+ <span>Switch to view tags, snaps, or lanes</span>
131
+ </div>
132
+ {localVersion && (
133
+ <NavLink
134
+ href={'?'}
135
+ className={classNames(
136
+ styles.versionLine,
137
+ styles.versionRow,
138
+ currentVersion === LOCAL_VERSION && styles.currentVersion
139
+ )}
140
+ >
141
+ <div className={styles.version}>
142
+ <UserAvatar size={20} account={{}} className={styles.versionUserAvatar} />
143
+ <span className={styles.versionName}>{LOCAL_VERSION}</span>
144
+ </div>
145
+ </NavLink>
146
+ )}
147
+ </div>
148
+ <div className={styles.tabs}>
149
+ {tabs.map(({ name }, index) => {
150
+ return (
151
+ <Tab
152
+ className={styles.tab}
153
+ key={name}
154
+ isActive={activeTabIndex === index}
155
+ onClick={() => setActiveTab(index)}
156
+ >
157
+ {name}
158
+ </Tab>
159
+ );
160
+ })}
161
+ </div>
162
+ <div className={styles.versionContainer}>
163
+ {tabs[activeTabIndex].name === 'LANE' &&
164
+ tabs[activeTabIndex].payload.map((payload) => (
165
+ <LaneInfo key={payload.id} currentLane={currentLane} {...payload}></LaneInfo>
166
+ ))}
167
+ {tabs[activeTabIndex].name !== 'LANE' &&
168
+ tabs[activeTabIndex].payload.map((payload) => (
169
+ <VersionInfo
170
+ key={payload.hash}
171
+ currentVersion={currentVersion}
172
+ latestVersion={latestVersion}
173
+ {...payload}
174
+ ></VersionInfo>
175
+ ))}
176
+ </div>
177
+ </div>
178
+ );
179
+ }
@@ -0,0 +1 @@
1
+ export { VersionInfo, VersionInfoProps } from './version-info';
@@ -0,0 +1,44 @@
1
+ .versionRow {
2
+ display: flex;
3
+ justify-content: space-between;
4
+
5
+ .versionTimestamp {
6
+ margin-right: 2px;
7
+ }
8
+ .versionUserAvatar {
9
+ padding: 0px 8px;
10
+ }
11
+ .version {
12
+ width: 60%;
13
+ display: flex;
14
+ flex-direction: row;
15
+ align-content: space-between;
16
+ }
17
+ .versionName {
18
+ padding: 0px 8px;
19
+ align-self: center;
20
+ line-height: 14px;
21
+ }
22
+ }
23
+ .versionLine {
24
+ cursor: pointer;
25
+ display: flex;
26
+ align-items: center;
27
+ height: 36px;
28
+ padding: 0 24px;
29
+ text-decoration: none;
30
+ color: var(--bit-text-color-heavy);
31
+ &:hover {
32
+ background-color: var(--bit-bg-heavy, #f6f6f6);
33
+ }
34
+ &:last-child {
35
+ margin-bottom: 8px;
36
+ }
37
+ &.currentVersion {
38
+ background: var(--bit-accent-bg, #eceaff);
39
+ }
40
+ .label {
41
+ background-color: white;
42
+ padding: 0px 8px;
43
+ }
44
+ }
@@ -0,0 +1,43 @@
1
+ import { NavLink } from '@teambit/base-ui.routing.nav-link';
2
+ import { TimeAgo } from '@teambit/design.ui.time-ago';
3
+ import { VersionLabel } from '@teambit/component.ui.version-label';
4
+ import React, { useMemo } from 'react';
5
+ import classNames from 'classnames';
6
+ import { UserAvatar } from '@teambit/design.ui.avatar';
7
+ import { Ellipsis } from '@teambit/design.ui.styles.ellipsis';
8
+
9
+ import { DropdownComponentVersion, LOCAL_VERSION } from '../version-dropdown';
10
+ import styles from './version-info.module.scss';
11
+
12
+ export type VersionInfoProps = DropdownComponentVersion & {
13
+ currentVersion?: string;
14
+ latestVersion?: string;
15
+ };
16
+
17
+ export function VersionInfo({ version, currentVersion, latestVersion, date, username, email }: VersionInfoProps) {
18
+ const isCurrent = version === currentVersion;
19
+ const author = useMemo(() => {
20
+ return {
21
+ displayName: username,
22
+ email,
23
+ };
24
+ }, [version]);
25
+
26
+ const timestamp = useMemo(() => (date ? new Date(parseInt(date)).toString() : new Date().toString()), [date]);
27
+
28
+ return (
29
+ <div key={version}>
30
+ <NavLink
31
+ href={version === LOCAL_VERSION ? '?' : `?version=${version}`}
32
+ className={classNames(styles.versionLine, styles.versionRow, isCurrent && styles.currentVersion)}
33
+ >
34
+ <div className={styles.version}>
35
+ <UserAvatar size={20} account={author} className={styles.versionUserAvatar} />
36
+ <Ellipsis className={styles.versionName}>{version}</Ellipsis>
37
+ {version === latestVersion && <VersionLabel className={styles.label} status="latest" />}
38
+ </div>
39
+ <TimeAgo className={styles.versionTimestamp} date={timestamp} />
40
+ </NavLink>
41
+ </div>
42
+ );
43
+ }