@campxdev/shared 1.8.39 → 1.8.42

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 (230) hide show
  1. package/antd.customize.less +73 -73
  2. package/exports.ts +19 -19
  3. package/package.json +86 -86
  4. package/src/assets/fonts/avenir/index.ts +13 -13
  5. package/src/assets/fonts/poppins/index.ts +18 -18
  6. package/src/assets/images/index.ts +17 -17
  7. package/src/assets/images/unauth.svg +92 -92
  8. package/src/components/ActionButton.tsx +20 -20
  9. package/src/components/ApplicationProfile/ApplicationProfile.tsx +336 -336
  10. package/src/components/ApplicationProfile/Service.ts +68 -68
  11. package/src/components/ApplicationProfile/UserProfileRelation.tsx +174 -174
  12. package/src/components/ApplicationProfile/index.tsx +1 -1
  13. package/src/components/Attachment.tsx +26 -26
  14. package/src/components/AutocompleteSearch/AutocompleteSearch.tsx +57 -57
  15. package/src/components/AutocompleteSearch/index.tsx +1 -1
  16. package/src/components/Breadcrumbs.tsx +72 -72
  17. package/src/components/Card.tsx +98 -98
  18. package/src/components/CardsGrid.tsx +28 -28
  19. package/src/components/ChangePassword.tsx +123 -123
  20. package/src/components/Chips.tsx +81 -81
  21. package/src/components/Detail.tsx +15 -15
  22. package/src/components/DetailsGrid.tsx +52 -52
  23. package/src/components/DividerHeading.tsx +41 -41
  24. package/src/components/DrawerWrapper/DialogWrapper.tsx +67 -67
  25. package/src/components/DrawerWrapper/DrawerTemplate.tsx +53 -53
  26. package/src/components/DrawerWrapper/DrawerWrapper.tsx +53 -53
  27. package/src/components/DropDownButton/AnchorElement.tsx +44 -44
  28. package/src/components/DropDownButton/DropDownButton.tsx +184 -184
  29. package/src/components/DropDownButton/DropdownMenuItem.tsx +122 -122
  30. package/src/components/DropDownButton/index.tsx +1 -1
  31. package/src/components/DropDownButton/styles.tsx +59 -59
  32. package/src/components/ErrorBoundary/ErrorBoundary.tsx +33 -33
  33. package/src/components/ErrorBoundary/ErrorFallback.tsx +241 -241
  34. package/src/components/ErrorBoundary/GlobalNetworkLoadingIndicator.tsx +13 -13
  35. package/src/components/ErrorBoundary/index.tsx +1 -1
  36. package/src/components/ErrorBox.tsx +42 -42
  37. package/src/components/ExcelToJsonInput/ExcelJsonUpload.tsx +50 -50
  38. package/src/components/ExcelToJsonInput/ExcelToJsonInput.tsx +57 -57
  39. package/src/components/ExcelToJsonInput/index.tsx +1 -1
  40. package/src/components/FilterComponents/FilterButton.tsx +56 -56
  41. package/src/components/FilterComponents/SearchBar.tsx +45 -45
  42. package/src/components/FloatingContainer.tsx +33 -33
  43. package/src/components/Form/Form.tsx +147 -147
  44. package/src/components/Form/RenderForm.tsx +189 -189
  45. package/src/components/FullScreenLoader.tsx +19 -19
  46. package/src/components/HookForm/AutoCompleteSearch.tsx +113 -113
  47. package/src/components/HookForm/DatePicker.tsx +40 -40
  48. package/src/components/HookForm/DateTimePicker.tsx +47 -47
  49. package/src/components/HookForm/FormLabel.tsx +14 -14
  50. package/src/components/HookForm/MultiCheckbox.tsx +69 -69
  51. package/src/components/HookForm/MultiSelect.tsx +61 -61
  52. package/src/components/HookForm/RadioGroup.tsx +47 -47
  53. package/src/components/HookForm/SingleCheckbox.tsx +34 -34
  54. package/src/components/HookForm/SingleSelect.tsx +46 -46
  55. package/src/components/HookForm/TextField.tsx +40 -40
  56. package/src/components/HookForm/TimePicker.tsx +40 -40
  57. package/src/components/HookForm/index.ts +23 -23
  58. package/src/components/IconButtons/IconButtons.tsx +137 -137
  59. package/src/components/IconButtons/Icons.tsx +268 -268
  60. package/src/components/IconButtons/assets/edit.svg +4 -4
  61. package/src/components/IconButtons/assets/eye.svg +6 -6
  62. package/src/components/IconButtons/assets/trash.svg +7 -7
  63. package/src/components/IconButtons/index.tsx +8 -8
  64. package/src/components/IconLabel.tsx +37 -37
  65. package/src/components/Image/Image.tsx +45 -45
  66. package/src/components/Image/index.tsx +1 -1
  67. package/src/components/ImageUpload.tsx +98 -98
  68. package/src/components/Input/AsyncSearchSelect/AsyncSearchSelect.tsx +216 -216
  69. package/src/components/Input/AsyncSearchSelect/index.tsx +1 -1
  70. package/src/components/Input/AsyncSearchSelect/styles.tsx +105 -105
  71. package/src/components/Input/AutoCompleteSearch.tsx +121 -121
  72. package/src/components/Input/DatePicker.tsx +87 -87
  73. package/src/components/Input/DateRangePicker.tsx +105 -105
  74. package/src/components/Input/DateTimePicker.tsx +84 -84
  75. package/src/components/Input/FormLabel.tsx +21 -21
  76. package/src/components/Input/MultiCheckbox.tsx +64 -64
  77. package/src/components/Input/MultiSelect.tsx +161 -161
  78. package/src/components/Input/RadioGroup.tsx +104 -104
  79. package/src/components/Input/SingleCheckbox.tsx +78 -78
  80. package/src/components/Input/SingleSelect.tsx +104 -104
  81. package/src/components/Input/TextField.tsx +46 -46
  82. package/src/components/Input/TimePicker.tsx +77 -77
  83. package/src/components/Input/index.ts +26 -26
  84. package/src/components/Input/types.ts +3 -3
  85. package/src/components/JsonPreview.tsx +7 -7
  86. package/src/components/LabelValue.tsx +21 -21
  87. package/src/components/Layout/ChangePassword.tsx +49 -49
  88. package/src/components/Layout/Header/AppHeader.tsx +113 -112
  89. package/src/components/Layout/Header/AppsMenu.tsx +133 -133
  90. package/src/components/Layout/Header/HeaderActions/CogWheelMenu.tsx +33 -33
  91. package/src/components/Layout/Header/HeaderActions/FreshChatButton.tsx +61 -61
  92. package/src/components/Layout/Header/HeaderActions/FreshDeskHelpButton.tsx +28 -28
  93. package/src/components/Layout/Header/HeaderActions/HeaderActions.tsx +18 -18
  94. package/src/components/Layout/Header/HeaderActions/UserBox.tsx +56 -56
  95. package/src/components/Layout/Header/Notification.tsx +13 -13
  96. package/src/components/Layout/Header/applications.ts +101 -97
  97. package/src/components/Layout/Header/assets/campx_square_small.svg +8 -8
  98. package/src/components/Layout/Header/assets/commuteX.png +0 -0
  99. package/src/components/Layout/Header/assets/commutex.svg +14 -14
  100. package/src/components/Layout/Header/assets/commutexSmall.svg +11 -11
  101. package/src/components/Layout/Header/assets/enroll.svg +14 -14
  102. package/src/components/Layout/Header/assets/enrollx.svg +14 -14
  103. package/src/components/Layout/Header/assets/exams_small.svg +11 -11
  104. package/src/components/Layout/Header/assets/examsx.svg +14 -14
  105. package/src/components/Layout/Header/assets/hostel_small.svg +13 -13
  106. package/src/components/Layout/Header/assets/hostelx.svg +13 -13
  107. package/src/components/Layout/Header/assets/index.ts +37 -37
  108. package/src/components/Layout/Header/assets/libraryx.svg +12 -12
  109. package/src/components/Layout/Header/assets/pay_small.svg +15 -15
  110. package/src/components/Layout/Header/assets/payx.svg +19 -19
  111. package/src/components/Layout/Header/assets/people_small.svg +9 -9
  112. package/src/components/Layout/Header/assets/peoplex.svg +12 -12
  113. package/src/components/Layout/Header/assets/squarex.svg +12 -12
  114. package/src/components/Layout/Header/icons.tsx +57 -57
  115. package/src/components/Layout/Header/index.tsx +1 -1
  116. package/src/components/Layout/Header/styles.tsx +133 -133
  117. package/src/components/Layout/Helmet.tsx +108 -106
  118. package/src/components/Layout/LayoutWrapper.tsx +28 -28
  119. package/src/components/Layout/SideMenuHeader.tsx +29 -29
  120. package/src/components/Layout/SideNav.tsx +168 -168
  121. package/src/components/Layout/Tickets/HelpWidget/HelpWidget.tsx +273 -273
  122. package/src/components/Layout/Tickets/HelpWidget/styles.tsx +94 -94
  123. package/src/components/Layout/Tickets/MyTickets.tsx +72 -72
  124. package/src/components/Layout/Tickets/TicketDetails.tsx +65 -65
  125. package/src/components/Layout/Tickets/TimeLine.tsx +64 -64
  126. package/src/components/Layout/Tickets/index.tsx +1 -1
  127. package/src/components/Layout/Tickets/services.ts +11 -11
  128. package/src/components/Layout/Tickets/styles.tsx +136 -136
  129. package/src/components/LinearProgress.tsx +19 -19
  130. package/src/components/ListItemButton.tsx +95 -95
  131. package/src/components/LoginForm.tsx +279 -279
  132. package/src/components/MediaRow/MediaRow.tsx +67 -67
  133. package/src/components/MediaRow/index.tsx +1 -1
  134. package/src/components/ModalButtons/DialogButton.tsx +126 -126
  135. package/src/components/ModalButtons/DrawerButton.tsx +115 -115
  136. package/src/components/ModalButtons/index.tsx +4 -4
  137. package/src/components/NoDataIllustration.tsx +32 -32
  138. package/src/components/PageContent.tsx +12 -12
  139. package/src/components/PageHeader.tsx +55 -55
  140. package/src/components/PageNotFound.tsx +26 -26
  141. package/src/components/PopupConfirm/ConfirmContextProvider.tsx +40 -40
  142. package/src/components/PopupConfirm/PopupConfirm.tsx +67 -67
  143. package/src/components/PopupConfirm/index.tsx +1 -1
  144. package/src/components/PopupConfirm/useConfirm.ts +47 -47
  145. package/src/components/ResetPassword.tsx +107 -107
  146. package/src/components/Row.tsx +24 -24
  147. package/src/components/Spinner.tsx +18 -18
  148. package/src/components/StepsHeader/StepsHeader.tsx +115 -115
  149. package/src/components/StepsHeader/index.tsx +1 -1
  150. package/src/components/StyledTableContainer.tsx +33 -33
  151. package/src/components/SwitchButton.tsx +41 -41
  152. package/src/components/Table.tsx +42 -42
  153. package/src/components/Tables/BasicTable/Table.tsx +198 -198
  154. package/src/components/Tables/BasicTable/TableFooter.tsx +86 -86
  155. package/src/components/Tables/BasicTable/index.tsx +1 -1
  156. package/src/components/Tables/ReactTable/BatchActionsHeader.tsx +58 -58
  157. package/src/components/Tables/ReactTable/ReactTable.tsx +295 -295
  158. package/src/components/Tables/ReactTable/RenderTableBody.tsx +49 -49
  159. package/src/components/Tables/ReactTable/index.tsx +1 -1
  160. package/src/components/Tables/ReactTable/react-table-config.d.ts +128 -128
  161. package/src/components/Tables/common/NoRecordsFound.tsx +27 -27
  162. package/src/components/Tables/common/TableStats.tsx +22 -22
  163. package/src/components/Tables/common/icons.tsx +50 -50
  164. package/src/components/Tables/common/styles.tsx +170 -170
  165. package/src/components/Tables/common/types.ts +57 -57
  166. package/src/components/Tabs/NavigationTabs.tsx +80 -80
  167. package/src/components/Tabs/Tabs.tsx +53 -53
  168. package/src/components/Tabs/TabsContainer.tsx +53 -53
  169. package/src/components/Tabs/index.tsx +1 -1
  170. package/src/components/Tabs/styles.tsx +55 -55
  171. package/src/components/ToastContainer/ToastContainer.tsx +57 -57
  172. package/src/components/ToastContainer/index.tsx +1 -1
  173. package/src/components/UploadButton/UploadButton.tsx +126 -126
  174. package/src/components/UploadButton/index.tsx +1 -1
  175. package/src/components/UploadButton/types.ts +19 -19
  176. package/src/components/UploadDocument.tsx +108 -108
  177. package/src/components/UploadFileDialog/UploadFileDialog.tsx +238 -238
  178. package/src/components/UploadFileDialog/index.tsx +1 -1
  179. package/src/components/index.ts +108 -108
  180. package/src/config/axios.ts +73 -73
  181. package/src/config/axiosEvaluator.ts +53 -53
  182. package/src/config/axiosXTenant.ts +57 -57
  183. package/src/constants/UIConstants.ts +124 -124
  184. package/src/constants/formValidations.ts +6 -6
  185. package/src/constants/index.ts +5 -5
  186. package/src/constants/isDevelopment.ts +4 -4
  187. package/src/constants/permissions.ts +67 -67
  188. package/src/constants/validateMessages.ts +12 -12
  189. package/src/contexts/LoginFormProvider.tsx +39 -39
  190. package/src/contexts/Providers.tsx +52 -52
  191. package/src/contexts/PublicProviders.tsx +30 -30
  192. package/src/contexts/QueryClientProvider.tsx +22 -22
  193. package/src/hooks/index.ts +5 -5
  194. package/src/hooks/useAuth.ts +152 -152
  195. package/src/hooks/useExternalScript.ts +38 -38
  196. package/src/hooks/useFetch.ts +53 -53
  197. package/src/hooks/useFilters.ts +83 -83
  198. package/src/hooks/useRouter.ts +31 -31
  199. package/src/layouts/Components/DashBoardMenu.tsx +232 -232
  200. package/src/layouts/Components/icons/index.tsx +403 -403
  201. package/src/layouts/Components/styles.tsx +74 -74
  202. package/src/layouts/ComponentsLayout.tsx +3 -3
  203. package/src/permissions/PageWithPermission.tsx +18 -18
  204. package/src/permissions/PermissionDeniedPage.tsx +16 -16
  205. package/src/permissions/ValidateAccess.tsx +18 -18
  206. package/src/permissions/index.ts +2 -2
  207. package/src/react-app-env.d.ts +1 -1
  208. package/src/shared-state/AssetsStore.ts +15 -15
  209. package/src/shared-state/PermissionsStore.ts +1066 -1064
  210. package/src/shared-state/UserStore.ts +13 -13
  211. package/src/shared-state/index.ts +4 -4
  212. package/src/theme/App.less +3 -3
  213. package/src/theme/MuiThemeProvider.tsx +18 -18
  214. package/src/theme/customCssBaseline.ts +135 -135
  215. package/src/theme/index.css +28 -28
  216. package/src/theme/muiTheme.ts +597 -597
  217. package/src/theme/theme.d.ts +77 -77
  218. package/src/utils/adminAxios.ts +15 -15
  219. package/src/utils/alphabet.ts +23 -23
  220. package/src/utils/arrayPadEnd.ts +3 -3
  221. package/src/utils/formatCurrency.ts +9 -9
  222. package/src/utils/getUrlParams.ts +5 -5
  223. package/src/utils/index.ts +7 -7
  224. package/src/utils/logout.ts +25 -25
  225. package/src/utils/ordinalSuffixOf.ts +14 -14
  226. package/src/utils/romanize.ts +40 -40
  227. package/src/utils/withRouteWrapper.tsx +25 -25
  228. package/src/utils/withSuspense.tsx +6 -6
  229. package/styled-components.tsx +60 -60
  230. package/tsconfig.json +21 -21
