@teambit/component.ui.version-dropdown 0.0.492 → 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 (33) hide show
  1. package/{__preview-1645365357220.js → __preview-1646295435675.js} +2 -2
  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.js +3 -3
  10. package/dist/version-dropdown.composition.js.map +1 -1
  11. package/dist/version-dropdown.d.ts +14 -4
  12. package/dist/version-dropdown.js +76 -15
  13. package/dist/version-dropdown.js.map +1 -1
  14. package/dist/version-dropdown.module.scss +41 -5
  15. package/dist/version-info/index.d.ts +1 -0
  16. package/dist/version-info/index.js +6 -0
  17. package/dist/version-info/index.js.map +1 -0
  18. package/dist/version-info/version-info.d.ts +7 -0
  19. package/dist/version-info/version-info.js +53 -0
  20. package/dist/version-info/version-info.js.map +1 -0
  21. package/dist/version-info/version-info.module.scss +44 -0
  22. package/lane-info/index.ts +1 -0
  23. package/lane-info/lane-info.module.scss +30 -0
  24. package/lane-info/lane-info.tsx +26 -0
  25. package/package-tar/teambit-component.ui.version-dropdown-0.0.493.tgz +0 -0
  26. package/package.json +9 -3
  27. package/version-dropdown.composition.tsx +3 -3
  28. package/version-dropdown.module.scss +41 -5
  29. package/version-dropdown.tsx +140 -32
  30. package/version-info/index.ts +1 -0
  31. package/version-info/version-info.module.scss +44 -0
  32. package/version-info/version-info.tsx +43 -0
  33. package/package-tar/teambit-component.ui.version-dropdown-0.0.492.tgz +0 -0
@@ -1,2 +1,2 @@
1
- export const compositions = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_ui_version-dropdown@0.0.492/dist/version-dropdown.composition.js')]
2
- export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_ui_version-dropdown@0.0.492/dist/version-dropdown.docs.js')]
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
+ }
@@ -12,15 +12,15 @@ const version_dropdown_1 = require("./version-dropdown");
12
12
  const style = { display: 'flex', justifyContent: 'center', alignContent: 'center' };
13
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
17
  exports.VersionDropdownWithOneVersion = VersionDropdownWithOneVersion;
18
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
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,6BAA6B,GAAG,GAAG,EAAE;IAChD,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,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;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,mCAAmC,uCAU9C"}
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,8 +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;
5
15
  latestVersion?: string;
16
+ loading?: boolean;
6
17
  } & React.HTMLAttributes<HTMLDivElement>;
7
- export declare function VersionDropdown({ versions, currentVersion, latestVersion }: VersionDropdownProps): JSX.Element;
8
- export {};
18
+ export declare function VersionDropdown({ snaps, tags, lanes, currentVersion, latestVersion, localVersion, loading, currentLane, }: VersionDropdownProps): JSX.Element;
@@ -1,33 +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
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
- const LOCAL_VERSION = 'workspace';
16
- function VersionDropdown({ versions, currentVersion, latestVersion }) {
17
- 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) {
18
54
  return (react_1.default.createElement("div", { className: version_dropdown_module_scss_1.default.noVersions },
19
55
  react_1.default.createElement(VersionPlaceholder, { currentVersion: currentVersion })));
20
56
  }
21
57
  return (react_1.default.createElement("div", { className: version_dropdown_module_scss_1.default.versionDropdown },
22
- 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 })) },
23
- react_1.default.createElement("div", null,
24
- react_1.default.createElement("div", { className: version_dropdown_module_scss_1.default.title }, "Select version to view"),
25
- react_1.default.createElement("div", { className: version_dropdown_module_scss_1.default.versionContainer }, versions.map((version, index) => {
26
- const isCurrent = version === currentVersion;
27
- return (react_1.default.createElement(base_ui_routing_nav_link_1.NavLink, { href: version === LOCAL_VERSION ? '?' : `?version=${version}`, key: index, className: (0, classnames_1.default)(version_dropdown_module_scss_1.default.versionLine, isCurrent && version_dropdown_module_scss_1.default.currentVersion) },
28
- react_1.default.createElement("span", { className: version_dropdown_module_scss_1.default.version }, version),
29
- version === latestVersion && react_1.default.createElement(component_ui_version_label_1.VersionLabel, { className: version_dropdown_module_scss_1.default.label, status: "latest" })));
30
- }))))));
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 })))));
31
61
  }
32
62
  exports.VersionDropdown = VersionDropdown;
33
63
  function VersionPlaceholder({ currentVersion, className }) {
@@ -35,4 +65,35 @@ function VersionPlaceholder({ currentVersion, className }) {
35
65
  react_1.default.createElement(design_ui_styles_ellipsis_1.Ellipsis, null, currentVersion),
36
66
  react_1.default.createElement(evangelist_elements_icon_1.Icon, { of: "fat-arrow-down" })));
