@servicetitan/navigation 8.1.7 → 8.2.0

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.
@@ -7,4 +7,5 @@ export default _default;
7
7
  export declare const LeftNavLayout: () => import("react/jsx-runtime").JSX.Element;
8
8
  export declare const LeftNavLayoutCommercial: () => import("react/jsx-runtime").JSX.Element;
9
9
  export declare const LeftNavLayoutOnlyLinks: () => import("react/jsx-runtime").JSX.Element;
10
+ export declare const LeftNavLayoutSubmenu: () => import("react/jsx-runtime").JSX.Element;
10
11
  //# sourceMappingURL=layout.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.stories.d.ts","sourceRoot":"","sources":["../../src/components/layout.stories.tsx"],"names":[],"mappings":";;;;;AAUA,wBAIE;AAEF,eAAO,MAAM,aAAa,+CAUzB,CAAC;AAEF,eAAO,MAAM,uBAAuB,+CAUnC,CAAC;AAEF,eAAO,MAAM,sBAAsB,+CAUlC,CAAC"}
1
+ {"version":3,"file":"layout.stories.d.ts","sourceRoot":"","sources":["../../src/components/layout.stories.tsx"],"names":[],"mappings":";;;;;AAWA,wBAIE;AAEF,eAAO,MAAM,aAAa,+CAUzB,CAAC;AAEF,eAAO,MAAM,uBAAuB,+CAUnC,CAAC;AAEF,eAAO,MAAM,sBAAsB,+CAUlC,CAAC;AAEF,eAAO,MAAM,oBAAoB,+CAYhC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { withAnvil, withMemoryRouter } from '../test/data';
2
+ import { LocationInfo, withAnvil, withMemoryRouter } from '../test/data';
3
3
  import { WithAllMonolithData, WithAllMonolithDataCommercial, } from './left-navigation/header-navigation-tiny.stories';
4
- import { DefaultSideNavigation, SideNavigationLinksOnly, } from './left-navigation/side-navigation.stories';
4
+ import { DefaultSideNavigation, SideNavigationLinksOnly, SideNavigationWithSubmenu, } from './left-navigation/side-navigation.stories';
5
5
  export default {
6
6
  title: 'Navigation/Layout',
7
7
  parameters: {},
@@ -16,4 +16,7 @@ export const LeftNavLayoutCommercial = () => {
16
16
  export const LeftNavLayoutOnlyLinks = () => {
17
17
  return (_jsxs("div", { className: "d-f border flex-column", style: { height: '800px' }, children: [_jsx(WithAllMonolithDataCommercial, {}), _jsxs("div", { className: "flex-grow-1 flex-basis-0 d-f", children: [_jsx(SideNavigationLinksOnly, {}), _jsx("div", { className: "flex-grow-1 flex-basis-0" })] })] }));
18
18
  };
19
+ export const LeftNavLayoutSubmenu = () => {
20
+ return (_jsxs("div", { className: "d-f border flex-column", style: { height: '800px' }, children: [_jsx(WithAllMonolithDataCommercial, {}), _jsxs("div", { className: "flex-grow-1 flex-basis-0 d-f", children: [_jsx(SideNavigationWithSubmenu, {}), _jsx("div", { className: "flex-grow-1 flex-basis-0 p-5", children: _jsx(LocationInfo, {}) })] })] }));
21
+ };
19
22
  //# sourceMappingURL=layout.stories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.stories.js","sourceRoot":"","sources":["../../src/components/layout.stories.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EACH,mBAAmB,EACnB,6BAA6B,GAChC,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EACH,qBAAqB,EACrB,uBAAuB,GAC1B,MAAM,2CAA2C,CAAC;AAEnD,eAAe;IACX,KAAK,EAAE,mBAAmB;IAC1B,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC;CAC5C,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAC9B,OAAO,CACH,eAAK,SAAS,EAAC,wBAAwB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAC9D,KAAC,mBAAmB,KAAG,EACvB,eAAK,SAAS,EAAC,8BAA8B,aACzC,KAAC,qBAAqB,KAAG,EACzB,cAAK,SAAS,EAAC,0BAA0B,GAAG,IAC1C,IACJ,CACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,EAAE;IACxC,OAAO,CACH,eAAK,SAAS,EAAC,wBAAwB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAC9D,KAAC,6BAA6B,KAAG,EACjC,eAAK,SAAS,EAAC,8BAA8B,aACzC,KAAC,qBAAqB,KAAG,EACzB,cAAK,SAAS,EAAC,0BAA0B,GAAG,IAC1C,IACJ,CACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE;IACvC,OAAO,CACH,eAAK,SAAS,EAAC,wBAAwB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAC9D,KAAC,6BAA6B,KAAG,EACjC,eAAK,SAAS,EAAC,8BAA8B,aACzC,KAAC,uBAAuB,KAAG,EAC3B,cAAK,SAAS,EAAC,0BAA0B,GAAG,IAC1C,IACJ,CACT,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"file":"layout.stories.js","sourceRoot":"","sources":["../../src/components/layout.stories.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EACH,mBAAmB,EACnB,6BAA6B,GAChC,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EACH,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,GAC5B,MAAM,2CAA2C,CAAC;AAEnD,eAAe;IACX,KAAK,EAAE,mBAAmB;IAC1B,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC;CAC5C,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAC9B,OAAO,CACH,eAAK,SAAS,EAAC,wBAAwB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAC9D,KAAC,mBAAmB,KAAG,EACvB,eAAK,SAAS,EAAC,8BAA8B,aACzC,KAAC,qBAAqB,KAAG,EACzB,cAAK,SAAS,EAAC,0BAA0B,GAAG,IAC1C,IACJ,CACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,EAAE;IACxC,OAAO,CACH,eAAK,SAAS,EAAC,wBAAwB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAC9D,KAAC,6BAA6B,KAAG,EACjC,eAAK,SAAS,EAAC,8BAA8B,aACzC,KAAC,qBAAqB,KAAG,EACzB,cAAK,SAAS,EAAC,0BAA0B,GAAG,IAC1C,IACJ,CACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE;IACvC,OAAO,CACH,eAAK,SAAS,EAAC,wBAAwB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAC9D,KAAC,6BAA6B,KAAG,EACjC,eAAK,SAAS,EAAC,8BAA8B,aACzC,KAAC,uBAAuB,KAAG,EAC3B,cAAK,SAAS,EAAC,0BAA0B,GAAG,IAC1C,IACJ,CACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE;IACrC,OAAO,CACH,eAAK,SAAS,EAAC,wBAAwB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAC9D,KAAC,6BAA6B,KAAG,EACjC,eAAK,SAAS,EAAC,8BAA8B,aACzC,KAAC,yBAAyB,KAAG,EAC7B,cAAK,SAAS,EAAC,8BAA8B,YACzC,KAAC,YAAY,KAAG,GACd,IACJ,IACJ,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"side-navigation.d.ts","sourceRoot":"","sources":["../../../src/components/left-navigation/side-navigation.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAAwB,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAyB,MAAM,wBAAwB,CAAC;AAMzF,MAAM,WAAW,mBAAmB;IAChC,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,KAAK,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACnC,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACtC,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,mBAAmB,CAqDlD,CAAC;AAgFF,qCAAqC;AACrC,eAAO,MAAM,2BAA2B,EAAE,EAAE,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;CAC7C,CAgBI,CAAC"}
1
+ {"version":3,"file":"side-navigation.d.ts","sourceRoot":"","sources":["../../../src/components/left-navigation/side-navigation.tsx"],"names":[],"mappings":"AAQA,OAAO,EAEH,EAAE,EAOL,MAAM,OAAO,CAAC;AACf,OAAO,EACH,wBAAwB,EAI3B,MAAM,wBAAwB,CAAC;AAMhC,MAAM,WAAW,mBAAmB;IAChC,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,KAAK,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACnC,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACtC,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,mBAAmB,CA8DlD,CAAC;AA6MF,qCAAqC;AACrC,eAAO,MAAM,2BAA2B,EAAE,EAAE,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;CAC7C,CAgBI,CAAC"}
@@ -1,24 +1,57 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Icon } from '@servicetitan/anvil2';
2
+ import { Icon, Popover, Text } from '@servicetitan/anvil2';
3
+ import SvgGroupCollapse from '@servicetitan/anvil2/assets/icons/material/round/expand_less.svg';
4
+ import SvgGroupExpand from '@servicetitan/anvil2/assets/icons/material/round/expand_more.svg';
3
5
  import SvgCollapse from '@servicetitan/anvil2/assets/icons/st/gnav_menu_collapse.svg';
4
6
  import SvgExpand from '@servicetitan/anvil2/assets/icons/st/gnav_menu_expand.svg';
7
+ import { Collapsible, Headline } from '@servicetitan/design-system';
5
8
  import classNames from 'classnames';
6
- import { Fragment, useContext } from 'react';
9
+ import { Fragment, useCallback, useContext, useState, } from 'react';
7
10
  import { NavigationComponentContext } from '../../utils/navigation-context';
8
11
  import { CounterTag } from '../counter-tag';
9
12
  import * as Styles from './side-navigation.module.less';
10
13
  import { withTooltip } from './with-tooltip';
11
14
  export const SideNavigation = ({ className, expanded, id, items, itemsTop, onExpandedChange, }) => {
12
15
  const NavigationComponent = useContext(NavigationComponentContext);
13
- return (_jsxs("div", { className: classNames(Styles.sideNav, expanded ? Styles.sideNavExpanded : Styles.sideNavSlim, className), id: id, "data-cy": "side-navigation", children: [!!(itemsTop === null || itemsTop === void 0 ? void 0 : itemsTop.length) && (_jsxs(Fragment, { children: [_jsx("div", { className: Styles.sideNavTop, "data-cy": "navigation-items-top", children: itemsTop.map(item => (_jsx(SideNavigationItem, { expanded: expanded, navigationComponent: NavigationComponent, ...item }, item.id))) }), _jsx("div", { className: Styles.divider })] })), _jsx("div", { className: Styles.sideNavContent, "data-cy": "navigation-items", children: items === null || items === void 0 ? void 0 : items.map(item => (_jsx(SideNavigationItem, { expanded: expanded, navigationComponent: NavigationComponent, ...item }, item.id))) }), _jsx("div", { className: Styles.divider }), _jsx("div", { className: Styles.sideNavBottom, children: _jsx(SideNavigationOptionsToggle, { expanded: expanded, onExpandedChange: onExpandedChange }) })] }));
16
+ return (_jsxs("div", { className: classNames(Styles.sideNav, expanded ? Styles.sideNavExpanded : Styles.sideNavSlim, className), id: id, "data-cy": "side-navigation", children: [!!(itemsTop === null || itemsTop === void 0 ? void 0 : itemsTop.length) && (_jsxs(Fragment, { children: [_jsx("div", { className: Styles.sideNavTop, "data-cy": "navigation-items-top", children: itemsTop.map(item => (_jsx(SideNavigationItem, { expanded: expanded, navigationComponent: NavigationComponent, ...item }, item.id))) }), _jsx("div", { className: Styles.divider })] })), _jsx("div", { className: Styles.sideNavContent, "data-cy": "navigation-items", children: items === null || items === void 0 ? void 0 : items.map(item => item.submenu ? (_jsx(SideNavigationGroupItem, { expanded: expanded, navigationComponent: NavigationComponent, ...item }, item.id)) : (_jsx(SideNavigationItem, { expanded: expanded, navigationComponent: NavigationComponent, ...item }, item.id))) }), _jsx("div", { className: Styles.divider }), _jsx("div", { className: Styles.sideNavBottom, children: _jsx(SideNavigationOptionsToggle, { expanded: expanded, onExpandedChange: onExpandedChange }) })] }));
14
17
  };
15
18
  /** Side Navigation menu item */
16
- const SideNavigationItem = ({ id, to, title, hint, counter, className, iconClassName, iconComponent: IconComponent, icon, iconActive, isActive, navigationComponent: NavigationComponent, expanded, }) => {
19
+ const SideNavigationItem = ({ id, submenuExpanded, to, title, hint, counter, className, iconClassName, iconComponent: IconComponent, icon, iconActive, isActive, navigationComponent: NavigationComponent, expanded, }) => {
17
20
  const iconSwitch = !!icon && !!iconActive && !IconComponent;
21
+ const hasSubmenu = submenuExpanded === true || submenuExpanded === false;
18
22
  return (_jsxs(NavigationComponent, { "data-cy": `navigation-item-${id}`, "data-pendo": `navigation-item-${id}`, to: to, title: hint, className: classNames(Styles.navigationItem, className, {
19
23
  [Styles.navigationItemActive]: isActive === true,
20
24
  [Styles.navigationItemIconSwitch]: iconSwitch,
21
- }), isActive: typeof isActive === 'function' ? isActive : undefined, activeClassName: Styles.navigationItemActive, children: [_jsxs("div", { className: Styles.navigationItemIconWrapper, children: [IconComponent ? (_jsx("i", { className: classNames(Styles.navigationIcon, iconClassName), children: _jsx(IconComponent, {}) })) : (_jsxs(Fragment, { children: [icon && (_jsx(Icon, { svg: icon, className: classNames(Styles.navigationIcon, Styles.navigationIconInactive, iconClassName) })), iconActive && (_jsx(Icon, { svg: iconActive, className: classNames(Styles.navigationIcon, Styles.navigationIconActive, iconClassName) }))] })), !!expanded && _jsx("div", { className: Styles.navigationItemText, children: title }), !!counter && (_jsx(CounterTag, { data: counter, className: Styles.navigationItemCounter }))] }), !expanded && _jsx("div", { className: Styles.navigationItemText, children: title })] }, id));
25
+ }), isActive: typeof isActive === 'function' ? isActive : undefined, activeClassName: Styles.navigationItemActive, children: [_jsxs("div", { className: Styles.navigationItemIconWrapper, children: [IconComponent ? (_jsx("i", { className: classNames(Styles.navigationIcon, iconClassName), children: _jsx(IconComponent, {}) })) : (_jsxs(Fragment, { children: [icon && (_jsx(Icon, { svg: icon, className: classNames(Styles.navigationIcon, Styles.navigationIconInactive, iconClassName) })), iconActive && (_jsx(Icon, { svg: iconActive, className: classNames(Styles.navigationIcon, Styles.navigationIconActive, iconClassName) }))] })), !!expanded && _jsx("div", { className: Styles.navigationItemText, children: title }), !!counter && (_jsx(CounterTag, { data: counter, className: Styles.navigationItemCounter })), hasSubmenu && !!expanded && (_jsx(Icon, { svg: submenuExpanded ? SvgGroupCollapse : SvgGroupExpand, className: Styles.navigationItemGroupToggle }))] }), !expanded && _jsx("div", { className: Styles.navigationItemText, children: title })] }, id));
26
+ };
27
+ const submenuPopoverStyles = { '--background-color-strong': '#24323C' };
28
+ /** Side Navigation menu item */
29
+ const SideNavigationGroupItem = ({ ...props }) => {
30
+ var _a, _b, _c, _d;
31
+ const [submenuExpanded, setSubmenuExpanded] = useState(false);
32
+ const triggerClick = useCallback((e) => {
33
+ e.stopPropagation();
34
+ e.preventDefault();
35
+ if (props.expanded) {
36
+ setSubmenuExpanded(exp => !exp);
37
+ }
38
+ }, [props.expanded]);
39
+ return props.expanded ? (_jsxs(Fragment, { children: [_jsx("div", { onClickCapture: triggerClick, children: _jsx(SideNavigationItem, { ...props, submenuExpanded: submenuExpanded }) }), _jsx(Collapsible, { open: submenuExpanded, animate: true, children: _jsx("div", { className: Styles.submenu, children: _jsx(SideNavigationGroupContent, { groups: (_b = (_a = props.submenu) === null || _a === void 0 ? void 0 : _a.groups) !== null && _b !== void 0 ? _b : [], navigationComponent: props.navigationComponent }) }) })] })) : (_jsxs(Popover, { placement: "right-start", openOnHover: true, children: [_jsx(Popover.Trigger, { children: (triggerProps) => (_jsx("div", { ...triggerProps, onClickCapture: triggerClick, children: _jsx(SideNavigationItem, { ...props }) })) }), _jsx(Popover.Content, { style: submenuPopoverStyles, children: _jsxs("div", { className: Styles.submenuPopover, children: [_jsx(Headline, { size: "small", className: "c-white m-b-half-i m-t-1", children: props.title }), _jsx(SideNavigationGroupContent, { groups: (_d = (_c = props.submenu) === null || _c === void 0 ? void 0 : _c.groups) !== null && _d !== void 0 ? _d : [], navigationComponent: props.navigationComponent })] }) })] }));
40
+ };
41
+ const SideNavigationGroupContent = ({ groups, navigationComponent, }) => {
42
+ return (_jsx(Fragment, { children: groups.reduce((out, group) => {
43
+ if (!group.links.length) {
44
+ return out;
45
+ }
46
+ out.push(_jsx(Text, { variant: "eyebrow", className: Styles.submenuGroupHeader, children: group.title }, ":group:title"));
47
+ out.push(...group.links.map(link => (_jsx(SideNavigationGroupLink, { ...link, navigationComponent: navigationComponent }, link.id))));
48
+ return out;
49
+ }, []) }));
50
+ };
51
+ const SideNavigationGroupLink = ({ id, title, to, isActive, navigationComponent: NavigationComponent, }) => {
52
+ return (_jsx(NavigationComponent, { "data-cy": `navigation-item-${id}`, "data-pendo": `navigation-item-${id}`, to: to, className: classNames(Styles.submenuLink, {
53
+ [Styles.submenuLinkActive]: isActive === true,
54
+ }), isActive: typeof isActive === 'function' ? isActive : undefined, activeClassName: Styles.submenuLinkActive, children: title }, id));
22
55
  };