@@ -1,106 +1,108 @@
1
- import { ReactNode } from 'react'
2
- import { Helmet as ReactHelmet } from 'react-helmet'
3
-
4
- const isLocalHost = process.env.NODE_ENV === 'development'
5
-
6
- const freshDeskInnerHtml = `
7
- window.fwSettings = {
8
- widget_id: 85000000149,
9
- }
10
- !(function () {
11
- window.openFreshDeskWidget = function openFreshDeskWidget() {
12
- FreshworksWidget('open', 'ticketForm')
13
- }
14
- if ('function' != typeof window.FreshworksWidget) {
15
- var n = function () {
16
- n.q.push(arguments)
17
- }
18
- ;(n.q = []), (window.FreshworksWidget = n)
19
- }
20
- FreshworksWidget('hide', 'launcher')
21
- })()
22
-
23
- `
24
-
25
- const getInnerHtml = (user: any) => {
26
- if (isLocalHost) {
27
- return ''
28
- }
29
- const fcWidgetMessengerConfig = {
30
- config: {
31
- headerProperty: {
32
- hideChatButton: true,
33
- },
34
- },
35
- }
36
-
37
- const phone = user?.mobile?.substring(user?.mobile?.length - 10)
38
-
39
- return `
40
- window.fcWidgetMessengerConfig = ${JSON.stringify(fcWidgetMessengerConfig)}
41
- window.fcSettings = {
42
- onInit: function() {
43
- console.log('Fresh Chat Init')
44
- window.fcWidget.setExternalId('${user?.email}')
45
- window.fcWidget.user.setFirstName('${user?.fullName}')
46
- window.fcWidget.user.setEmail('${user?.email}')
47
- window.fcWidget.user.setPhone('${phone}')
48
- }
49
- }
50
-
51
- `
52
- }
53
-
54
- interface IHelmetProps {
55
- appTitle: string
56
- favicon: string
57
- description?: string
58
- user: any
59
- extraMetaTags?: ReactNode
60
- }
61
-
62
- export default function Helmet({
63
- appTitle,
64
- favicon,
65
- description,
66
- user,
67
- extraMetaTags,
68
- }: IHelmetProps) {
69
- return (
70
- <ReactHelmet htmlAttributes={{ lang: 'en' }}>
71
- <title>{appTitle}</title>
72
- <meta charSet="utf-8" />
73
- <meta name="description" content={description} />
74
- <meta name="viewport" content="width=device-width, initial-scale=1" />
75
- {extraMetaTags}
76
- <link rel="icon" href={favicon} />
77
- <link rel="apple-touch-icon" href={favicon} />
78
- {isLocalHost && (
79
- <script
80
- type="text/javascript"
81
- src="//in.fw-cdn.com/30814322/430238.js"
82
- defer
83
- />
84
- )}
85
- <script defer>{getInnerHtml(user)}</script>
86
- <script async defer>
87
- {freshDeskInnerHtml}
88
- </script>
89
- {isLocalHost && (
90
- <script
91
- type="text/javascript"
92
- src="https://ind-widget.freshworks.com/widgets/85000000149.js"
93
- defer
94
- ></script>
95
- )}
96
- <style type="text/css">
97
- {`
98
- #fc_frame {
99
- bottom: 0 !important;
100
- right: 0 !important;
101
- }
102
- `}
103
- </style>
104
- </ReactHelmet>
105
- )
106
- }
1
+ import { ReactNode } from 'react'
2
+ import { Helmet as ReactHelmet } from 'react-helmet'
3
+
4
+ const isLocalHost = process.env.NODE_ENV === 'development'
5
+
6
+ const freshDeskInnerHtml = `
7
+ window.fwSettings = {
8
+ widget_id: 85000000149,
9
+ }
10
+ !(function () {
11
+ window.openFreshDeskWidget = function openFreshDeskWidget() {
12
+ FreshworksWidget('open', 'ticketForm')
13
+ }
14
+ if ('function' != typeof window.FreshworksWidget) {
15
+ var n = function () {
16
+ n.q.push(arguments)
17
+ }
18
+ ;(n.q = []), (window.FreshworksWidget = n)
19
+ }
20
+ FreshworksWidget('hide', 'launcher')
21
+ })()
22
+
23
+ `
24
+
25
+ const getInnerHtml = (user: any) => {
26
+ if (isLocalHost) {
27
+ return ''
28
+ }
29
+ const fcWidgetMessengerConfig = {
30
+ config: {
31
+ headerProperty: {
32
+ hideChatButton: true,
33
+ },
34
+ },
35
+ }
36
+
37
+ const phone = user?.mobile?.substring(user?.mobile?.length - 10)
38
+
39
+ return `
40
+ window.fcWidgetMessengerConfig = ${JSON.stringify(fcWidgetMessengerConfig)}
41
+ window.fcSettings = {
42
+ onInit: function() {
43
+ console.log('Fresh Chat Init')
44
+ window.fcWidget.setExternalId('${user?.email}')
45
+ window.fcWidget.user.setFirstName('${user?.fullName}')
46
+ window.fcWidget.user.setEmail('${user?.email}')
47
+ window.fcWidget.user.setPhone('${phone}')
48
+ }
49
+ }
50
+
51
+ `
52
+ }
53
+
54
+ interface IHelmetProps {
55
+ appTitle: string
56
+ favicon: string
57
+ description?: string
58
+ user: any
59
+ extraMetaTags?: ReactNode
60
+ }
61
+
62
+ export default function Helmet({
63
+ appTitle,
64
+ favicon,
65
+ description,
66
+ user,
67
+ extraMetaTags,
68
+ }: IHelmetProps) {
69
+ return (
70
+ <ReactHelmet htmlAttributes={{ lang: 'en' }}>
71
+ <title>{appTitle}</title>
72
+ <meta charSet="utf-8" />
73
+ <meta name="description" content={description} />
74
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
75
+ {extraMetaTags}
76
+ <link rel="icon" href={favicon} />
77
+ <link rel="apple-touch-icon" href={favicon} />
78
+ {!isLocalHost && (
79
+ <script
80
+ type="text/javascript"
81
+ src="//in.fw-cdn.com/30814322/430238.js"
82
+ defer
83
+ />
84
+ )}
85
+ {!isLocalHost && <script defer>{getInnerHtml(user)}</script>}
86
+ {!isLocalHost && (
87
+ <script async defer>
88
+ {freshDeskInnerHtml}
89
+ </script>
90
+ )}
91
+ {!isLocalHost && (
92
+ <script
93
+ type="text/javascript"
94
+ src="https://ind-widget.freshworks.com/widgets/85000000149.js"
95
+ defer
96
+ ></script>
97
+ )}
98
+ <style type="text/css">
99
+ {`
100
+ #fc_frame {
101
+ bottom: 0 !important;
102
+ right: 0 !important;
103
+ }
104
+ `}
105
+ </style>
106
+ </ReactHelmet>
107
+ )
108
+ }
@@ -1,28 +1,28 @@
1
- import {
2
- StyledLeftNavContainer,
3
- StyledMainContentContainer,
4
- } from '../../layouts/Components/styles'
5
- import ErrorBoundary from '../ErrorBoundary'
6
- import SideNav from './SideNav'
7
- interface Props {
8
- children?: React.ReactNode
9
- menu: any[]
10
- sideMenuHeader?: React.ReactNode
11
- }
12
-
13
- export default function LayoutWrapper({
14
- children,
15
- menu,
16
- sideMenuHeader,
17
- }: Props) {
18
- return (
19
- <ErrorBoundary>
20
- <StyledLeftNavContainer>
21
- <SideNav menuItems={menu as any[]} header={sideMenuHeader} />
22
- </StyledLeftNavContainer>
23
- <StyledMainContentContainer>
24
- <ErrorBoundary>{children}</ErrorBoundary>
25
- </StyledMainContentContainer>
26
- </ErrorBoundary>
27
- )
28
- }
1
+ import {
2
+ StyledLeftNavContainer,
3
+ StyledMainContentContainer,
4
+ } from '../../layouts/Components/styles'
5
+ import ErrorBoundary from '../ErrorBoundary'
6
+ import SideNav from './SideNav'
7
+ interface Props {
8
+ children?: React.ReactNode
9
+ menu: any[]
10
+ sideMenuHeader?: React.ReactNode
11
+ }
12
+
13
+ export default function LayoutWrapper({
14
+ children,
15
+ menu,
16
+ sideMenuHeader,
17
+ }: Props) {
18
+ return (
19
+ <ErrorBoundary>
20
+ <StyledLeftNavContainer>
21
+ <SideNav menuItems={menu as any[]} header={sideMenuHeader} />
22
+ </StyledLeftNavContainer>
23
+ <StyledMainContentContainer>
24
+ <ErrorBoundary>{children}</ErrorBoundary>
25
+ </StyledMainContentContainer>
26
+ </ErrorBoundary>
27
+ )
28
+ }
@@ -1,29 +1,29 @@
1
- import { KeyboardBackspace } from '@mui/icons-material'
2
- import { Box, styled as styledMui, Typography } from '@mui/material'
3
- import { useNavigate } from 'react-router-dom'
4
-
5
- const StyledSideMenuHeader = styledMui(Box)(({ theme }) => ({
6
- height: '60px',
7
- display: 'flex',
8
- gap: '8px',
9
- alignItems: 'center',
10
- cursor: 'pointer',
11
- background: '#1d1d1d',
12
- }))
13
-
14
- export const SideMenuHeader = ({ title, path }) => {
15
- const navigate = useNavigate()
16
-
17
- return (
18
- <StyledSideMenuHeader
19
- onClick={() => {
20
- navigate(path)
21
- }}
22
- >
23
- <KeyboardBackspace />
24
- <Typography variant="h3" color={'white'}>
25
- {title}
26
- </Typography>
27
- </StyledSideMenuHeader>
28
- )
29
- }
1
+ import { KeyboardBackspace } from '@mui/icons-material'
2
+ import { Box, styled as styledMui, Typography } from '@mui/material'
3
+ import { useNavigate } from 'react-router-dom'
4
+
5
+ const StyledSideMenuHeader = styledMui(Box)(({ theme }) => ({
6
+ height: '60px',
7
+ display: 'flex',
8
+ gap: '8px',
9
+ alignItems: 'center',
10
+ cursor: 'pointer',
11
+ background: '#1d1d1d',
12
+ }))
13
+
14
+ export const SideMenuHeader = ({ title, path }) => {
15
+ const navigate = useNavigate()
16
+
17
+ return (
18
+ <StyledSideMenuHeader
19
+ onClick={() => {
20
+ navigate(path)
21
+ }}
22
+ >
23
+ <KeyboardBackspace />
24
+ <Typography variant="h3" color={'white'}>
25
+ {title}
26
+ </Typography>
27
+ </StyledSideMenuHeader>
28
+ )
29
+ }
@@ -1,168 +1,168 @@
1
- import {
2
- Box,
3
- Collapse,
4
- List,
5
- ListItemIcon,
6
- ListItemText,
7
- styled,
8
- } from '@mui/material'
9
- import { Store } from 'pullstate'
10
- import { memo, ReactNode } from 'react'
11
- import { Link, useMatch, useResolvedPath } from 'react-router-dom'
12
- import { PermissionsStore } from '../../shared-state'
13
- import {
14
- ListItemButton,
15
- StyledChevronIcon,
16
- StyledListItemButton,
17
- } from '../ListItemButton'
18
-
19
- const accessIfNoKey = process.env.NODE_ENV === 'development' ? true : false
20
-
21
- const sideNavStore = new Store({
22
- activeKey: '',
23
- })
24
-
25
- const StyledLink = styled(Link)({
26
- textDecoration: 'none',
27
- })
28
-
29
- const SideNav = ({
30
- menuItems,
31
- header,
32
- }: {
33
- menuItems: any[]
34
- header?: ReactNode
35
- }) => {
36
- return (
37
- <Box
38
- sx={{
39
- background: (theme) => theme.palette.secondary.main,
40
- }}
41
- >
42
- {header ? header : null}
43
- <Box sx={{ ':first-child': { marginTop: '25px' } }}>
44
- {menuItems.map((item, index) => (
45
- <RenderMenuItem key={index} menuItem={item} />
46
- ))}
47
- </Box>
48
- </Box>
49
- )
50
- }
51
-
52
- export default memo(SideNav)
53
-
54
- const RenderMenuItem = ({ menuItem }) => {
55
- const { path, children, title, icon, permissionKey } = menuItem
56
- let resolved = useResolvedPath(path)
57
- let match = useMatch({ path: resolved.pathname, end: false })
58
-
59
- const permissions = PermissionsStore.useState((s) => s).permissions
60
- const hasAccess = permissionKey ? permissions[permissionKey] : accessIfNoKey
61
-
62
- if (children?.length)
63
- return (
64
- <Box sx={{ position: 'relative' }}>
65
- <DropDownMenu
66
- icon={icon}
67
- menuItems={children}
68
- path={path}
69
- title={title}
70
- />
71
- </Box>
72
- )
73
-
74
- return (
75
- <>
76
- {hasAccess ? (
77
- <>
78
- <StyledLink to={path}>
79
- <ListItemButton
80
- hasChildren={false}
81
- label={title}
82
- isActive={!!match}
83
- icon={icon}
84
- />
85
- </StyledLink>
86
- {menuItem?.sectionEnd && (
87
- <Box
88
- sx={{
89
- backgroundColor: '#1D1D1D',
90
- height: '5px',
91
- }}
92
- ></Box>
93
- )}
94
- </>
95
- ) : null}
96
- </>
97
- )
98
- }
99
-
100
- const DropDownMenu = ({ path, title, icon, menuItems }) => {
101
- const { activeKey } = sideNavStore.useState((s) => s)
102
- const permissions = PermissionsStore.useState((s) => s).permissions
103
-
104
- const validateDropdownAccess = () => {
105
- if (process.env.NODE_ENV === 'development' && !permissions) return true
106
-
107
- return menuItems?.some((item) =>
108
- item?.permissionKey ? permissions[item.permissionKey] : accessIfNoKey,
109
- )
110
- }
111
-
112
- if (!validateDropdownAccess()) return null
113
- return (
114
- <Box sx={{ position: 'relative' }}>
115
- <MenuDropDownButton
116
- isActive={activeKey === path}
117
- onClick={() => {
118
- sideNavStore.update((s) => {
119
- s.activeKey = activeKey === path ? '' : path
120
- })
121
- }}
122
- label={title}
123
- icon={icon}
124
- />
125
- <Collapse timeout={200} in={activeKey === path}>
126
- <List>
127
- {menuItems?.map((child) => (
128
- <RenderMenuItem
129
- key={child.path}
130
- menuItem={{
131
- ...child,
132
- path: path + child.path,
133
- }}
134
- />
135
- ))}
136
- </List>
137
- </Collapse>
138
- {menuItems?.sectionEnd && (
139
- <Box
140
- sx={{
141
- backgroundColor: '#1D1D1D',
142
- height: '5px',
143
- }}
144
- ></Box>
145
- )}
146
- </Box>
147
- )
148
- }
149
-
150
- const MenuDropDownButton = ({ icon: Icon, label, onClick, isActive }) => {
151
- return (
152
- <>
153
- <StyledListItemButton
154
- dropDown={true}
155
- onClick={onClick}
156
- isActive={isActive}
157
- >
158
- {Icon ? (
159
- <ListItemIcon>{<Icon />}</ListItemIcon>
160
- ) : (
161
- <Box minWidth={16}></Box>
162
- )}
163
- <ListItemText primary={label} />
164
- <StyledChevronIcon open={isActive} />
165
- </StyledListItemButton>
166
- </>
167
- )
168
- }
1
+ import {
2
+ Box,
3
+ Collapse,
4
+ List,
5
+ ListItemIcon,
6
+ ListItemText,
7
+ styled,
8
+ } from '@mui/material'
9
+ import { Store } from 'pullstate'
10
+ import { memo, ReactNode } from 'react'
11
+ import { Link, useMatch, useResolvedPath } from 'react-router-dom'
12
+ import { PermissionsStore } from '../../shared-state'
13
+ import {
14
+ ListItemButton,
15
+ StyledChevronIcon,
16
+ StyledListItemButton,
17
+ } from '../ListItemButton'
18
+
19
+ const accessIfNoKey = process.env.NODE_ENV === 'development' ? true : false
20
+
21
+ const sideNavStore = new Store({
22
+ activeKey: '',
23
+ })
24
+
25
+ const StyledLink = styled(Link)({
26
+ textDecoration: 'none',
27
+ })
28
+
29
+ const SideNav = ({
30
+ menuItems,
31
+ header,
32
+ }: {
33
+ menuItems: any[]
34
+ header?: ReactNode
35
+ }) => {
36
+ return (
37
+ <Box
38
+ sx={{
39
+ background: (theme) => theme.palette.secondary.main,
40
+ }}
41
+ >
42
+ {header ? header : null}
43
+ <Box sx={{ ':first-child': { marginTop: '25px' } }}>
44
+ {menuItems.map((item, index) => (
45
+ <RenderMenuItem key={index} menuItem={item} />
46
+ ))}
47
+ </Box>
48
+ </Box>
49
+ )
50
+ }
51
+
52
+ export default memo(SideNav)
53
+
54
+ const RenderMenuItem = ({ menuItem }) => {
55
+ const { path, children, title, icon, permissionKey } = menuItem
56
+ let resolved = useResolvedPath(path)
57
+ let match = useMatch({ path: resolved.pathname, end: false })
58
+
59
+ const permissions = PermissionsStore.useState((s) => s).permissions
60
+ const hasAccess = permissionKey ? permissions[permissionKey] : accessIfNoKey
61
+
62
+ if (children?.length)
63
+ return (
64
+ <Box sx={{ position: 'relative' }}>
65
+ <DropDownMenu
66
+ icon={icon}
67
+ menuItems={children}
68
+ path={path}
69
+ title={title}
70
+ />
71
+ </Box>
72
+ )
73
+
74
+ return (
75
+ <>
76
+ {hasAccess ? (
77
+ <>
78
+ <StyledLink to={path}>
79
+ <ListItemButton
80
+ hasChildren={false}
81
+ label={title}
82
+ isActive={!!match}
83
+ icon={icon}
84
+ />
85
+ </StyledLink>
86
+ {menuItem?.sectionEnd && (
87
+ <Box
88
+ sx={{
89
+ backgroundColor: '#1D1D1D',
90
+ height: '5px',
91
+ }}
92
+ ></Box>
93
+ )}
94
+ </>
95
+ ) : null}
96
+ </>
97
+ )
98
+ }
99
+
100
+ const DropDownMenu = ({ path, title, icon, menuItems }) => {
101
+ const { activeKey } = sideNavStore.useState((s) => s)
102
+ const permissions = PermissionsStore.useState((s) => s).permissions
103
+
104
+ const validateDropdownAccess = () => {
105
+ if (process.env.NODE_ENV === 'development' && !permissions) return true
106
+
107
+ return menuItems?.some((item) =>
108
+ item?.permissionKey ? permissions[item.permissionKey] : accessIfNoKey,
109
+ )
110
+ }
111
+
112
+ if (!validateDropdownAccess()) return null
113
+ return (
114
+ <Box sx={{ position: 'relative' }}>
115
+ <MenuDropDownButton
116
+ isActive={activeKey === path}
117
+ onClick={() => {
118
+ sideNavStore.update((s) => {
119
+ s.activeKey = activeKey === path ? '' : path
120
+ })
121
+ }}
122
+ label={title}
123
+ icon={icon}
124
+ />
125
+ <Collapse timeout={200} in={activeKey === path}>
126
+ <List>
127
+ {menuItems?.map((child) => (
128
+ <RenderMenuItem
129
+ key={child.path}
130
+ menuItem={{
131
+ ...child,
132
+ path: path + child.path,
133
+ }}
134
+ />
135
+ ))}
136
+ </List>
137
+ </Collapse>
138
+ {menuItems?.sectionEnd && (
139
+ <Box
140
+ sx={{
141
+ backgroundColor: '#1D1D1D',
142
+ height: '5px',
143
+ }}
144
+ ></Box>
145
+ )}
146
+ </Box>
147
+ )
148
+ }
149
+
150
+ const MenuDropDownButton = ({ icon: Icon, label, onClick, isActive }) => {
151
+ return (
152
+ <>
153
+ <StyledListItemButton
154
+ dropDown={true}
155
+ onClick={onClick}
156
+ isActive={isActive}
157
+ >
158
+ {Icon ? (
159
+ <ListItemIcon>{<Icon />}</ListItemIcon>
160
+ ) : (
161
+ <Box minWidth={16}></Box>
162
+ )}
163
+ <ListItemText primary={label} />
164
+ <StyledChevronIcon open={isActive} />
165
+ </StyledListItemButton>
166
+ </>
167
+ )
168
+ }