@teambit/lanes.ui.inputs.lane-selector 0.0.82 → 0.0.84

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.
@@ -4,5 +4,7 @@ export declare type LaneGroupedMenuItemProps = {
4
4
  selected?: LaneId;
5
5
  current: LaneId[];
6
6
  scope: string;
7
+ getHref?: (laneId: LaneId) => string;
8
+ onLaneSelected?: (laneId: LaneId) => void;
7
9
  } & HTMLAttributes<HTMLDivElement>;
8
- export declare function LaneGroupedMenuItem({ selected, current, className, scope, ...rest }: LaneGroupedMenuItemProps): JSX.Element;
10
+ export declare function LaneGroupedMenuItem({ selected, current, className, scope, getHref, onLaneSelected, ...rest }: LaneGroupedMenuItemProps): JSX.Element;
@@ -20,17 +20,17 @@ const classnames_1 = __importDefault(require("classnames"));
20
20
  const lane_menu_item_1 = require("./lane-menu-item");
21
21
  const lane_grouped_menu_item_module_scss_1 = __importDefault(require("./lane-grouped-menu-item.module.scss"));
22
22
  function LaneGroupedMenuItem(_a) {
23
- var { selected, current, className, scope } = _a, rest = __rest(_a, ["selected", "current", "className", "scope"]);
23
+ var { selected, current, className, scope, getHref, onLaneSelected } = _a, rest = __rest(_a, ["selected", "current", "className", "scope", "getHref", "onLaneSelected"]);
24
24
  if (current.length === 0)
25
25
  return null;
26
- if (current[0].isDefault()) {
26
+ if (current.length === 1 && current[0].isDefault()) {
27
27
  const defaultLane = current[0];
28
- return react_1.default.createElement(lane_menu_item_1.LaneMenuItem, { key: defaultLane.toString(), selected: selected, current: defaultLane });
28
+ return (react_1.default.createElement(lane_menu_item_1.LaneMenuItem, { key: defaultLane.toString(), onLaneSelected: onLaneSelected, getHref: getHref, selected: selected, current: defaultLane }));
29
29
  }
30
30
  const onClickStopPropagation = (e) => e.stopPropagation();
31
31
  return (react_1.default.createElement("div", Object.assign({ className: (0, classnames_1.default)(lane_grouped_menu_item_module_scss_1.default.groupedMenuItem, className) }, rest),
32
32
  react_1.default.createElement("div", { onClick: onClickStopPropagation, className: lane_grouped_menu_item_module_scss_1.default.scope }, scope),
33
- current.map((lane) => (react_1.default.createElement(lane_menu_item_1.LaneMenuItem, { key: lane.toString(), selected: selected, current: lane })))));
33
+ current.map((lane) => (react_1.default.createElement(lane_menu_item_1.LaneMenuItem, { key: lane.toString(), onLaneSelected: onLaneSelected, getHref: getHref, selected: selected, current: lane })))));
34
34
  }
35
35
  exports.LaneGroupedMenuItem = LaneGroupedMenuItem;
36
36
  //# sourceMappingURL=lane-grouped-menu-item.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lane-grouped-menu-item.js","sourceRoot":"","sources":["../lane-grouped-menu-item.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kDAA8C;AAE9C,4DAAoC;AACpC,qDAAgD;AAEhD,8GAA0D;AAQ1D,SAAgB,mBAAmB,CAAC,EAA0E;QAA1E,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,OAAqC,EAAhC,IAAI,cAA9C,6CAAgD,CAAF;IAChF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE;QAC1B,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;QACzC,OAAO,8BAAC,6BAAY,IAAC,GAAG,EAAE,WAAW,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAI,CAAC;KAChG;IAED,MAAM,sBAAsB,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IAE1D,OAAO,CACL,qDAAK,SAAS,EAAE,IAAA,oBAAU,EAAC,4CAAM,CAAC,eAAe,EAAE,SAAS,CAAC,IAAM,IAAI;QACrE,uCAAK,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,4CAAM,CAAC,KAAK,IAC1D,KAAK,CACF;QACL,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACrB,8BAAC,6BAAY,IAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAI,CAC1E,CAAC,CACE,CACP,CAAC;AACJ,CAAC;AApBD,kDAoBC"}