23
56
  /** Side Navigation options toggle */
24
57
  export const SideNavigationOptionsToggle = ({ expanded, onExpandedChange }) => withTooltip(_jsxs("div", { "data-cy": "navigation-left-options", "data-pendo": "navigation-left-options", className: classNames(Styles.optionsItem), onClick: () => onExpandedChange(!expanded), children: [_jsx("div", { className: Styles.optionsIconWrapper, children: _jsx(Icon, { className: Styles.optionsIcon, svg: expanded ? SvgCollapse : SvgExpand }) }), !!expanded && _jsx("span", { className: Styles.optionsItemText, children: "Collapse Menu" })] }), expanded ? undefined : 'Expand Menu', 'right');
@@ -1 +1 @@
1
- {"version":3,"file":"side-navigation.js","sourceRoot":"","sources":["../../../src/components/left-navigation/side-navigation.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"side-navigation.js","sourceRoot":"","sources":["../../../src/components/left-navigation/side-navigation.tsx"],"names":[],"mappings":"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"}
@@ -75,7 +75,7 @@
75
75
 
76
76
  .navigation-item-icon-wrapper {
77
77
  flex: 1;
78
- padding: @spacing-1;
78
+ padding: @spacing-1 @spacing-half;
79
79
  }
80
80
 
81
81
  .navigation-item-text {
@@ -187,6 +187,11 @@
187
187
  font-weight: @font-weight-semibold;
188
188
  }
189
189
 
190
+ .navigation-item-group-toggle[data-anv][data-anv] {
191
+ color: inherit;
192
+ font-weight: @font-weight-semibold;
193
+ }
194
+
190
195
  .navigation-icon[data-anv][data-anv] {
191
196
  height: 24px;
192
197
  width: 24px;
@@ -199,6 +204,114 @@
199
204
  }
200
205
  }
201
206
 
207
+ .submenu {
208
+ margin-left: @spacing-3;
209
+ padding-left: @spacing-1;
210
+ padding-right: @spacing-1;
211
+ margin-bottom: @spacing-1;
212
+ position: relative;
213
+
214
+ &:before {
215
+ content: '';
216
+ position: absolute;
217
+ border-left: 1px solid @color-neutral-100;
218
+ width: 1px;
219
+ top: @spacing-2;
220
+ bottom: @spacing-1;
221
+ left: 0;
222
+ }
223
+
224
+ .submenu-group-header[data-anv][data-anv] {
225
+ padding-top: @spacing-2;
226
+ padding-bottom: @spacing-half;
227
+ }
228
+
229
+ .submenu-link {
230
+ padding: @spacing-1;
231
+ }
232
+
233
+ .submenu-link-active {
234
+ position: relative;
235
+ }
236
+
237
+ .submenu-link-active:before {
238
+ content: '';
239
+ position: absolute;
240
+ background-color: @text-color-active;
241
+ width: 3px;
242
+ top: @spacing-1;
243
+ bottom: @spacing-1;
244
+ left: -12px;
245
+ }
246
+
247
+ .submenu-link:before:not(.submenu-link-active) {
248
+ background-color: @bg-color-hover;
249
+ }
250
+
251
+ > *,
252
+ > *[data-anv][data-anv] {
253
+ border-left: 3px solid transparent;
254
+ padding-left: @spacing-1;
255
+ }
256
+
257
+ > *:last-child {
258
+ margin-bottom: @spacing-0;
259
+ }
260
+ }
261
+
262
+ .submenu-popover {
263
+ margin-left: -@spacing-1;
264
+ margin-right: -@spacing-1;
265
+ min-width: 240px;
266
+
267
+ .submenu-group-header[data-anv][data-anv] {
268
+ margin-top: @spacing-2;
269
+ padding-bottom: @spacing-half;
270
+ }
271
+
272
+ .submenu-link {
273
+ padding-top: @spacing-1;
274
+ padding-bottom: @spacing-1;
275
+ }
276
+
277
+ .submenu-link-active {
278
+ background-color: @bg-color-active;
279
+ }
280
+ .submenu-link:hover:not(.submenu-link-active) {
281
+ background-color: @bg-color-hover;
282
+ }
283
+
284
+ > *,
285
+ > *[data-anv][data-anv] {
286
+ padding-left: @spacing-1;
287
+ padding-right: @spacing-1;
288
+ }
289
+ }
290
+
291
+ .submenu,
292
+ .submenu-popover {
293
+ display: flex;
294
+ flex-direction: column;
295
+
296
+ .submenu-group-header[data-anv][data-anv] {
297
+ color: @color-neutral-70;
298
+ }
299
+
300
+ .submenu-link {
301
+ color: @text-color;
302
+ font-size: @typescale-2;
303
+ border-radius: @border-radius-2;
304
+ }
305
+
306
+ .submenu-link-active {
307
+ color: @text-color-active;
308
+ }
309
+
310
+ .submenu-link:hover:not(.submenu-link-active) {
311
+ background-color: @bg-color-hover;
312
+ }
313
+ }
314
+
202
315
  .options-item {
203
316
  font-family: @base-font-family;
204
317
  color: @text-color;
@@ -7,4 +7,5 @@ declare const _default: {
7
7
  export default _default;
8
8
  export declare const DefaultSideNavigation: () => import("react/jsx-runtime").JSX.Element;
9
9
  export declare const SideNavigationLinksOnly: () => import("react/jsx-runtime").JSX.Element;
10
+ export declare const SideNavigationWithSubmenu: () => import("react/jsx-runtime").JSX.Element;
10
11
  //# sourceMappingURL=side-navigation.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"side-navigation.stories.d.ts","sourceRoot":"","sources":["../../../src/components/left-navigation/side-navigation.stories.tsx"],"names":[],"mappings":";;;;;;AAYA,wBAKE;AAEF,eAAO,MAAM,qBAAqB,+CAyBjC,CAAC;AAEF,eAAO,MAAM,uBAAuB,+CAwBnC,CAAC"}
1
+ {"version":3,"file":"side-navigation.stories.d.ts","sourceRoot":"","sources":["../../../src/components/left-navigation/side-navigation.stories.tsx"],"names":[],"mappings":";;;;;;AAcA,wBAKE;AAEF,eAAO,MAAM,qBAAqB,+CAyBjC,CAAC;AAEF,eAAO,MAAM,uBAAuB,+CAwBnC,CAAC;AAEF,eAAO,MAAM,yBAAyB,+CAwBrC,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
- import { items, withAnvil, withMemoryRouter } from '../../test/data';
3
+ import { LocationInfo, items, withAnvil, withMemoryRouter } from '../../test/data';
4
4
  import { SideNavigation } from './';
5
5
  const layout = (Story) => {
6
- return (_jsxs("div", { className: "d-f border", style: { height: '800px' }, children: [_jsx(Story, {}), _jsx("div", { className: "flex-grow-1 flex-basis-0" })] }));
6
+ return (_jsxs("div", { className: "d-f border", style: { height: '800px' }, children: [_jsx(Story, {}), _jsx("div", { className: "flex-grow-1 flex-basis-0 p-5", children: _jsx(LocationInfo, {}) })] }));
7
7
  };
8
8
  export default {
9
9
  title: 'Navigation/SideNavigation',
@@ -44,4 +44,20 @@ export const SideNavigationLinksOnly = () => {
44
44
  items.projects,
45
45
  ] }));
46
46
  };
47
+ export const SideNavigationWithSubmenu = () => {
48
+ const [expanded, setExpanded] = useState(false);
49
+ return (_jsx(SideNavigation, { expanded: expanded, onExpandedChange: setExpanded, items: [
50
+ items.dashboard,
51
+ items.calls,
52
+ items.schedule,
53
+ items.dispatch,
54
+ items.accountingWithSubmenu,
55
+ items.purchasingWithSubmenu,
56
+ items.followUps,
57
+ items.reports,
58
+ items.marketing,
59
+ items.priceBook,
60
+ items.projects,
61
+ ] }));
62
+ };
47
63
  //# sourceMappingURL=side-navigation.stories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"side-navigation.stories.js","sourceRoot":"","sources":["../../../src/components/left-navigation/side-navigation.stories.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAiB,QAAQ,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AAEpC,MAAM,MAAM,GAAG,CAAC,KAAoB,EAAE,EAAE;IACpC,OAAO,CACH,eAAK,SAAS,EAAC,YAAY,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAClD,KAAC,KAAK,KAAG,EACT,cAAK,SAAS,EAAC,0BAA0B,GAAG,IAC1C,CACT,CAAC;AACN,CAAC,CAAC;AACF,eAAe;IACX,KAAK,EAAE,2BAA2B;IAClC,SAAS,EAAE,cAAc;IACzB,UAAU,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,SAAS,CAAC;IACjD,UAAU,EAAE,EAAE;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACtC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,OAAO,CACH,KAAC,cAAc,IACX,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,WAAW,EAC7B,KAAK,EAAE;YACH,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,QAAQ;YACd,KAAK,CAAC,KAAK;YACX,KAAK,CAAC,UAAU;YAChB,KAAK,CAAC,QAAQ;YAEd,KAAK,CAAC,KAAK;YACX,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,SAAS;YAEf,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,WAAW;YACjB,KAAK,CAAC,OAAO;SAChB,EACD,QAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GACzB,CACL,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,EAAE;IACxC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,OAAO,CACH,KAAC,cAAc,IACX,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,WAAW,EAC7B,KAAK,EAAE;YACH,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,KAAK;YACX,KAAK,CAAC,QAAQ;YACd,KAAK,CAAC,QAAQ;YAEd,KAAK,CAAC,UAAU;YAChB,KAAK,CAAC,SAAS;YAEf,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,OAAO;YACb,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,SAAS;YAEf,KAAK,CAAC,QAAQ;SACjB,GACH,CACL,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"file":"side-navigation.stories.js","sourceRoot":"","sources":["../../../src/components/left-navigation/side-navigation.stories.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAiB,QAAQ,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AAEpC,MAAM,MAAM,GAAG,CAAC,KAAoB,EAAE,EAAE;IACpC,OAAO,CACH,eAAK,SAAS,EAAC,YAAY,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAClD,KAAC,KAAK,KAAG,EACT,cAAK,SAAS,EAAC,8BAA8B,YACzC,KAAC,YAAY,KAAG,GACd,IACJ,CACT,CAAC;AACN,CAAC,CAAC;AACF,eAAe;IACX,KAAK,EAAE,2BAA2B;IAClC,SAAS,EAAE,cAAc;IACzB,UAAU,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,SAAS,CAAC;IACjD,UAAU,EAAE,EAAE;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACtC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,OAAO,CACH,KAAC,cAAc,IACX,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,WAAW,EAC7B,KAAK,EAAE;YACH,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,QAAQ;YACd,KAAK,CAAC,KAAK;YACX,KAAK,CAAC,UAAU;YAChB,KAAK,CAAC,QAAQ;YAEd,KAAK,CAAC,KAAK;YACX,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,SAAS;YAEf,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,WAAW;YACjB,KAAK,CAAC,OAAO;SAChB,EACD,QAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GACzB,CACL,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,EAAE;IACxC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,OAAO,CACH,KAAC,cAAc,IACX,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,WAAW,EAC7B,KAAK,EAAE;YACH,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,KAAK;YACX,KAAK,CAAC,QAAQ;YACd,KAAK,CAAC,QAAQ;YAEd,KAAK,CAAC,UAAU;YAChB,KAAK,CAAC,SAAS;YAEf,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,OAAO;YACb,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,SAAS;YAEf,KAAK,CAAC,QAAQ;SACjB,GACH,CACL,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,EAAE;IAC1C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,OAAO,CACH,KAAC,cAAc,IACX,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,WAAW,EAC7B,KAAK,EAAE;YACH,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,KAAK;YACX,KAAK,CAAC,QAAQ;YACd,KAAK,CAAC,QAAQ;YAEd,KAAK,CAAC,qBAAqB;YAC3B,KAAK,CAAC,qBAAqB;YAE3B,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,OAAO;YACb,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,SAAS;YAEf,KAAK,CAAC,QAAQ;SACjB,GACH,CACL,CAAC;AACN,CAAC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { HeaderNavigationItemData, NavLinkComponentProps } from '../utils/navigation';
2
2
  export declare const NavLinkMock: import("react").ForwardRefExoticComponent<Omit<NavLinkComponentProps, "ref"> & import("react").RefAttributes<any>>;
3
+ export declare const LocationInfo: () => import("react/jsx-runtime").JSX.Element;
3
4
  export declare const withMemoryRouter: (Story: any) => import("react/jsx-runtime").JSX.Element;
4
5
  export declare const withAnvil: (Story: any) => import("react/jsx-runtime").JSX.Element;
5
6
  export declare const InventoryIcon: () => import("react/jsx-runtime").JSX.Element;
@@ -14,7 +15,9 @@ export declare const items: {
14
15
  followUps: HeaderNavigationItemData;
15
16
  inventory: HeaderNavigationItemData;
16
17
  purchasing: HeaderNavigationItemData;
18
+ purchasingWithSubmenu: HeaderNavigationItemData;
17
19
  accounting: HeaderNavigationItemData;
20
+ accountingWithSubmenu: HeaderNavigationItemData;
18
21
  marketing: HeaderNavigationItemData;
19
22
  priceBook: HeaderNavigationItemData;
20
23
  pointOfSale: HeaderNavigationItemData;
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/test/data.tsx"],"names":[],"mappings":"AAwCA,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAItF,eAAO,MAAM,WAAW,oHAwBvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,UAAW,GAAG,4CAM1C,CAAC;AAEF,eAAO,MAAM,SAAS,UAAW,GAAG,4CAInC,CAAC;AAEF,eAAO,MAAM,aAAa,+CAKzB,CAAC;AAEF,eAAO,MAAM,UAAU,+CAetB,CAAC;AAeF,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;CAkFjB,CAAC;AAEF,eAAO,MAAM,sBAAsB,+CAuBlC,CAAC"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/test/data.tsx"],"names":[],"mappings":"AAwCA,OAAO,EACH,wBAAwB,EAGxB,qBAAqB,EACxB,MAAM,qBAAqB,CAAC;AAI7B,eAAO,MAAM,WAAW,oHAyBvB,CAAC;AAEF,eAAO,MAAM,YAAY,+CAIxB,CAAC;AAEF,eAAO,MAAM,gBAAgB,UAAW,GAAG,4CAM1C,CAAC;AAEF,eAAO,MAAM,SAAS,UAAW,GAAG,4CAInC,CAAC;AAEF,eAAO,MAAM,aAAa,+CAKzB,CAAC;AAEF,eAAO,MAAM,UAAU,+CAetB,CAAC;AA6CF,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;CAoHjB,CAAC;AAEF,eAAO,MAAM,sBAAsB,+CAuBlC,CAAC"}
package/dist/test/data.js CHANGED
@@ -30,7 +30,7 @@ import SvgScheduleActive from '@servicetitan/anvil2/assets/icons/st/gnav_schedul
30
30
  import SvgSchedule from '@servicetitan/anvil2/assets/icons/st/gnav_schedule_inactive.svg';