37
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
+ }
38
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,gFAA4D;AAC5D,wFAAiE;AACjE,oFAAmE;AACnE,kFAA8D;AAC9D,4DAAoC;AACpC,kDAA0B;AAE1B,kGAAoD;AAEpD,MAAM,aAAa,GAAG,WAAW,CAAC;AAQlC,SAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAwB;IAC/F,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;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,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;oBAE7C,OAAO,CACL,8BAAC,kCAAO,IACN,IAAI,EAAE,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,OAAO,EAAE,EAC7D,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,OAAO,KAAK,aAAa,IAAI,8BAAC,yCAAY,IAAC,SAAS,EAAE,sCAAM,CAAC,KAAK,EAAE,MAAM,EAAC,QAAQ,GAAG,CAE/E,CACX,CAAC;gBACJ,CAAC,CAAC,CACE,CACF,CACG,CACP,CACP,CAAC;AACJ,CAAC;AA3CD,0CA2CC;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":"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"}
@@ -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
+ }
@@ -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,21 +1,27 @@
1
1
  {
2
2
  "name": "@teambit/component.ui.version-dropdown",
3
- "version": "0.0.492",
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.492"
9
+ "version": "0.0.493"
10
10
  },
11
11
  "dependencies": {
12
12
  "classnames": "2.2.6",
13
13
  "core-js": "^3.0.0",
14
+ "@teambit/base-ui.loaders.skeleton": "1.0.1",
14
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",
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",
17
23
  "@teambit/component.ui.version-label": "0.0.491",
18
- "@teambit/design.ui.styles.ellipsis": "0.0.347"
24
+ "@teambit/design.ui.time-ago": "0.0.351"
19
25
  },
20
26
  "devDependencies": {
21
27
  "history": "4.10.1",
@@ -9,18 +9,18 @@ const style = { display: 'flex', justifyContent: 'center', alignContent: 'center
9
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
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,23 +1,50 @@
1
1
  import { Icon } from '@teambit/evangelist.elements.icon';
2
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';
10
19
 
11
- const LOCAL_VERSION = 'workspace';
20
+ export type DropdownComponentVersion = Partial<LegacyComponentLog> & { version: string };
12
21
 
13
- type VersionDropdownProps = {
14
- versions: string[];
22
+ export type VersionDropdownProps = {
23
+ tags: DropdownComponentVersion[];
24
+ snaps?: DropdownComponentVersion[];
25
+ lanes?: LaneModel[];
26
+ localVersion?: boolean;
15
27
  currentVersion?: string;
28
+ currentLane?: LaneModel;
16
29
  latestVersion?: string;
30
+ loading?: boolean;
17
31
  } & React.HTMLAttributes<HTMLDivElement>;
18
32
 
19
- export function VersionDropdown({ versions, currentVersion, latestVersion }: VersionDropdownProps) {
20
- 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) {
21
48
  return (
22
49
  <div className={styles.noVersions}>
23
50
  <VersionPlaceholder currentVersion={currentVersion} />
@@ -30,32 +57,24 @@ export function VersionDropdown({ versions, currentVersion, latestVersion }: Ver
30
57
  <Dropdown
31
58
  className={styles.dropdown}
32
59
  dropClass={styles.menu}
33
- placeholder=""
34
- clickOutside
35
- PlaceholderComponent={() => (
36
- <VersionPlaceholder currentVersion={currentVersion} className={styles.withVersions} />
37
- )}
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} />}
38
64
  >
39
- <div>
40
- <div className={styles.title}>Select version to view</div>
41
- <div className={styles.versionContainer}>
42
- {versions.map((version, index) => {
43
- const isCurrent = version === currentVersion;
44
-
45
- return (
46
- <NavLink
47
- href={version === LOCAL_VERSION ? '?' : `?version=${version}`}
48
- key={index}
49
- className={classNames(styles.versionLine, isCurrent && styles.currentVersion)}
50
- >
51
- <span className={styles.version}>{version}</span>
52
- {version === latestVersion && <VersionLabel className={styles.label} status="latest" />}
53
- {/* {version === currentVersion && <VersionLabel className={styles.label} status="checked-out" />} */}
54
- </NavLink>
55
- );
56
- })}
57
- </div>
58
- </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
+ )}
59
78
  </Dropdown>
60
79
  </div>
61
80
  );
@@ -69,3 +88,92 @@ function VersionPlaceholder({ currentVersion, className }: { currentVersion?: st
69
88
  </div>
70
89
  );
71
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
+ }