@servicetitan/navigation 12.0.2 → 13.0.0-canary.256.b43c6d7.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.
Files changed (201) hide show
  1. package/dist/components/profile-dropdown/{profile-dropdown-tiny.stories.d.ts → profile-dropdown-legacy.stories.d.ts} +1 -1
  2. package/dist/components/profile-dropdown/profile-dropdown-legacy.stories.d.ts.map +1 -0
  3. package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.d.ts.map +1 -1
  4. package/dist/components/profile-dropdown/profile-dropdown.d.ts.map +1 -1
  5. package/dist/components/profile-dropdown/profile-dropdown.js +5 -8
  6. package/dist/components/profile-dropdown/profile-dropdown.js.map +1 -1
  7. package/dist/components/profile-dropdown/profile-dropdown.stories.d.ts.map +1 -1
  8. package/dist/components/titan-layout/interface.d.ts +14 -12
  9. package/dist/components/titan-layout/interface.d.ts.map +1 -1
  10. package/dist/components/titan-layout/interface.js.map +1 -1
  11. package/dist/components/titan-layout/layout-header-dark.js +1 -1
  12. package/dist/components/titan-layout/layout-header-dark.js.map +1 -1
  13. package/dist/components/titan-layout/layout-header-links.d.ts +3 -3
  14. package/dist/components/titan-layout/layout-header-links.d.ts.map +1 -1
  15. package/dist/components/titan-layout/layout-header-links.js.map +1 -1
  16. package/dist/components/titan-layout/layout-header.d.ts +2 -2
  17. package/dist/components/titan-layout/layout-header.d.ts.map +1 -1
  18. package/dist/components/titan-layout/layout-header.js.map +1 -1
  19. package/dist/components/titan-layout/layout-header.module.less +5 -0
  20. package/dist/components/titan-layout/layout-profile.d.ts.map +1 -1
  21. package/dist/components/titan-layout/layout-profile.js +1 -7
  22. package/dist/components/titan-layout/layout-profile.js.map +1 -1
  23. package/dist/components/titan-layout/layout-sidebar-links-internal.d.ts +10 -17
  24. package/dist/components/titan-layout/layout-sidebar-links-internal.d.ts.map +1 -1
  25. package/dist/components/titan-layout/layout-sidebar-links-internal.js +34 -41
  26. package/dist/components/titan-layout/layout-sidebar-links-internal.js.map +1 -1
  27. package/dist/components/titan-layout/layout-sidebar-links.d.ts +3 -3
  28. package/dist/components/titan-layout/layout-sidebar-links.d.ts.map +1 -1
  29. package/dist/components/titan-layout/layout-sidebar-links.js +13 -13
  30. package/dist/components/titan-layout/layout-sidebar-links.js.map +1 -1
  31. package/dist/components/titan-layout/layout-sidebar.js +5 -3
  32. package/dist/components/titan-layout/layout-sidebar.js.map +1 -1
  33. package/dist/components/titan-layout/titan-layout-links.d.ts +5 -0
  34. package/dist/components/titan-layout/titan-layout-links.d.ts.map +1 -0
  35. package/dist/components/titan-layout/titan-layout-links.js +34 -0
  36. package/dist/components/titan-layout/titan-layout-links.js.map +1 -0
  37. package/dist/components/titan-layout/titan-layout.d.ts +2 -3
  38. package/dist/components/titan-layout/titan-layout.d.ts.map +1 -1
  39. package/dist/components/titan-layout/titan-layout.js +3 -3
  40. package/dist/components/titan-layout/titan-layout.js.map +1 -1
  41. package/dist/components/titan-layout/titan-layout.stories.d.ts.map +1 -1
  42. package/dist/index.d.ts +1 -5
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +0 -4
  45. package/dist/index.js.map +1 -1
  46. package/dist/test/data.d.ts +27 -2
  47. package/dist/test/data.d.ts.map +1 -1
  48. package/dist/test/data.js +181 -27
  49. package/dist/test/data.js.map +1 -1
  50. package/dist/utils/navigation-context.d.ts +3 -22
  51. package/dist/utils/navigation-context.d.ts.map +1 -1
  52. package/dist/utils/navigation-context.js +2 -10
  53. package/dist/utils/navigation-context.js.map +1 -1
  54. package/dist/utils/navigation.d.ts +2 -5
  55. package/dist/utils/navigation.d.ts.map +1 -1
  56. package/dist/utils/navigation.js.map +1 -1
  57. package/package.json +2 -2
  58. package/src/components/profile-dropdown/{profile-dropdown-tiny.stories.tsx → profile-dropdown-legacy.stories.tsx} +6 -6
  59. package/src/components/profile-dropdown/profile-dropdown-stacked.stories.tsx +12 -4
  60. package/src/components/profile-dropdown/profile-dropdown.stories.tsx +16 -9
  61. package/src/components/profile-dropdown/profile-dropdown.tsx +2 -11
  62. package/src/components/titan-layout/interface.ts +19 -15
  63. package/src/components/titan-layout/layout-header-dark.tsx +1 -1
  64. package/src/components/titan-layout/layout-header-links.tsx +3 -6
  65. package/src/components/titan-layout/layout-header.module.less +5 -0
  66. package/src/components/titan-layout/layout-header.tsx +2 -2
  67. package/src/components/titan-layout/layout-profile.tsx +2 -6
  68. package/src/components/titan-layout/layout-sidebar-links-internal.tsx +69 -81
  69. package/src/components/titan-layout/layout-sidebar-links.tsx +38 -24
  70. package/src/components/titan-layout/layout-sidebar.tsx +1 -1
  71. package/src/components/titan-layout/titan-layout-links.tsx +34 -0
  72. package/src/components/titan-layout/titan-layout.stories.tsx +34 -33
  73. package/src/components/titan-layout/titan-layout.tsx +5 -4
  74. package/src/index.ts +1 -11
  75. package/src/test/data.tsx +152 -39
  76. package/src/utils/navigation-context.tsx +9 -35
  77. package/src/utils/navigation.ts +3 -7
  78. package/dist/components/header-navigation/header-navigation-content.d.ts +0 -30
  79. package/dist/components/header-navigation/header-navigation-content.d.ts.map +0 -1
  80. package/dist/components/header-navigation/header-navigation-content.js +0 -58
  81. package/dist/components/header-navigation/header-navigation-content.js.map +0 -1
  82. package/dist/components/header-navigation/header-navigation-extra-stacked.stories.d.ts +0 -9
  83. package/dist/components/header-navigation/header-navigation-extra-stacked.stories.d.ts.map +0 -1
  84. package/dist/components/header-navigation/header-navigation-extra.stories.d.ts +0 -12
  85. package/dist/components/header-navigation/header-navigation-extra.stories.d.ts.map +0 -1
  86. package/dist/components/header-navigation/header-navigation-links.d.ts +0 -11
  87. package/dist/components/header-navigation/header-navigation-links.d.ts.map +0 -1
  88. package/dist/components/header-navigation/header-navigation-links.js +0 -62
  89. package/dist/components/header-navigation/header-navigation-links.js.map +0 -1
  90. package/dist/components/header-navigation/header-navigation-stacked.stories.d.ts +0 -12
  91. package/dist/components/header-navigation/header-navigation-stacked.stories.d.ts.map +0 -1
  92. package/dist/components/header-navigation/header-navigation-stories.module.less +0 -6
  93. package/dist/components/header-navigation/header-navigation-stories.module.less.d.ts +0 -3
  94. package/dist/components/header-navigation/header-navigation.d.ts +0 -59
  95. package/dist/components/header-navigation/header-navigation.d.ts.map +0 -1
  96. package/dist/components/header-navigation/header-navigation.js +0 -228
  97. package/dist/components/header-navigation/header-navigation.js.map +0 -1
  98. package/dist/components/header-navigation/header-navigation.module.less +0 -260
  99. package/dist/components/header-navigation/header-navigation.module.less.d.ts +0 -22
  100. package/dist/components/header-navigation/header-navigation.stories.d.ts +0 -12
  101. package/dist/components/header-navigation/header-navigation.stories.d.ts.map +0 -1
  102. package/dist/components/header-navigation/index.d.ts +0 -2
  103. package/dist/components/header-navigation/index.d.ts.map +0 -1
  104. package/dist/components/header-navigation/index.js +0 -3
  105. package/dist/components/header-navigation/index.js.map +0 -1
  106. package/dist/components/header-navigation/with-tooltip.d.ts +0 -4
  107. package/dist/components/header-navigation/with-tooltip.d.ts.map +0 -1
  108. package/dist/components/header-navigation/with-tooltip.js +0 -10
  109. package/dist/components/header-navigation/with-tooltip.js.map +0 -1
  110. package/dist/components/layout.stories.d.ts +0 -13
  111. package/dist/components/layout.stories.d.ts.map +0 -1
  112. package/dist/components/left-navigation/header-navigation-extra-tiny.stories.d.ts +0 -9
  113. package/dist/components/left-navigation/header-navigation-extra-tiny.stories.d.ts.map +0 -1
  114. package/dist/components/left-navigation/header-navigation-tiny-links.d.ts +0 -18
  115. package/dist/components/left-navigation/header-navigation-tiny-links.d.ts.map +0 -1
  116. package/dist/components/left-navigation/header-navigation-tiny-links.js +0 -79
  117. package/dist/components/left-navigation/header-navigation-tiny-links.js.map +0 -1
  118. package/dist/components/left-navigation/header-navigation-tiny.d.ts +0 -23
  119. package/dist/components/left-navigation/header-navigation-tiny.d.ts.map +0 -1
  120. package/dist/components/left-navigation/header-navigation-tiny.js +0 -32
  121. package/dist/components/left-navigation/header-navigation-tiny.js.map +0 -1
  122. package/dist/components/left-navigation/header-navigation-tiny.module.less +0 -117
  123. package/dist/components/left-navigation/header-navigation-tiny.module.less.d.ts +0 -15
  124. package/dist/components/left-navigation/header-navigation-tiny.stories.d.ts +0 -12
  125. package/dist/components/left-navigation/header-navigation-tiny.stories.d.ts.map +0 -1
  126. package/dist/components/left-navigation/index.d.ts +0 -5
  127. package/dist/components/left-navigation/index.d.ts.map +0 -1
  128. package/dist/components/left-navigation/index.js +0 -5
  129. package/dist/components/left-navigation/index.js.map +0 -1
  130. package/dist/components/left-navigation/interface-internal.d.ts +0 -10
  131. package/dist/components/left-navigation/interface-internal.d.ts.map +0 -1
  132. package/dist/components/left-navigation/interface-internal.js +0 -3
  133. package/dist/components/left-navigation/interface-internal.js.map +0 -1
  134. package/dist/components/left-navigation/interface.d.ts +0 -20
  135. package/dist/components/left-navigation/interface.d.ts.map +0 -1
  136. package/dist/components/left-navigation/interface.js +0 -3
  137. package/dist/components/left-navigation/interface.js.map +0 -1
  138. package/dist/components/left-navigation/side-navigation-context.d.ts +0 -8
  139. package/dist/components/left-navigation/side-navigation-context.d.ts.map +0 -1
  140. package/dist/components/left-navigation/side-navigation-context.js +0 -8
  141. package/dist/components/left-navigation/side-navigation-context.js.map +0 -1
  142. package/dist/components/left-navigation/side-navigation-links-internal.d.ts +0 -28
  143. package/dist/components/left-navigation/side-navigation-links-internal.d.ts.map +0 -1
  144. package/dist/components/left-navigation/side-navigation-links-internal.js +0 -89
  145. package/dist/components/left-navigation/side-navigation-links-internal.js.map +0 -1
  146. package/dist/components/left-navigation/side-navigation-links.d.ts +0 -6
  147. package/dist/components/left-navigation/side-navigation-links.d.ts.map +0 -1
  148. package/dist/components/left-navigation/side-navigation-links.js +0 -48
  149. package/dist/components/left-navigation/side-navigation-links.js.map +0 -1
  150. package/dist/components/left-navigation/side-navigation.d.ts +0 -29
  151. package/dist/components/left-navigation/side-navigation.d.ts.map +0 -1
  152. package/dist/components/left-navigation/side-navigation.js +0 -411
  153. package/dist/components/left-navigation/side-navigation.js.map +0 -1
  154. package/dist/components/left-navigation/side-navigation.module.less +0 -530
  155. package/dist/components/left-navigation/side-navigation.module.less.d.ts +0 -48
  156. package/dist/components/left-navigation/side-navigation.stories.d.ts +0 -17
  157. package/dist/components/left-navigation/side-navigation.stories.d.ts.map +0 -1
  158. package/dist/components/left-navigation/with-tooltip.d.ts +0 -4
  159. package/dist/components/left-navigation/with-tooltip.d.ts.map +0 -1
  160. package/dist/components/left-navigation/with-tooltip.js +0 -15
  161. package/dist/components/left-navigation/with-tooltip.js.map +0 -1
  162. package/dist/components/links.d.ts +0 -5
  163. package/dist/components/links.d.ts.map +0 -1
  164. package/dist/components/links.js +0 -35
  165. package/dist/components/links.js.map +0 -1
  166. package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.d.ts.map +0 -1
  167. package/dist/components/titan-layout/layout-profile.stories.d.ts +0 -13
  168. package/dist/components/titan-layout/layout-profile.stories.d.ts.map +0 -1
  169. package/src/components/header-navigation/header-navigation-content.tsx +0 -120
  170. package/src/components/header-navigation/header-navigation-extra-stacked.stories.tsx +0 -19
  171. package/src/components/header-navigation/header-navigation-extra.stories.tsx +0 -142
  172. package/src/components/header-navigation/header-navigation-links.tsx +0 -141
  173. package/src/components/header-navigation/header-navigation-stacked.stories.tsx +0 -146
  174. package/src/components/header-navigation/header-navigation-stories.module.less +0 -6
  175. package/src/components/header-navigation/header-navigation-stories.module.less.d.ts +0 -3
  176. package/src/components/header-navigation/header-navigation.module.less +0 -260
  177. package/src/components/header-navigation/header-navigation.module.less.d.ts +0 -22
  178. package/src/components/header-navigation/header-navigation.stories.tsx +0 -165
  179. package/src/components/header-navigation/header-navigation.tsx +0 -327
  180. package/src/components/header-navigation/index.ts +0 -1
  181. package/src/components/header-navigation/with-tooltip.tsx +0 -15
  182. package/src/components/layout.stories.tsx +0 -103
  183. package/src/components/left-navigation/header-navigation-extra-tiny.stories.tsx +0 -21
  184. package/src/components/left-navigation/header-navigation-tiny-links.tsx +0 -145
  185. package/src/components/left-navigation/header-navigation-tiny.module.less +0 -117
  186. package/src/components/left-navigation/header-navigation-tiny.module.less.d.ts +0 -15
  187. package/src/components/left-navigation/header-navigation-tiny.stories.tsx +0 -178
  188. package/src/components/left-navigation/header-navigation-tiny.tsx +0 -65
  189. package/src/components/left-navigation/index.ts +0 -4
  190. package/src/components/left-navigation/interface-internal.ts +0 -11
  191. package/src/components/left-navigation/interface.ts +0 -26
  192. package/src/components/left-navigation/side-navigation-context.tsx +0 -13
  193. package/src/components/left-navigation/side-navigation-links-internal.tsx +0 -151
  194. package/src/components/left-navigation/side-navigation-links.tsx +0 -57
  195. package/src/components/left-navigation/side-navigation.module.less +0 -530
  196. package/src/components/left-navigation/side-navigation.module.less.d.ts +0 -48
  197. package/src/components/left-navigation/side-navigation.stories.tsx +0 -226
  198. package/src/components/left-navigation/side-navigation.tsx +0 -543
  199. package/src/components/left-navigation/with-tooltip.tsx +0 -16
  200. package/src/components/links.tsx +0 -54
  201. package/src/components/titan-layout/layout-profile.stories.tsx +0 -46