31
31
  import SvgTasksActive from '@servicetitan/anvil2/assets/icons/st/gnav_tasks_active.svg';
32
32
  import SvgTasks from '@servicetitan/anvil2/assets/icons/st/gnav_tasks_inactive.svg';
33
- import { Popover } from '@servicetitan/design-system';
33
+ import { BodyText, Popover } from '@servicetitan/design-system';
34
34
  import classNames from 'classnames';
35
35
  import { forwardRef, useState } from 'react';
36
36
  // needed only for storybook and added in root dependencies
@@ -42,26 +42,53 @@ import * as Styles from './data-stories.module.less';
42
42
  export const NavLinkMock = forwardRef(({ to, children, activeClassName, className, isActive, ...rest }, ref) => {
43
43
  const history = useHistory();
44
44
  const location = useLocation();
45
- const linkActive = location.pathname.replace('/', '') === to;
46
- return (_jsx("a", { ...rest, className: classNames(className, linkActive ? activeClassName : ''), href: to, onClick: e => {
45
+ const linkActive = location.pathname.startsWith(to);
46
+ return (_jsx("a", { ...rest, onClick: e => {
47
47
  e.preventDefault();
48
+ e.stopPropagation();
48
49
  if (!to.startsWith('http')) {
49
- history.push(to);
50
+ history.replace(to);
50
51
  }
51
- }, ref: ref, children: children }));
52
+ }, className: classNames(className, linkActive ? activeClassName : ''), href: to, ref: ref, children: children }));
52
53
  });