1
+ {"version":3,"file":"lane-grouped-menu-item.js","sourceRoot":"","sources":["../lane-grouped-menu-item.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kDAA8C;AAE9C,4DAAoC;AACpC,qDAAgD;AAEhD,8GAA0D;AAU1D,SAAgB,mBAAmB,CAAC,EAQT;QARS,EAClC,QAAQ,EACR,OAAO,EACP,SAAS,EACT,KAAK,EACL,OAAO,EACP,cAAc,OAEW,EADtB,IAAI,cAP2B,0EAQnC,CADQ;IAEP,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE;QAClD,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAW,CAAC;QACzC,OAAO,CACL,8BAAC,6BAAY,IACX,GAAG,EAAE,WAAW,CAAC,QAAQ,EAAE,EAC3B,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,WAAW,GACpB,CACH,CAAC;KACH;IAED,MAAM,sBAAsB,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IAE1D,OAAO,CACL,qDAAK,SAAS,EAAE,IAAA,oBAAU,EAAC,4CAAM,CAAC,eAAe,EAAE,SAAS,CAAC,IAAM,IAAI;QACrE,uCAAK,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,4CAAM,CAAC,KAAK,IAC1D,KAAK,CACF;QACL,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACrB,8BAAC,6BAAY,IACX,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,EACpB,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,IAAI,GACb,CACH,CAAC,CACE,CACP,CAAC;AACJ,CAAC;AA1CD,kDA0CC"}
@@ -3,5 +3,7 @@ import { LaneId } from '@teambit/lane-id';
3
3
  export declare type LaneMenuItemProps = {
4
4
  selected?: LaneId;
5
5
  current: LaneId;
6
+ getHref?: (laneId: LaneId) => string;
7
+ onLaneSelected?: (laneId: LaneId) => void;
6
8
  } & HTMLAttributes<HTMLDivElement>;
7
- export declare function LaneMenuItem({ selected, current, className, ...rest }: LaneMenuItemProps): JSX.Element;
9
+ export declare function LaneMenuItem({ selected, current, className, onLaneSelected, getHref, ...rest }: LaneMenuItemProps): JSX.Element;
@@ -44,7 +44,7 @@ const design_ui_pill_label_1 = require("@teambit/design.ui.pill-label");
44
44
  const design_ui_surfaces_menu_link_item_1 = require("@teambit/design.ui.surfaces.menu.link-item");
45
45
  const lane_menu_item_module_scss_1 = __importDefault(require("./lane-menu-item.module.scss"));
46
46
  function LaneMenuItem(_a) {
47
- var { selected, current, className } = _a, rest = __rest(_a, ["selected", "current", "className"]);
47
+ var { selected, current, className, onLaneSelected, getHref = lanes_ui_models_lanes_model_1.LanesModel.getLaneUrl } = _a, rest = __rest(_a, ["selected", "current", "className", "onLaneSelected", "getHref"]);
48
48
  const isCurrent = (selected === null || selected === void 0 ? void 0 : selected.toString()) === current.toString();
49
49
  const currentVersionRef = (0, react_1.useRef)(null);
50
50
  (0, react_1.useEffect)(() => {
@@ -53,9 +53,9 @@ function LaneMenuItem(_a) {
53
53
  (_a = currentVersionRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
54
54
  }
55
55
  }, [isCurrent]);
56
- const href = lanes_ui_models_lanes_model_1.LanesModel.getLaneUrl(current);
56
+ const href = getHref(current);
57
57
  return (react_1.default.createElement("div", Object.assign({}, rest, { className: className, ref: currentVersionRef }),
58
- react_1.default.createElement(design_ui_surfaces_menu_link_item_1.MenuLinkItem, { active: isCurrent, href: href, className: lane_menu_item_module_scss_1.default.menuItem },
58
+ react_1.default.createElement(design_ui_surfaces_menu_link_item_1.MenuLinkItem, { active: isCurrent, href: href, className: lane_menu_item_module_scss_1.default.menuItem, onClick: onLaneSelected && (() => onLaneSelected(current)) },
59
59
  react_1.default.createElement("div", { className: lane_menu_item_module_scss_1.default.laneName }, current.name),
60
60
  current.isDefault() && (react_1.default.createElement(design_ui_pill_label_1.PillLabel, { className: lane_menu_item_module_scss_1.default.defaultLanePill },
61
61
  react_1.default.createElement("span", null, "default"))))));
@@ -1 +1 @@
1
- {"version":3,"file":"lane-menu-item.js","sourceRoot":"","sources":["../lane-menu-item.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiE;AAEjE,sFAAkE;AAClE,wEAA0D;AAC1D,kGAA0E;AAE1E,8FAAkD;AAOlD,SAAgB,YAAY,CAAC,EAA4D;QAA5D,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,OAA8B,EAAzB,IAAI,cAAvC,oCAAyC,CAAF;IAClE,MAAM,SAAS,GAAG,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,EAAE,MAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;IAE9D,MAAM,iBAAiB,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IACvD,IAAA,iBAAS,EAAC,GAAG,EAAE;;QACb,IAAI,SAAS,EAAE;YACb,MAAA,iBAAiB,CAAC,OAAO,0CAAE,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;SACrF;IACH,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,IAAI,GAAG,wCAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAE5C,OAAO,CACL,uDAAS,IAAI,IAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,iBAAiB;QACzD,8BAAC,gDAAY,IAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,oCAAM,CAAC,QAAQ;YACrE,uCAAK,SAAS,EAAE,oCAAM,CAAC,QAAQ,IAAG,OAAO,CAAC,IAAI,CAAO;YACpD,OAAO,CAAC,SAAS,EAAE,IAAI,CACtB,8BAAC,gCAAS,IAAC,SAAS,EAAE,oCAAM,CAAC,eAAe;gBAC1C,sDAAoB,CACV,CACb,CACY,CACX,CACP,CAAC;AACJ,CAAC;AAxBD,oCAwBC"}
1
+ {"version":3,"file":"lane-menu-item.js","sourceRoot":"","sources":["../lane-menu-item.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiE;AAEjE,sFAAkE;AAClE,wEAA0D;AAC1D,kGAA0E;AAE1E,8FAAkD;AASlD,SAAgB,YAAY,CAAC,EAOT;QAPS,EAC3B,QAAQ,EACR,OAAO,EACP,SAAS,EACT,cAAc,EACd,OAAO,GAAG,wCAAU,CAAC,UAAU,OAEb,EADf,IAAI,cANoB,iEAO5B,CADQ;IAEP,MAAM,SAAS,GAAG,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,EAAE,MAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;IAE9D,MAAM,iBAAiB,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IACvD,IAAA,iBAAS,EAAC,GAAG,EAAE;;QACb,IAAI,SAAS,EAAE;YACb,MAAA,iBAAiB,CAAC,OAAO,0CAAE,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;SACrF;IACH,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9B,OAAO,CACL,uDAAS,IAAI,IAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,iBAAiB;QACzD,8BAAC,gDAAY,IACX,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,oCAAM,CAAC,QAAQ,EAC1B,OAAO,EAAE,cAAc,IAAI,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAE1D,uCAAK,SAAS,EAAE,oCAAM,CAAC,QAAQ,IAAG,OAAO,CAAC,IAAI,CAAO;YACpD,OAAO,CAAC,SAAS,EAAE,IAAI,CACtB,8BAAC,gCAAS,IAAC,SAAS,EAAE,oCAAM,CAAC,eAAe;gBAC1C,sDAAoB,CACV,CACb,CACY,CACX,CACP,CAAC;AACJ,CAAC;AApCD,oCAoCC"}
@@ -4,5 +4,7 @@ export declare type LaneSelectorProps = {
4
4
  lanes: Array<LaneId>;
5
5
  selectedLaneId?: LaneId;
6
6
  groupByScope?: boolean;
7
+ getHref?: (laneId: LaneId) => string;
8
+ onLaneSelected?: (laneId: LaneId) => void;
7
9
  } & HTMLAttributes<HTMLDivElement>;
8
- export declare function LaneSelector({ className, lanes, selectedLaneId, groupByScope, ...rest }: LaneSelectorProps): JSX.Element;
10
+ export declare function LaneSelector({ className, lanes, selectedLaneId, groupByScope, getHref, onLaneSelected, ...rest }: LaneSelectorProps): JSX.Element;
@@ -48,12 +48,12 @@ const lane_grouped_menu_item_1 = require("./lane-grouped-menu-item");
48
48
  const lane_search_1 = require("./lane-search");
49
49
  const lane_selector_module_scss_1 = __importDefault(require("./lane-selector.module.scss"));
50
50
  function LaneSelector(_a) {
51
- var { className, lanes, selectedLaneId, groupByScope = true } = _a, rest = __rest(_a, ["className", "lanes", "selectedLaneId", "groupByScope"]);
51
+ var { className, lanes, selectedLaneId, groupByScope = true, getHref, onLaneSelected } = _a, rest = __rest(_a, ["className", "lanes", "selectedLaneId", "groupByScope", "getHref", "onLaneSelected"]);
52
52
  const [filteredLanes, setFilteredLanes] = (0, react_1.useState)(lanes);
53
53
  const [focus, setFocus] = (0, react_1.useState)(false);
54
54
  (0, react_1.useEffect)(() => {
55
55
  setFilteredLanes(lanes);
56
- }, [lanes]);
56
+ }, [lanes.length]);
57
57
  const multipleLanes = lanes.length > 1;
58
58
  const laneDropdownItems = groupByScope
59
59
  ? Array.from(lanes_ui_models_lanes_model_1.LanesModel.groupByScope(filteredLanes).entries())
@@ -71,7 +71,7 @@ function LaneSelector(_a) {
71
71
  const onDropdownToggled = (_, open) => {
72
72
  setFocus(open);
73
73
  };
74
- return (react_1.default.createElement(evangelist_surfaces_dropdown_1.Dropdown, Object.assign({}, rest, { open: !multipleLanes ? false : undefined, dropClass: lane_selector_module_scss_1.default.menu, elevation: 'none', onChange: multipleLanes ? onDropdownToggled : undefined,
74
+ return (react_1.default.createElement(evangelist_surfaces_dropdown_1.Dropdown, Object.assign({}, rest, { open: !multipleLanes ? false : undefined, dropClass: lane_selector_module_scss_1.default.menu, elevation: "none", onChange: multipleLanes ? onDropdownToggled : undefined,
75
75
  // @ts-ignore - mismatch between @types/react
76
76
  placeholder: react_1.default.createElement(lane_placeholder_1.LanePlaceholder, { disabled: !multipleLanes, selectedLaneId: selectedLaneId, showScope: groupByScope }), className: (0, classnames_1.default)(className, lane_selector_module_scss_1.default.dropdown, !multipleLanes && lane_selector_module_scss_1.default.disabled) }),
77
77
  multipleLanes && react_1.default.createElement("div", { className: lane_selector_module_scss_1.default.header }, "Switch lane"),
@@ -79,10 +79,10 @@ function LaneSelector(_a) {
79
79
  react_1.default.createElement(lane_search_1.LaneSearch, { focus: focus, onChange: handleOnChange }))),
80
80
  multipleLanes &&
81
81
  groupByScope &&
82
- laneDropdownItems.map(([scope, lanesByScope]) => (react_1.default.createElement(lane_grouped_menu_item_1.LaneGroupedMenuItem, { key: scope, scope: scope, selected: selectedLaneId, current: lanesByScope }))),
82
+ laneDropdownItems.map(([scope, lanesByScope]) => (react_1.default.createElement(lane_grouped_menu_item_1.LaneGroupedMenuItem, { key: scope, onLaneSelected: onLaneSelected, getHref: getHref, scope: scope, selected: selectedLaneId, current: lanesByScope }))),
83
83
  multipleLanes &&
84
84
  !groupByScope &&
85
- laneDropdownItems.map((lane) => (react_1.default.createElement(lane_menu_item_1.LaneMenuItem, { key: lane.toString(), selected: selectedLaneId, current: lane })))));
85
+ laneDropdownItems.map((lane) => (react_1.default.createElement(lane_menu_item_1.LaneMenuItem, { onLaneSelected: onLaneSelected, key: lane.toString(), getHref: getHref, selected: selectedLaneId, current: lane })))));
86
86
  }
87
87
  exports.LaneSelector = LaneSelector;
88
88
  //# sourceMappingURL=lane-selector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lane-selector.js","sourceRoot":"","sources":["../lane-selector.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lane-selector.js","sourceRoot":"","sources":["../lane-selector.tsx"],"names":[],"mappings":"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"}
@@ -5,8 +5,6 @@
5
5
  // (this is bizarre, the tree has no position absolute)
6
6
  z-index: $nav-z-index;
7
7
  border-radius: 8px;
8
- // override dropdown default width: 100%
9
- width: calc(100% - 40px) !important;
10
8
 
11
9
  &.disabled {
12
10
  > div {
@@ -28,7 +26,7 @@
28
26
  }
29
27
 
30
28
  .menu {
31
- width: calc(100% - 24px);
29
+ width: 100%;
32
30
  border-radius: 8px;
33
31
  padding: 0;
34
32
  padding-top: 8px;
@@ -9,14 +9,32 @@ export type LaneGroupedMenuItemProps = {
9
9
  selected?: LaneId;
10
10
  current: LaneId[];
11
11
  scope: string;
12
+ getHref?: (laneId: LaneId) => string;
13
+ onLaneSelected?: (laneId: LaneId) => void;
12
14
  } & HTMLAttributes<HTMLDivElement>;
13
15
 
14
- export function LaneGroupedMenuItem({ selected, current, className, scope, ...rest }: LaneGroupedMenuItemProps) {
16
+ export function LaneGroupedMenuItem({
17
+ selected,
18
+ current,
19
+ className,
20
+ scope,
21
+ getHref,
22
+ onLaneSelected,
23
+ ...rest
24
+ }: LaneGroupedMenuItemProps) {
15
25
  if (current.length === 0) return null;
16
26
 
17
- if (current[0].isDefault()) {
27
+ if (current.length === 1 && current[0].isDefault()) {
18
28
  const defaultLane = current[0] as LaneId;
19
- return <LaneMenuItem key={defaultLane.toString()} selected={selected} current={defaultLane} />;
29
+ return (
30
+ <LaneMenuItem
31
+ key={defaultLane.toString()}
32
+ onLaneSelected={onLaneSelected}
33
+ getHref={getHref}
34
+ selected={selected}
35
+ current={defaultLane}
36
+ />
37
+ );
20
38
  }
21
39
 
22
40
  const onClickStopPropagation = (e) => e.stopPropagation();
@@ -27,7 +45,13 @@ export function LaneGroupedMenuItem({ selected, current, className, scope, ...re
27
45
  {scope}
28
46
  </div>
29
47
  {current.map((lane) => (
30
- <LaneMenuItem key={lane.toString()} selected={selected} current={lane} />
48
+ <LaneMenuItem
49
+ key={lane.toString()}
50
+ onLaneSelected={onLaneSelected}
51
+ getHref={getHref}
52
+ selected={selected}
53
+ current={lane}
54
+ />
31
55
  ))}
32
56
  </div>
33
57
  );
@@ -9,9 +9,18 @@ import styles from './lane-menu-item.module.scss';
9
9
  export type LaneMenuItemProps = {
10
10
  selected?: LaneId;
11
11
  current: LaneId;
12
+ getHref?: (laneId: LaneId) => string;
13
+ onLaneSelected?: (laneId: LaneId) => void;
12
14
  } & HTMLAttributes<HTMLDivElement>;
13
15
 
14
- export function LaneMenuItem({ selected, current, className, ...rest }: LaneMenuItemProps) {
16
+ export function LaneMenuItem({
17
+ selected,
18
+ current,
19
+ className,
20
+ onLaneSelected,
21
+ getHref = LanesModel.getLaneUrl,
22
+ ...rest
23
+ }: LaneMenuItemProps) {
15
24
  const isCurrent = selected?.toString() === current.toString();
16
25
 
17
26
  const currentVersionRef = useRef<HTMLDivElement>(null);
@@ -21,11 +30,16 @@ export function LaneMenuItem({ selected, current, className, ...rest }: LaneMenu
21
30
  }
22
31
  }, [isCurrent]);
23
32
 
24
- const href = LanesModel.getLaneUrl(current);
33
+ const href = getHref(current);
25
34
 
26
35
  return (
27
36
  <div {...rest} className={className} ref={currentVersionRef}>
28
- <MenuLinkItem active={isCurrent} href={href} className={styles.menuItem}>
37
+ <MenuLinkItem
38
+ active={isCurrent}
39
+ href={href}
40
+ className={styles.menuItem}
41
+ onClick={onLaneSelected && (() => onLaneSelected(current))}
42
+ >
29
43
  <div className={styles.laneName}>{current.name}</div>
30
44
  {current.isDefault() && (
31
45
  <PillLabel className={styles.defaultLanePill}>
@@ -5,8 +5,6 @@
5
5
  // (this is bizarre, the tree has no position absolute)
6
6
  z-index: $nav-z-index;
7
7
  border-radius: 8px;
8
- // override dropdown default width: 100%
9
- width: calc(100% - 40px) !important;
10
8
 
11
9
  &.disabled {
12
10
  > div {
@@ -28,7 +26,7 @@
28
26
  }
29
27
 
30
28
  .menu {
31
- width: calc(100% - 24px);
29
+ width: 100%;
32
30
  border-radius: 8px;
33
31
  padding: 0;
34
32
  padding-top: 8px;
package/lane-selector.tsx CHANGED
@@ -15,17 +15,27 @@ export type LaneSelectorProps = {
15
15
  lanes: Array<LaneId>;
16
16
  selectedLaneId?: LaneId;
17
17
  groupByScope?: boolean;
18
+ getHref?: (laneId: LaneId) => string;
19
+ onLaneSelected?: (laneId: LaneId) => void;
18
20
  } & HTMLAttributes<HTMLDivElement>;
19
21
 
20
22
  type LaneDropdownItems = Array<LaneId> | Array<[scope: string, lanes: LaneId[]]>;
21
23
 
22
- export function LaneSelector({ className, lanes, selectedLaneId, groupByScope = true, ...rest }: LaneSelectorProps) {
24
+ export function LaneSelector({
25
+ className,
26
+ lanes,
27
+ selectedLaneId,
28
+ groupByScope = true,
29
+ getHref,
30
+ onLaneSelected,
31
+ ...rest
32
+ }: LaneSelectorProps) {
23
33
  const [filteredLanes, setFilteredLanes] = useState<LaneId[]>(lanes);
24
34
  const [focus, setFocus] = useState<boolean>(false);
25
35
 
26
36
  useEffect(() => {
27
37
  setFilteredLanes(lanes);
28
- }, [lanes]);
38
+ }, [lanes.length]);
29
39
 
30
40
  const multipleLanes = lanes.length > 1;
31
41
  const laneDropdownItems: LaneDropdownItems = groupByScope
@@ -51,7 +61,7 @@ export function LaneSelector({ className, lanes, selectedLaneId, groupByScope =
51
61
  {...rest}
52
62
  open={!multipleLanes ? false : undefined}
53
63
  dropClass={styles.menu}
54
- elevation='none'
64
+ elevation="none"
55
65
  onChange={multipleLanes ? onDropdownToggled : undefined}
56
66
  // @ts-ignore - mismatch between @types/react
57
67
  placeholder={
@@ -68,12 +78,25 @@ export function LaneSelector({ className, lanes, selectedLaneId, groupByScope =
68
78
  {multipleLanes &&
69
79
  groupByScope &&
70
80
  (laneDropdownItems as Array<[scope: string, lanes: LaneId[]]>).map(([scope, lanesByScope]) => (
71
- <LaneGroupedMenuItem key={scope} scope={scope} selected={selectedLaneId} current={lanesByScope} />
81
+ <LaneGroupedMenuItem
82
+ key={scope}
83
+ onLaneSelected={onLaneSelected}
84
+ getHref={getHref}
85
+ scope={scope}
86
+ selected={selectedLaneId}
87
+ current={lanesByScope}
88
+ />
72
89
  ))}
73
90
  {multipleLanes &&
74
91
  !groupByScope &&
75
92
  (laneDropdownItems as LaneId[]).map((lane) => (
76
- <LaneMenuItem key={lane.toString()} selected={selectedLaneId} current={lane}></LaneMenuItem>
93
+ <LaneMenuItem
94
+ onLaneSelected={onLaneSelected}
95
+ key={lane.toString()}
96
+ getHref={getHref}
97
+ selected={selectedLaneId}
98
+ current={lane}
99
+ ></LaneMenuItem>
77
100
  ))}
78
101
  </Dropdown>
79
102
  );
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/lanes.ui.inputs.lane-selector",
3
- "version": "0.0.82",
3
+ "version": "0.0.84",
4
4
  "homepage": "https://bit.dev/teambit/lanes/ui/inputs/lane-selector",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.lanes",
8
8
  "name": "ui/inputs/lane-selector",
9
- "version": "0.0.82"
9
+ "version": "0.0.84"
10
10
  },
11
11
  "dependencies": {
12
12
  "classnames": "2.2.6",
@@ -15,8 +15,8 @@
15
15
  "@teambit/design.ui.surfaces.menu.link-item": "1.0.0",
16
16
  "@teambit/evangelist.elements.icon": "1.0.2",
17
17
  "@teambit/evangelist.surfaces.dropdown": "1.0.2",
18
- "@teambit/lane-id": "0.0.174",
19
- "@teambit/lanes.ui.models.lanes-model": "0.0.82",
18
+ "@teambit/lane-id": "0.0.176",
19
+ "@teambit/lanes.ui.models.lanes-model": "0.0.84",
20
20
  "@teambit/design.ui.styles.ellipsis": "0.0.357",
21
21
  "@teambit/lanes.ui.icons.lane-icon": "0.0.4",
22
22
  "@teambit/ui-foundation.ui.constants.z-indexes": "0.0.498"