@@ -1,327 +0,0 @@
1
- import { Icon, Popover, PopoverPropsStrict } from '@servicetitan/design-system';
2
- import classNames from 'classnames';
3
- import { FC, ReactElement, ReactNode, useCallback, useEffect, useRef, useState } from 'react';
4
- import { NavigationLegacyContext } from '../../utils/navigation-context';
5
- import { HeaderNavigationItemData } from '../../utils/navigation-legacy';
6
- import { HeaderNavigationItem } from './header-navigation-content';
7
- import * as Styles from './header-navigation.module.less';
8
-
9
- function useForceUpdate() {
10
- const [, setTick] = useState(0);
11
- return useCallback(() => {
12
- setTick(tick => tick + 1);
13
- }, []);
14
- }
15
-
16
- export interface HeaderNavigationOverflowProps {
17
- direction: PopoverPropsStrict['direction'];
18
- width: PopoverPropsStrict['width'];
19
- portal?: boolean;
20
- }
21
-
22
- const HeaderNavigationOverflow: FC<{
23
- items: HeaderNavigationItemData[];
24
- overflow?: HeaderNavigationOverflowProps;
25
- }> = ({ items, overflow }) => {
26
- const [isOpen, setIsOpen] = useState(false);
27
-
28
- return (
29
- <Popover
30
- open={isOpen}
31
- trigger={
32
- <Icon
33
- name="more_vert"
34
- size="24px"
35
- className="c-pointer"
36
- onClick={() => setIsOpen(true)}
37
- color="white"
38
- data-cy="navigation-overflow-trigger"
39
- data-pendo="navigation-overflow-trigger"
40
- />
41
- }
42
- direction={overflow?.direction ?? 'bl'}
43
- width={overflow?.width ?? 'xs'}
44
- portal={overflow?.portal}
45
- onClickOutside={() => setIsOpen(false)}
46
- wrapperClassName="d-if-i align-items-center"
47
- popoverContentClassName={Styles.overflowPopover}
48
- >
49
- <div
50
- onClick={() => setIsOpen(false)}
51
- className={Styles.navigationOverflow}
52
- data-cy="navigation-overflow-content"
53
- >
54
- {items.map(item => (
55
- <HeaderNavigationItem {...item} key={item.id} minimized={false} main={false} />
56
- ))}
57
- </div>
58
- </Popover>
59
- );
60
- };
61
-
62
- export interface HeaderNavigationProps {
63
- /** extra navigation */
64
- children?: ReactNode;
65
- /** container class name */
66
- className?: string;
67
- /** extra navigation container class name */
68
- rightClassName?: string;
69
- /** container id */
70
- id?: string;
71
- /** left content (usually used for logo) */
72
- left?: ReactElement;
73
- /** left container class name */
74
- leftClassName?: string;
75
- /** minimal width for navigation bar */
76
- minWidth?: number;
77
- /** main navigation items */
78
- items?: HeaderNavigationItemData[];
79
- /** main navigation overflow items */
80
- itemsOverflow?: HeaderNavigationItemData[];
81
- /** props for main items overflow component */
82
- overflow?: HeaderNavigationOverflowProps;
83
- }
84
-
85
- enum MinimizedState {
86
- Calculating,
87
- Minimized,
88
- Full,
89
- }
90
-
91
- export const HeaderNavigation: FC<HeaderNavigationProps> = ({
92
- children,
93
- className,
94
- id,
95
- items,
96
- itemsOverflow,
97
- left,
98
- leftClassName,
99
- rightClassName,
100
- minWidth = 800,
101
- overflow,
102
- }) => {
103
- const leftRef = useRef<HTMLDivElement>(null);
104
- const rightRef = useRef<HTMLDivElement>(null);
105
- const centerRef = useRef<HTMLDivElement>(null);
106
- const navigationRef = useRef<HTMLDivElement>(null);
107
- const forceUpdate = useForceUpdate();
108
- const [minimized, setMinimized] = useState(MinimizedState.Calculating);
109
-
110
- useEffect(() => {
111
- const handleResize = () => {
112
- setMinimized(MinimizedState.Calculating);
113
- forceUpdate();
114
- };
115
-
116
- window.addEventListener('resize', handleResize);
117
- return () => window.removeEventListener('resize', handleResize);
118
- }, [forceUpdate]);
119
-
120
- useEffect(() => {
121
- setMinimized(MinimizedState.Calculating);
122
- forceUpdate();
123
- }, [items, itemsOverflow, forceUpdate]);
124
-
125
- const updateIsMinimized = () => {
126
- if (centerRef.current && navigationRef.current) {
127
- if (navigationRef.current.clientWidth > centerRef.current.clientWidth) {
128
- setMinimized(MinimizedState.Minimized);
129
- } else if (minimized === MinimizedState.Calculating) {
130
- setMinimized(MinimizedState.Full);
131
- }
132
- }
133
- };
134
-
135
- useEffect(() => {
136
- updateIsMinimized();
137
- });
138
-
139
- return (
140
- <NavigationLegacyContext.Provider value>
141
- <div
142
- className={classNames(Styles.header, className, {
143
- [Styles.calculating]: minimized === MinimizedState.Calculating,
144
- })}
145
- style={{ minWidth: `${minWidth}px` }}
146
- id={id}
147
- data-cy="header-navigation"
148
- >
149
- <div className={leftClassName} ref={leftRef} data-cy="navigation-left">
150
- {left}
151
- </div>
152
- <div
153
- ref={centerRef}
154
- className={classNames(
155
- 'd-if flex-grow-1 flex-basis-0 justify-content-center',
156
- Styles.center
157
- )}
158
- data-cy="navigation-items"
159
- >
160
- <div ref={navigationRef} className={classNames('d-if')}>
161
- {items?.map(item => (
162
- <HeaderNavigationItem
163
- {...item}
164
- minimized={minimized === MinimizedState.Minimized}
165
- main
166
- key={item.id}
167
- />
168
- ))}
169
- {!!itemsOverflow?.length && (
170
- <HeaderNavigationOverflow items={itemsOverflow} overflow={overflow} />
171
- )}
172
- </div>
173
- </div>
174
- <div
175
- className={classNames(
176
- 'd-f flex-row justify-content-end align-items-center',
177
- Styles.right,
178
- rightClassName
179
- )}
180
- ref={rightRef}
181
- data-cy="navigation-right"
182
- >
183
- {children}
184
- </div>
185
- </div>
186
- </NavigationLegacyContext.Provider>
187
- );
188
- };
189
-
190
- export interface HeaderNavigationStackedProps {
191
- /** container class name */
192
- className?: string;
193
- /** extra navigation */
194
- right?: ReactNode;
195
- /** extra navigation container class name */
196
- rightClassName?: string;
197
- /** container id */
198
- id?: string;
199
- /** left content (usually used for logo) */
200
- left?: ReactElement;
201
- /** left container class name */
202
- leftClassName?: string;
203
- /** center content */
204
- center?: ReactElement;
205
- /** center container class name */
206
- centerClassName?: string;
207
- /** minimal width for navigation bar */
208
- minWidth?: number;
209
- /** main navigation items */
210
- items?: HeaderNavigationItemData[];
211
- /** main navigation overflow items */
212
- itemsOverflow?: HeaderNavigationItemData[];
213
- /** props for main items overflow component */
214
- overflow?: HeaderNavigationOverflowProps;
215
- }
216
-
217
- export const HeaderNavigationStacked: FC<HeaderNavigationStackedProps> = ({
218
- className,
219
- id,
220
- items,
221
- itemsOverflow,
222
- left,
223
- leftClassName,
224
- right,
225
- rightClassName,
226
- center,
227
- centerClassName,
228
- minWidth = 800,
229
- overflow,
230
- }) => {
231
- const bottomRef = useRef<HTMLDivElement>(null);
232
- const navigationRef = useRef<HTMLDivElement>(null);
233
- const forceUpdate = useForceUpdate();
234
- const [minimized, setMinimized] = useState(MinimizedState.Calculating);
235
-
236
- useEffect(() => {
237
- const handleResize = () => {
238
- setMinimized(MinimizedState.Calculating);
239
- forceUpdate();
240
- };
241
-
242
- window.addEventListener('resize', handleResize);
243
- return () => window.removeEventListener('resize', handleResize);
244
- }, [forceUpdate]);
245
-
246
- useEffect(() => {
247
- setMinimized(MinimizedState.Calculating);
248
- forceUpdate();
249
- }, [items, itemsOverflow, forceUpdate]);
250
-
251
- const updateIsMinimized = () => {
252
- if (bottomRef.current && navigationRef.current) {
253
- if (navigationRef.current.clientWidth + 16 > bottomRef.current.clientWidth) {
254
- setMinimized(MinimizedState.Minimized);
255
- } else if (minimized === MinimizedState.Calculating) {
256
- setMinimized(MinimizedState.Full);
257
- }
258
- }
259
- };
260
-
261
- useEffect(() => {
262
- updateIsMinimized();
263
- });
264
-
265
- return (
266
- <NavigationLegacyContext.Provider value>
267
- <div
268
- className={classNames(
269
- Styles.headerStacked,
270
- {
271
- [Styles.calculating]: minimized === MinimizedState.Calculating,
272
- },
273
- className
274
- )}
275
- style={{ minWidth: `${minWidth}px` }}
276
- id={id}
277
- data-cy="header-navigation"
278
- >
279
- <div
280
- className={classNames(Styles.heTopLeft, leftClassName)}
281
- data-cy="navigation-left"
282
- >
283
- {left}
284
- </div>
285
- <div
286
- className={classNames(Styles.heTopCenter, centerClassName)}
287
- data-cy="navigation-center"
288
- >
289
- {center}
290
- </div>
291
- <div
292
- className={classNames(
293
- 'd-f flex-row justify-content-end align-items-center',
294
- Styles.heTopRight,
295
- rightClassName
296
- )}
297
- data-cy="navigation-right"
298
- >
299
- {right}
300
- </div>
301
- <div
302
- ref={bottomRef}
303
- className={classNames(
304
- Styles.heBottom,
305
- 'd-if flex-grow-1 flex-basis-0 justify-content-center',
306
- Styles.center
307
- )}
308
- data-cy="navigation-items"
309
- >
310
- <div ref={navigationRef} className={classNames('d-if')}>
311
- {items?.map(item => (
312
- <HeaderNavigationItem
313
- {...item}
314
- minimized={minimized === MinimizedState.Minimized}
315
- main
316
- key={item.id}
317
- />
318
- ))}
319
- {!!itemsOverflow?.length && (
320
- <HeaderNavigationOverflow items={itemsOverflow} overflow={overflow} />
321
- )}
322
- </div>
323
- </div>
324
- </div>
325
- </NavigationLegacyContext.Provider>
326
- );
327
- };
@@ -1 +0,0 @@
1
- export * from './header-navigation';
@@ -1,15 +0,0 @@
1
- import { Tooltip, TooltipPropsStrict } from '@servicetitan/design-system';
2
- import { ReactNode } from 'react';
3
-
4
- export const withTooltip = (
5
- element: ReactNode,
6
- tooltip: string | undefined,
7
- direction: TooltipPropsStrict['direction'] = 'b'
8
- ) =>
9
- tooltip ? (
10
- <Tooltip el="div" direction={direction} text={tooltip}>
11
- {element}
12
- </Tooltip>
13
- ) : (
14
- element
15
- );
@@ -1,103 +0,0 @@
1
- import { Page, Sidebar } from '@servicetitan/design-system';
2
- import { LocationInfo, withAnvil, withDefaultRedirects, withMemoryRouter } from '../test/data';
3
- import {
4
- WithAllMonolithData,
5
- WithAllMonolithDataCommercial,
6
- } from './left-navigation/header-navigation-tiny.stories';
7
- import {
8
- DefaultSideNavigation,
9
- SideNavigationLinksOnly,
10
- SideNavigationWithSubmenu,
11
- SideNavigationWithSubmenuBar,
12
- SideNavigationWithSubmenuBarAndTop,
13
- } from './left-navigation/side-navigation.stories';
14
-
15
- export default {
16
- title: 'Navigation/Layout',
17
- parameters: {},
18
- decorators: [withDefaultRedirects, withMemoryRouter, withAnvil],
19
- };
20
-
21
- export const LeftNavLayout = () => {
22
- return (
23
- <div className="d-f border flex-column" style={{ height: '800px' }}>
24
- <WithAllMonolithData />
25
- <div className="flex-grow-1 flex-basis-0 d-f">
26
- <DefaultSideNavigation />
27
- <div className="flex-grow-1 flex-basis-0" />
28
- </div>
29
- </div>
30
- );
31
- };
32
-
33
- export const LeftNavLayoutCommercial = () => {
34
- return (
35
- <div className="d-f border flex-column" style={{ height: '800px' }}>
36
- <WithAllMonolithDataCommercial />
37
- <div className="flex-grow-1 flex-basis-0 d-f">
38
- <DefaultSideNavigation />
39
- <div className="flex-grow-1 flex-basis-0" />
40
- </div>
41
- </div>
42
- );
43
- };
44
-
45
- export const LeftNavLayoutOnlyLinks = () => {
46
- return (
47
- <div className="d-f border flex-column" style={{ height: '800px' }}>
48
- <WithAllMonolithDataCommercial />
49
- <div className="flex-grow-1 flex-basis-0 d-f">
50
- <SideNavigationLinksOnly />
51
- <div className="flex-grow-1 flex-basis-0" />
52
- </div>
53
- </div>
54
- );
55
- };
56
-
57
- export const LeftNavLayoutSubmenu = () => {
58
- return (
59
- <div className="d-f border flex-column" style={{ height: '800px' }}>
60
- <WithAllMonolithDataCommercial />
61
- <div className="flex-grow-1 flex-basis-0 d-f">
62
- <SideNavigationWithSubmenu />
63
- <div className="flex-grow-1 flex-basis-0">
64
- <Page sidebar={<Sidebar localStorageKey="undefined">sidebar</Sidebar>}>
65
- <LocationInfo />
66
- </Page>
67
- </div>
68
- </div>
69
- </div>
70
- );
71
- };
72
-
73
- export const LeftNavLayoutSubmenuBar = () => {
74
- return (
75
- <div className="d-f border flex-column" style={{ height: '800px' }}>
76
- <WithAllMonolithDataCommercial />
77
- <div className="flex-grow-1 flex-basis-0 d-f">
78
- <SideNavigationWithSubmenuBar />
79
- <div className="flex-grow-1 flex-basis-0">
80
- <Page sidebar={<Sidebar localStorageKey="undefined">sidebar</Sidebar>}>
81
- <LocationInfo />
82
- </Page>
83
- </div>
84
- </div>
85
- </div>
86
- );
87
- };
88
-
89
- export const LeftNavLayoutSubmenuBarWithTop = () => {
90
- return (
91
- <div className="d-f border flex-column" style={{ height: '800px' }}>
92
- <WithAllMonolithDataCommercial />
93
- <div className="flex-grow-1 flex-basis-0 d-f">
94
- <SideNavigationWithSubmenuBarAndTop />
95
- <div className="flex-grow-1 flex-basis-0">
96
- <Page sidebar={<Sidebar localStorageKey="undefined">sidebar</Sidebar>}>
97
- <LocationInfo />
98
- </Page>
99
- </div>
100
- </div>
101
- </div>
102
- );
103
- };
@@ -1,21 +0,0 @@
1
- import { withAnvil, withMemoryRouter } from '../../test/data';
2
- import { HeaderNavigationLink } from '../links';
3
- import { HeaderNavigationTiny } from './header-navigation-tiny';
4
-
5
- const withHeaderNavigationTiny = (Story: any) => (
6
- <HeaderNavigationTiny className="border" right={<Story />} />
7
- );
8
-
9
- export default {
10
- title: 'Navigation/Extra/Tiny',
11
- component: HeaderNavigationLink,
12
- decorators: [withHeaderNavigationTiny, withMemoryRouter, withAnvil],
13
- parameters: {},
14
- };
15
-
16
- export {
17
- ExtraWithTooltip,
18
- ExtraLink,
19
- ExtraTrigger,
20
- ExtraWithLabel,
21
- } from '../header-navigation/header-navigation-extra.stories';
@@ -1,145 +0,0 @@
1
- import { Icon, IconProps } from '@servicetitan/anvil2';
2
- import classNames from 'classnames';
3
- import { FC, Fragment, useContext } from 'react';
4
- import { NavigationComponentContext } from '../../utils/navigation-context';
5
- import {
6
- HeaderNavigationLinkProps,
7
- HeaderNavigationTriggerProps,
8
- } from '../../utils/navigation-legacy';
9
- import { getCounterTag } from '../../utils/side-nav';
10
- import { CounterTag, CounterTagProps } from '../counter-tag';
11
- // use v1 tooltips due to bug with v2 in monolith
12
- import { withTooltip } from '../header-navigation/with-tooltip';
13
- import * as Styles from './header-navigation-tiny.module.less';
14
-
15
- /** Content for navigation items */
16
- export const HeaderNavigationItemContent: FC<{
17
- tag?: CounterTagProps;
18
- counterClassName?: string;
19
- icon: IconProps['svg'] | undefined;
20
- iconActive: IconProps['svg'] | undefined;
21
- label?: string;
22
- labelClassName?: string;
23
- }> = ({ counterClassName, icon, iconActive, label, labelClassName, tag }) => {
24
- return (
25
- <Fragment>
26
- {!!icon && <Icon svg={icon} className={Styles.navigationIcon} />}
27
- {!!iconActive && (
28
- <Icon
29
- svg={iconActive}
30
- className={classNames(Styles.navigationIcon, Styles.navigationIconActive)}
31
- />
32
- )}
33
-
34
- {!!label && (
35
- <span className={classNames(Styles.navigationItemLabel, labelClassName)}>
36
- {label}
37
- </span>
38
- )}
39
-
40
- {!!tag && (
41
- <CounterTag
42
- data={tag}
43
- className={classNames(Styles.navigationItemCounter, counterClassName)}
44
- longClassName={Styles.navigationItemCounterLong}
45
- />
46
- )}
47
- </Fragment>
48
- );
49
- };
50
-
51
- /** Navigation extra item with link */
52
- export const HeaderNavigationLink: FC<HeaderNavigationLinkProps> = ({
53
- id,
54
- to,
55
- hint,
56
- tooltip,
57
- className,
58
- counter,
59
- icon,
60
- iconActive,
61
- iconClassName,
62
- iconComponent,
63
- iconName,
64
- isActive,
65
- label,
66
- labelClassName,
67
- tag,
68
- target,
69
- ...rest
70
- }) => {
71
- const NavigationComponent = useContext(NavigationComponentContext);
72
-
73
- return withTooltip(
74
- <NavigationComponent
75
- data-cy={`navigation-link-${id}`}
76
- data-pendo={`navigation-link-${id}`}
77
- {...rest}
78
- key={id}
79
- to={to}
80
- title={hint}
81
- className={classNames(Styles.navigationLink, className, {
82
- [Styles.navigationItemActive]: isActive === true,
83
- [Styles.navigationItemIconState]: !!icon && !!iconActive,
84
- })}
85
- isActive={typeof isActive === 'function' ? isActive : undefined}
86
- activeClassName={Styles.navigationItemActive}
87
- target={target}
88
- >
89
- <HeaderNavigationItemContent
90
- tag={getCounterTag(counter, tag)}
91
- icon={icon}
92
- iconActive={iconActive}
93
- label={label}
94
- labelClassName={labelClassName}
95
- />
96
- </NavigationComponent>,
97
- tooltip
98
- );
99
- };
100
-
101
- /** Navigation extra item with icon button */
102
- export const HeaderNavigationTrigger: FC<HeaderNavigationTriggerProps> = ({
103
- id,
104
- className,
105
- counter,
106
- icon,
107
- iconActive,
108
- iconName,
109
- isActive,
110
- hint,
111
- label,
112
- labelClassName,
113
- tag,
114
- tooltip,
115
- title,
116
- titleClassName,
117
- ...rest
118
- }) => {
119
- return withTooltip(
120
- <div
121
- data-cy={`navigation-trigger-${id}`}
122
- data-pendo={`navigation-trigger-${id}`}
123
- {...rest}
124
- title={hint}
125
- className={classNames(
126
- Styles.navigationLink,
127
- {
128
- [Styles.navigationItemActive]: isActive === true,
129
- [Styles.navigationItemIconState]: !!icon && !!iconActive,
130
- },
131
- 'cursor-pointer',
132
- className
133
- )}
134
- >
135
- <HeaderNavigationItemContent
136
- tag={getCounterTag(counter, tag)}
137
- icon={icon}
138
- iconActive={iconActive}
139
- label={label}
140
- labelClassName={labelClassName}
141
- />
142
- </div>,
143
- tooltip
144
- );
145
- };