54
+ export const LocationInfo = () => {
55
+ const location = useLocation();
56
+ return _jsxs(BodyText, { children: ["current location - ", location.pathname] });
57
+ };
53
58
  export const withMemoryRouter = (Story) => (_jsx(MemoryRouter, { children: _jsx(NavigationComponentContext.Provider, { value: NavLinkMock, children: _jsx(Story, {}) }) }));
54
59
  export const withAnvil = (Story) => (_jsx(AnvilProvider, { className: Styles.fixIcons, children: _jsx(Story, {}) }));
55
60
  export const InventoryIcon = () => (_jsxs("svg", { width: "20", xmlns: "http://www.w3.org/2000/svg", viewBox: "-293 385 24 24", fill: "currentColor", children: [_jsx("polyline", { points: "-288,400.9 -282,404.3 -282,397.6 -288,394.2 -288,400.9 " }), _jsx("path", { d: "M-272,401.5c0,0.4-0.2,0.7-0.5,0.9l-7.9,4.4c-0.2,0.1-0.4,0.2-0.6,0.2s-0.4-0.1-0.6-0.2l-7.9-4.4c-0.3-0.2-0.5-0.5-0.5-0.9v-9c0-0.4,0.2-0.7,0.5-0.9l7.9-4.4c0.2-0.1,0.4-0.2,0.6-0.2s0.4,0.1,0.6,0.2l7.9,4.4c0.3,0.2,0.5,0.5,0.5,0.9V401.5 M-287,392.5 l6,3.4l5.9-3.3l-5.9-3.4L-287,392.5 M-274,400.9v-6.7l-6,3.4v6.7L-274,400.9z" })] }));
56
61
  export const SearchIcon = () => (_jsx("svg", { width: "1em", height: "1em", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("g", { transform: "translate(0,4)", children: _jsx("path", { d: "M0 15.7992V13.9992H12V15.7992H0ZM0 9.49922V7.69922H6V9.49922H0ZM0 3.19922V1.39922H6V3.19922H0ZM22.74 15.7992L17.94 10.9992C17.42 11.3992 16.86 11.6992 16.26 11.8992C15.66 12.0992 15.04 12.1992 14.4 12.1992C12.74 12.1992 11.325 11.6142 10.155 10.4442C8.985 9.27422 8.4 7.85922 8.4 6.19922C8.4 4.53922 8.985 3.12422 10.155 1.95422C11.325 0.784219 12.74 0.199219 14.4 0.199219C16.06 0.199219 17.475 0.784219 18.645 1.95422C19.815 3.12422 20.4 4.53922 20.4 6.19922C20.4 6.83922 20.3 7.45922 20.1 8.05922C19.9 8.65922 19.6 9.21922 19.2 9.73922L24 14.5392L22.74 15.7992ZM14.393 10.3992C15.5577 10.3992 16.55 9.99157 17.37 9.17627C18.19 8.36099 18.6 7.37099 18.6 6.20627C18.6 5.04157 18.1923 4.04922 17.377 3.22922C16.5618 2.40922 15.5718 1.99922 14.407 1.99922C13.2423 1.99922 12.25 2.40687 11.43 3.22217C10.61 4.03745 10.2 5.02745 10.2 6.19217C10.2 7.35687 10.6077 8.34922 11.423 9.16922C12.2382 9.98922 13.2282 10.3992 14.393 10.3992Z", fill: "white" }) }) }));
57
62
  const getItem = (id, data) => ({
58
63
  id,
59
- to: id,
64
+ to: '/' + id,
60
65
  title: id[0].toUpperCase() + id.substring(1),
61
66
  hint: id,
62
67
  icon: undefined,
63
68
  iconActive: undefined,
64
69
  ...(data !== null && data !== void 0 ? data : {}),
70
+ submenu: data.submenu
71
+ ? {
72
+ ...data.submenu,
73
+ groups: data.submenu.groups.map(group => ({
74
+ ...group,
75
+ links: group.links.map(link => ({
76
+ ...link,
77
+ to: `/${id}/${link.to}`,
78
+ })),
79
+ })),
80
+ }
81
+ : undefined,
82
+ });
83
+ const getSubItem = (id, data) => ({
84
+ id,
85
+ to: id,
86
+ title: id[0].toUpperCase() + id.substring(1),
87
+ ...(data !== null && data !== void 0 ? data : {}),
88
+ });
89
+ const getGroup = (title, links) => ({
90
+ title,
91
+ links,
65
92
  });
66
93
  export const items = {
67
94
  calendar: getItem('calendar', {
@@ -109,11 +136,45 @@ export const items = {
109
136
  iconActive: SvgInventoryActive,
110
137
  }),
111
138
  purchasing: getItem('purchasing', { iconComponent: InventoryIcon }),
139
+ purchasingWithSubmenu: getItem('purchasing', {
140
+ iconName: 'toys',
141
+ icon: SvgInventory,
142
+ iconActive: SvgInventoryActive,
143
+ submenu: {
144
+ groups: [
145
+ getGroup('Purchase', [
146
+ getSubItem('repl', { title: 'Replenishment' }),
147
+ getSubItem('orders', { title: 'Purchase Orders' }),
148
+ getSubItem('receipts', { title: 'Receipts' }),
149
+ getSubItem('returns', { title: 'Returns' }),
150
+ ]),
151
+ ],
152
+ },
153
+ }),
112
154
  accounting: getItem('accounting', {
113
155
  iconName: 'assignment',
114
156
  icon: SvgAccounting,
115
157
  iconActive: SvgAccountingActive,
116
158
  }),
159
+ accountingWithSubmenu: getItem('accounting', {
160
+ iconName: 'assignment',
161
+ icon: SvgAccounting,
162
+ iconActive: SvgAccountingActive,
163
+ submenu: {
164
+ groups: [
165
+ getGroup('Accounts Receivable', [
166
+ getSubItem('ar', { title: 'AR Management' }),
167
+ getSubItem('export', { title: 'Batch/Export Transactions' }),
168
+ getSubItem('invoices', { title: 'Invoices' }),
169
+ getSubItem('payments', { title: 'Customer Payments' }),
170
+ getSubItem('deposits', { title: 'Bank Deposits' }),
171
+ ]),
172
+ getGroup('Accounts Payable', [getSubItem('bills', { title: 'Bills' })]),
173
+ getGroup('Financing', [getSubItem('dashboard', { title: 'Dashboard' })]),
174
+ getGroup('Others', [getSubItem('at', { title: 'Accounting Audit Trail' })]),
175
+ ],
176
+ },
177
+ }),
117
178
  marketing: getItem('marketing', {
118
179
  iconName: 'bullhorn',
119
180
  icon: SvgMarketing,
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/test/data.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/test/data.tsx"],"names":[],"mappings":"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"}
@@ -2,17 +2,9 @@ import { IconProps } from '@servicetitan/anvil2';
2
2
  import { IconPropsStrict } from '@servicetitan/design-system';
3
3
  import { FC, HTMLAttributeAnchorTarget, ReactNode } from 'react';
4
4
  import { CounterTagPropsType } from '../components/counter-tag';
5
- export interface HeaderNavigationItemData {
6
- /** link id */
7
- id: string;
8
- /** link href */
9
- to: string;
10
- /** link title */
11
- title: string;
5
+ export interface HeaderNavigationItemData extends HeaderNavigationItemLinkProps {
12
6
  /** link description */
13
7
  hint: string;
14
- /** callback to return active state. By default, it compares link href with current pathname */
15
- isActive?: boolean | ((pathname: string) => boolean);
16
8
  /** flag if the link is not shown (based on FG and/or user permissions) */
17
9
  isHidden?: boolean;
18
10
  /** custom className (can be used for mdi icons) */
@@ -29,6 +21,28 @@ export interface HeaderNavigationItemData {
29
21
  counter?: CounterTagPropsType;
30
22
  /** class name of link item */
31
23
  className?: string;
24
+ /** optional submenu of link item */
25
+ submenu?: HeaderNavigationItemSubmenu;
26
+ }
27
+ export interface HeaderNavigationItemLinkProps {
28
+ /** link id */
29
+ id: string;
30
+ /** link href */
31
+ to: string;
32
+ /** link title */
33
+ title: string;
34
+ /** callback to return active state. By default, it compares link href with current pathname */
35
+ isActive?: boolean | ((pathname: string) => boolean);
36
+ }
37
+ export interface HeaderNavigationItemSubmenu {
38
+ /** submenu groups */
39
+ groups: HeaderNavigationItemSubmenuGroup[];
40
+ }
41
+ export interface HeaderNavigationItemSubmenuGroup {
42
+ /** submenu group title */
43
+ title: string;
44
+ /** submenu group links */
45
+ links: HeaderNavigationItemLinkProps[];
32
46
  }
33
47
  export interface NavLinkComponentPropsStrict {
34
48
  to: string;
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/utils/navigation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/utils/navigation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicetitan/navigation",
3
- "version": "8.1.7",
3
+ "version": "8.2.0",
4
4
  "description": "Navigation components",
5
5
  "repository": {
6
6
  "type": "git",
@@ -43,5 +43,5 @@
43
43
  "less": true,
44
44
  "webpack": false
45
45
  },
46
- "gitHead": "643b0ec4f793cf32a7db4fa1c465a9f6c2608af4"
46
+ "gitHead": "e8f66c1be106910e7b85489c315deab3245a8537"
47
47
  }
@@ -1,4 +1,4 @@
1
- import { withAnvil, withMemoryRouter } from '../test/data';
1
+ import { LocationInfo, withAnvil, withMemoryRouter } from '../test/data';
2
2
  import {
3
3
  WithAllMonolithData,
4
4
  WithAllMonolithDataCommercial,
@@ -6,6 +6,7 @@ import {
6
6
  import {
7
7
  DefaultSideNavigation,
8
8
  SideNavigationLinksOnly,
9
+ SideNavigationWithSubmenu,
9
10
  } from './left-navigation/side-navigation.stories';
10
11
 
11
12
  export default {
@@ -49,3 +50,17 @@ export const LeftNavLayoutOnlyLinks = () => {
49
50
  </div>
50
51
  );
51
52
  };
53
+
54
+ export const LeftNavLayoutSubmenu = () => {
55
+ return (
56
+ <div className="d-f border flex-column" style={{ height: '800px' }}>
57
+ <WithAllMonolithDataCommercial />
58
+ <div className="flex-grow-1 flex-basis-0 d-f">
59
+ <SideNavigationWithSubmenu />
60
+ <div className="flex-grow-1 flex-basis-0 p-5">
61
+ <LocationInfo />
62
+ </div>
63
+ </div>
64
+ </div>
65
+ );
66
+ };
@@ -75,7 +75,7 @@
75
75
 
76
76
  .navigation-item-icon-wrapper {
77
77
  flex: 1;
78
- padding: @spacing-1;
78
+ padding: @spacing-1 @spacing-half;
79
79
  }
80
80
 
81
81
  .navigation-item-text {
@@ -187,6 +187,11 @@
187
187
  font-weight: @font-weight-semibold;
188
188
  }
189
189
 
190
+ .navigation-item-group-toggle[data-anv][data-anv] {
191
+ color: inherit;
192
+ font-weight: @font-weight-semibold;
193
+ }
194
+
190
195
  .navigation-icon[data-anv][data-anv] {
191
196
  height: 24px;
192
197
  width: 24px;
@@ -199,6 +204,114 @@
199
204
  }
200
205
  }
201
206
 
207
+ .submenu {
208
+ margin-left: @spacing-3;
209
+ padding-left: @spacing-1;
210
+ padding-right: @spacing-1;
211
+ margin-bottom: @spacing-1;
212
+ position: relative;
213
+
214
+ &:before {
215
+ content: '';
216
+ position: absolute;
217
+ border-left: 1px solid @color-neutral-100;
218
+ width: 1px;
219
+ top: @spacing-2;
220
+ bottom: @spacing-1;
221
+ left: 0;
222
+ }
223
+
224
+ .submenu-group-header[data-anv][data-anv] {
225
+ padding-top: @spacing-2;
226
+ padding-bottom: @spacing-half;
227
+ }
228
+
229
+ .submenu-link {
230
+ padding: @spacing-1;
231
+ }
232
+
233
+ .submenu-link-active {
234
+ position: relative;
235
+ }
236
+
237
+ .submenu-link-active:before {
238
+ content: '';
239
+ position: absolute;
240
+ background-color: @text-color-active;
241
+ width: 3px;
242
+ top: @spacing-1;
243
+ bottom: @spacing-1;
244
+ left: -12px;
245
+ }
246
+
247
+ .submenu-link:before:not(.submenu-link-active) {
248
+ background-color: @bg-color-hover;
249
+ }
250
+
251
+ > *,
252
+ > *[data-anv][data-anv] {
253
+ border-left: 3px solid transparent;
254
+ padding-left: @spacing-1;
255
+ }
256
+
257
+ > *:last-child {
258
+ margin-bottom: @spacing-0;
259
+ }
260
+ }
261
+
262
+ .submenu-popover {
263
+ margin-left: -@spacing-1;
264
+ margin-right: -@spacing-1;
265
+ min-width: 240px;
266
+
267
+ .submenu-group-header[data-anv][data-anv] {
268
+ margin-top: @spacing-2;
269
+ padding-bottom: @spacing-half;
270
+ }
271
+
272
+ .submenu-link {
273
+ padding-top: @spacing-1;
274
+ padding-bottom: @spacing-1;
275
+ }
276
+
277
+ .submenu-link-active {
278
+ background-color: @bg-color-active;
279
+ }
280
+ .submenu-link:hover:not(.submenu-link-active) {
281
+ background-color: @bg-color-hover;
282
+ }
283
+
284
+ > *,
285
+ > *[data-anv][data-anv] {
286
+ padding-left: @spacing-1;
287
+ padding-right: @spacing-1;
288
+ }
289
+ }
290
+
291
+ .submenu,
292
+ .submenu-popover {
293
+ display: flex;
294
+ flex-direction: column;
295
+
296
+ .submenu-group-header[data-anv][data-anv] {
297
+ color: @color-neutral-70;
298
+ }
299
+
300
+ .submenu-link {
301
+ color: @text-color;
302
+ font-size: @typescale-2;
303
+ border-radius: @border-radius-2;
304
+ }
305
+
306
+ .submenu-link-active {
307
+ color: @text-color-active;
308
+ }
309
+
310
+ .submenu-link:hover:not(.submenu-link-active) {
311
+ background-color: @bg-color-hover;
312
+ }
313
+ }
314
+
202
315
  .options-item {
203
316
  font-family: @base-font-family;
204
317
  color: @text-color;
@@ -6,6 +6,7 @@ export const navigationIconInactive: string;
6
6
  export const navigationItem: string;
7
7
  export const navigationItemActive: string;
8
8
  export const navigationItemCounter: string;
9
+ export const navigationItemGroupToggle: string;
9
10
  export const navigationItemIconSwitch: string;
10
11
  export const navigationItemIconWrapper: string;
11
12
  export const navigationItemText: string;
@@ -19,4 +20,9 @@ export const sideNavContent: string;
19
20
  export const sideNavExpanded: string;
20
21
  export const sideNavSlim: string;
21
22
  export const sideNavTop: string;
23
+ export const submenu: string;
24
+ export const submenuGroupHeader: string;
25
+ export const submenuLink: string;
26
+ export const submenuLinkActive: string;
27
+ export const submenuPopover: string;
22
28
 
@@ -1,12 +1,14 @@
1
1
  import { ComponentType, useState } from 'react';
2
- import { items, withAnvil, withMemoryRouter } from '../../test/data';
2
+ import { LocationInfo, items, withAnvil, withMemoryRouter } from '../../test/data';
3
3
  import { SideNavigation } from './';
4
4
 
5
5
  const layout = (Story: ComponentType) => {
6
6
  return (
7
7
  <div className="d-f border" style={{ height: '800px' }}>
8
8
  <Story />
9
- <div className="flex-grow-1 flex-basis-0" />
9
+ <div className="flex-grow-1 flex-basis-0 p-5">
10
+ <LocationInfo />
11
+ </div>
10
12
  </div>
11
13
  );
12
14
  };
@@ -69,3 +71,29 @@ export const SideNavigationLinksOnly = () => {
69
71
  />
70
72
  );
71
73
  };
74
+
75
+ export const SideNavigationWithSubmenu = () => {
76
+ const [expanded, setExpanded] = useState(false);
77
+ return (
78
+ <SideNavigation
79
+ expanded={expanded}
80
+ onExpandedChange={setExpanded}
81
+ items={[
82
+ items.dashboard,
83
+ items.calls,
84
+ items.schedule,
85
+ items.dispatch,
86
+
87
+ items.accountingWithSubmenu,
88
+ items.purchasingWithSubmenu,
89
+
90
+ items.followUps,
91
+ items.reports,
92
+ items.marketing,
93
+ items.priceBook,
94
+
95
+ items.projects,
96
+ ]}
97
+ />
98
+ );
99
+ };
@@ -1,9 +1,27 @@
1
- import { Icon } from '@servicetitan/anvil2';
1
+ import { Icon, Popover, PopoverTriggerProps, Text } from '@servicetitan/anvil2';
2
+ import SvgGroupCollapse from '@servicetitan/anvil2/assets/icons/material/round/expand_less.svg';
3
+ import SvgGroupExpand from '@servicetitan/anvil2/assets/icons/material/round/expand_more.svg';
2
4
  import SvgCollapse from '@servicetitan/anvil2/assets/icons/st/gnav_menu_collapse.svg';
3
5
  import SvgExpand from '@servicetitan/anvil2/assets/icons/st/gnav_menu_expand.svg';
6
+ import { Collapsible, Headline } from '@servicetitan/design-system';
7
+
4
8
  import classNames from 'classnames';
5
- import { FC, Fragment, useContext } from 'react';
6
- import { HeaderNavigationItemData, NavLinkComponentProps } from '../../utils/navigation';
9
+ import {
10
+ CSSProperties,
11
+ FC,
12
+ Fragment,
13
+ MouseEvent,
14
+ ReactElement,
15
+ useCallback,
16
+ useContext,
17
+ useState,
18
+ } from 'react';
19
+ import {
20
+ HeaderNavigationItemData,
21
+ HeaderNavigationItemLinkProps,
22
+ HeaderNavigationItemSubmenu,
23
+ NavLinkComponentProps,
24
+ } from '../../utils/navigation';
7
25
  import { NavigationComponentContext } from '../../utils/navigation-context';
8
26
  import { CounterTag } from '../counter-tag';
9
27
  import * as Styles from './side-navigation.module.less';
@@ -59,14 +77,23 @@ export const SideNavigation: FC<SideNavigationProps> = ({
59
77
  </Fragment>
60
78
  )}
61
79
  <div className={Styles.sideNavContent} data-cy="navigation-items">
62
- {items?.map(item => (
63
- <SideNavigationItem
64
- key={item.id}
65
- expanded={expanded}
66
- navigationComponent={NavigationComponent}
67
- {...item}
68
- />
69
- ))}
80
+ {items?.map(item =>
81
+ item.submenu ? (
82
+ <SideNavigationGroupItem
83
+ key={item.id}
84
+ expanded={expanded}
85
+ navigationComponent={NavigationComponent}
86
+ {...item}
87
+ />
88
+ ) : (
89
+ <SideNavigationItem
90
+ key={item.id}
91
+ expanded={expanded}
92
+ navigationComponent={NavigationComponent}
93
+ {...item}
94
+ />
95
+ )
96
+ )}
70
97
  </div>
71
98
  <div className={Styles.divider} />
72
99
  <div className={Styles.sideNavBottom}>
@@ -79,14 +106,19 @@ export const SideNavigation: FC<SideNavigationProps> = ({
79
106
  );
80
107
  };
81
108
 
82
- interface SideNavigationItemProps extends HeaderNavigationItemData {
109
+ interface NavigationComponentProps {
83
110
  navigationComponent: FC<NavLinkComponentProps>;
111
+ }
112
+
113
+ interface SideNavigationItemProps extends HeaderNavigationItemData, NavigationComponentProps {
84
114
  expanded?: boolean;
115
+ submenuExpanded?: boolean;
85
116
  }
86
117
 
87
118
  /** Side Navigation menu item */
88
119
  const SideNavigationItem: FC<SideNavigationItemProps> = ({
89
120
  id,
121
+ submenuExpanded,
90
122
  to,
91
123
  title,
92
124
  hint,
@@ -101,6 +133,7 @@ const SideNavigationItem: FC<SideNavigationItemProps> = ({
101
133
  expanded,
102
134
  }) => {
103
135
  const iconSwitch = !!icon && !!iconActive && !IconComponent;
136
+ const hasSubmenu = submenuExpanded === true || submenuExpanded === false;
104
137
 
105
138
  return (
106
139
  <NavigationComponent
@@ -150,6 +183,12 @@ const SideNavigationItem: FC<SideNavigationItemProps> = ({
150
183
  {!!counter && (
151
184
  <CounterTag data={counter} className={Styles.navigationItemCounter} />
152
185
  )}
186
+ {hasSubmenu && !!expanded && (
187
+ <Icon
188
+ svg={submenuExpanded ? SvgGroupCollapse : SvgGroupExpand}
189
+ className={Styles.navigationItemGroupToggle}
190
+ />
191
+ )}
153
192
  </div>
154
193
 
155
194
  {!expanded && <div className={Styles.navigationItemText}>{title}</div>}
@@ -157,6 +196,119 @@ const SideNavigationItem: FC<SideNavigationItemProps> = ({
157
196
  );
158
197
  };
159
198
 
199
+ const submenuPopoverStyles = { '--background-color-strong': '#24323C' } as CSSProperties;
200
+
201
+ /** Side Navigation menu item */
202
+ const SideNavigationGroupItem: FC<SideNavigationItemProps> = ({ ...props }) => {
203
+ const [submenuExpanded, setSubmenuExpanded] = useState(false);
204
+ const triggerClick = useCallback(
205
+ (e: MouseEvent<HTMLDivElement>) => {
206
+ e.stopPropagation();
207
+ e.preventDefault();
208
+
209
+ if (props.expanded) {
210
+ setSubmenuExpanded(exp => !exp);
211
+ }
212
+ },
213
+ [props.expanded]
214
+ );
215
+
216
+ return props.expanded ? (
217
+ <Fragment>
218
+ <div onClickCapture={triggerClick}>
219
+ <SideNavigationItem {...props} submenuExpanded={submenuExpanded} />
220
+ </div>
221
+ <Collapsible open={submenuExpanded} animate>
222
+ <div className={Styles.submenu}>
223
+ <SideNavigationGroupContent
224
+ groups={props.submenu?.groups ?? []}
225
+ navigationComponent={props.navigationComponent}
226
+ />
227
+ </div>
228
+ </Collapsible>
229
+ </Fragment>
230
+ ) : (
231
+ <Popover placement="right-start" openOnHover>
232
+ <Popover.Trigger>
233
+ {(triggerProps: PopoverTriggerProps) => (
234
+ <div {...triggerProps} onClickCapture={triggerClick}>
235
+ <SideNavigationItem {...props} />
236
+ </div>
237
+ )}
238
+ </Popover.Trigger>
239
+ <Popover.Content style={submenuPopoverStyles}>
240
+ <div className={Styles.submenuPopover}>
241
+ <Headline size="small" className="c-white m-b-half-i m-t-1">
242
+ {props.title}
243
+ </Headline>
244
+ <SideNavigationGroupContent
245
+ groups={props.submenu?.groups ?? []}
246
+ navigationComponent={props.navigationComponent}
247
+ />
248
+ </div>
249
+ </Popover.Content>
250
+ </Popover>
251
+ );
252
+ };
253
+ const SideNavigationGroupContent: FC<HeaderNavigationItemSubmenu & NavigationComponentProps> = ({
254
+ groups,
255
+ navigationComponent,
256
+ }) => {
257
+ return (
258
+ <Fragment>
259
+ {groups.reduce((out, group) => {
260
+ if (!group.links.length) {
261
+ return out;
262
+ }
263
+
264
+ out.push(
265
+ <Text
266
+ key=":group:title"
267
+ variant="eyebrow"
268
+ className={Styles.submenuGroupHeader}
269
+ >
270
+ {group.title}
271
+ </Text>
272
+ );
273
+
274
+ out.push(
275
+ ...group.links.map(link => (
276
+ <SideNavigationGroupLink
277
+ key={link.id}
278
+ {...link}
279
+ navigationComponent={navigationComponent}
280
+ />
281
+ ))
282
+ );
283
+ return out;
284
+ }, [] as ReactElement[])}
285
+ </Fragment>
286
+ );
287
+ };
288
+ const SideNavigationGroupLink: FC<HeaderNavigationItemLinkProps & NavigationComponentProps> = ({
289
+ id,
290
+ title,
291
+ to,
292
+ isActive,
293
+ navigationComponent: NavigationComponent,
294
+ }) => {
295
+ return (
296
+ <NavigationComponent
297
+ data-cy={`navigation-item-${id}`}
298
+ data-pendo={`navigation-item-${id}`}
299
+ key={id}
300
+ to={to}
301
+ className={classNames(Styles.submenuLink, {
302
+ [Styles.submenuLinkActive]: isActive === true,
303
+ })}
304
+ isActive={typeof isActive === 'function' ? isActive : undefined}
305
+ activeClassName={Styles.submenuLinkActive}
306
+ >
307
+ {title}
308
+ </NavigationComponent>
309
+ );
310
+ };
311
+
160
312
  /** Side Navigation options toggle */
161
313
  export const SideNavigationOptionsToggle: FC<{
162
314
  expanded?: boolean;
package/src/test/data.tsx CHANGED
@@ -30,7 +30,7 @@ import SvgSchedule from '@servicetitan/anvil2/assets/icons/st/gnav_schedule_inac
30
30
  import SvgTasksActive from '@servicetitan/anvil2/assets/icons/st/gnav_tasks_active.svg';
31
31
  import SvgTasks from '@servicetitan/anvil2/assets/icons/st/gnav_tasks_inactive.svg';
32
32
 
33
- import { Popover } from '@servicetitan/design-system';
33
+ import { BodyText, Popover } from '@servicetitan/design-system';
34
34
 
35
35
  import classNames from 'classnames';
36
36
  import { forwardRef, useState } from 'react';
@@ -38,7 +38,12 @@ import { forwardRef, useState } from 'react';
38
38
  // eslint-disable-next-line import/no-extraneous-dependencies
39
39
  import { MemoryRouter, useHistory, useLocation } from 'react-router-dom';
40
40
  import { HeaderNavigationTrigger } from '../components/links';
41
- import { HeaderNavigationItemData, NavLinkComponentProps } from '../utils/navigation';
41
+ import {
42
+ HeaderNavigationItemData,
43
+ HeaderNavigationItemLinkProps,
44
+ HeaderNavigationItemSubmenuGroup,
45
+ NavLinkComponentProps,
46
+ } from '../utils/navigation';
42
47
  import { NavigationComponentContext } from '../utils/navigation-context';
43
48
  import * as Styles from './data-stories.module.less';
44
49
 
@@ -46,20 +51,21 @@ export const NavLinkMock = forwardRef<any, NavLinkComponentProps>(
46
51
  ({ to, children, activeClassName, className, isActive, ...rest }, ref) => {
47
52
  const history = useHistory();
48
53
  const location = useLocation();
49
- const linkActive = location.pathname.replace('/', '') === to;
54
+ const linkActive = location.pathname.startsWith(to);
50
55
 
51
56
  return (
52
57
  <a
53
58
  {...rest}
54
- className={classNames(className, linkActive ? activeClassName : '')}
55
- href={to}
56
59
  onClick={e => {
57
60
  e.preventDefault();
61
+ e.stopPropagation();
58
62
 
59
63
  if (!to.startsWith('http')) {
60
- history.push(to);
64
+ history.replace(to);
61
65
  }
62
66
  }}
67
+ className={classNames(className, linkActive ? activeClassName : '')}
68
+ href={to}
63
69
  ref={ref}
64
70
  >
65
71
  {children}
@@ -68,6 +74,12 @@ export const NavLinkMock = forwardRef<any, NavLinkComponentProps>(
68
74
  }
69
75
  );
70
76
 
77
+ export const LocationInfo = () => {
78
+ const location = useLocation();
79
+
80
+ return <BodyText>current location - {location.pathname}</BodyText>;
81
+ };
82
+
71
83
  export const withMemoryRouter = (Story: any) => (
72
84
  <MemoryRouter>
73
85
  <NavigationComponentContext.Provider value={NavLinkMock}>
@@ -111,12 +123,42 @@ const getItem = (
111
123
  data: Partial<HeaderNavigationItemData>
112
124
  ): HeaderNavigationItemData => ({
113
125
  id,
114
- to: id,
126
+ to: '/' + id,
115
127
  title: id[0].toUpperCase() + id.substring(1),
116
128
  hint: id,
117
129
  icon: undefined,
118
130
  iconActive: undefined,
119
131
  ...(data ?? {}),
132
+ submenu: data.submenu
133
+ ? {
134
+ ...data.submenu,
135
+ groups: data.submenu.groups.map(group => ({
136
+ ...group,
137
+ links: group.links.map(link => ({
138
+ ...link,
139
+ to: `/${id}/${link.to}`,
140
+ })),
141
+ })),
142
+ }
143
+ : undefined,
144
+ });
145
+
146
+ const getSubItem = (
147
+ id: string,
148
+ data: Partial<HeaderNavigationItemLinkProps>
149
+ ): HeaderNavigationItemLinkProps => ({
150
+ id,
151
+ to: id,
152
+ title: id[0].toUpperCase() + id.substring(1),
153
+ ...(data ?? {}),
154
+ });
155
+
156
+ const getGroup = (
157
+ title: string,
158
+ links: HeaderNavigationItemLinkProps[]
159
+ ): HeaderNavigationItemSubmenuGroup => ({
160
+ title,
161
+ links,
120
162
  });
121
163
 
122
164
  export const items = {
@@ -165,11 +207,45 @@ export const items = {
165
207
  iconActive: SvgInventoryActive,
166
208
  }),
167
209
  purchasing: getItem('purchasing', { iconComponent: InventoryIcon }),
210
+ purchasingWithSubmenu: getItem('purchasing', {
211
+ iconName: 'toys',
212
+ icon: SvgInventory,
213
+ iconActive: SvgInventoryActive,
214
+ submenu: {
215
+ groups: [
216
+ getGroup('Purchase', [
217
+ getSubItem('repl', { title: 'Replenishment' }),
218
+ getSubItem('orders', { title: 'Purchase Orders' }),
219
+ getSubItem('receipts', { title: 'Receipts' }),
220
+ getSubItem('returns', { title: 'Returns' }),
221
+ ]),
222
+ ],
223
+ },
224
+ }),
168
225
  accounting: getItem('accounting', {
169
226
  iconName: 'assignment',
170
227
  icon: SvgAccounting,
171
228
  iconActive: SvgAccountingActive,
172
229
  }),
230
+ accountingWithSubmenu: getItem('accounting', {
231
+ iconName: 'assignment',
232
+ icon: SvgAccounting,
233
+ iconActive: SvgAccountingActive,
234
+ submenu: {
235
+ groups: [
236
+ getGroup('Accounts Receivable', [
237
+ getSubItem('ar', { title: 'AR Management' }),
238
+ getSubItem('export', { title: 'Batch/Export Transactions' }),
239
+ getSubItem('invoices', { title: 'Invoices' }),
240
+ getSubItem('payments', { title: 'Customer Payments' }),
241
+ getSubItem('deposits', { title: 'Bank Deposits' }),
242
+ ]),
243
+ getGroup('Accounts Payable', [getSubItem('bills', { title: 'Bills' })]),
244
+ getGroup('Financing', [getSubItem('dashboard', { title: 'Dashboard' })]),
245
+ getGroup('Others', [getSubItem('at', { title: 'Accounting Audit Trail' })]),
246
+ ],
247
+ },
248
+ }),
173
249
  marketing: getItem('marketing', {
174
250
  iconName: 'bullhorn',
175
251
  icon: SvgMarketing,
@@ -3,22 +3,10 @@ import { IconPropsStrict } from '@servicetitan/design-system';
3
3
  import { FC, HTMLAttributeAnchorTarget, ReactNode } from 'react';
4
4
  import { CounterTagPropsType } from '../components/counter-tag';
5
5
 
6
- export interface HeaderNavigationItemData {
7
- /** link id */
8
- id: string;
9
-
10
- /** link href */
11
- to: string;
12
-
13
- /** link title */
14
- title: string;
15
-
6
+ export interface HeaderNavigationItemData extends HeaderNavigationItemLinkProps {
16
7
  /** link description */
17
8
  hint: string;
18
9
 
19
- /** callback to return active state. By default, it compares link href with current pathname */
20
- isActive?: boolean | ((pathname: string) => boolean);
21
-
22
10
  /** flag if the link is not shown (based on FG and/or user permissions) */
23
11
  isHidden?: boolean;
24
12
 
@@ -42,6 +30,36 @@ export interface HeaderNavigationItemData {
42
30
 
43
31
  /** class name of link item */
44
32
  className?: string;
33
+
34
+ /** optional submenu of link item */
35
+ submenu?: HeaderNavigationItemSubmenu;
36
+ }
37
+
38
+ export interface HeaderNavigationItemLinkProps {
39
+ /** link id */
40
+ id: string;
41
+
42
+ /** link href */
43
+ to: string;
44
+
45
+ /** link title */
46
+ title: string;
47
+
48
+ /** callback to return active state. By default, it compares link href with current pathname */
49
+ isActive?: boolean | ((pathname: string) => boolean);
50
+ }
51
+
52
+ export interface HeaderNavigationItemSubmenu {
53
+ /** submenu groups */
54
+ groups: HeaderNavigationItemSubmenuGroup[];
55
+ }
56
+
57
+ export interface HeaderNavigationItemSubmenuGroup {
58
+ /** submenu group title */
59
+ title: string;
60
+
61
+ /** submenu group links */
62
+ links: HeaderNavigationItemLinkProps[];
45
63
  }
46
64
 
47
65
  export interface NavLinkComponentPropsStrict {