@campxdev/shared 0.6.19 → 1.0.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 (242) hide show
  1. package/.eslintignore +3 -3
  2. package/.eslintrc.js +33 -33
  3. package/.prettierrc +10 -10
  4. package/antd.customize.less +73 -73
  5. package/exports.ts +16 -16
  6. package/package.json +94 -93
  7. package/publish.sh +1 -1
  8. package/src/assets/fonts/avenir/index.ts +2 -2
  9. package/src/assets/fonts/poppins/index.ts +7 -7
  10. package/src/assets/images/index.ts +17 -17
  11. package/src/assets/images/unauth.svg +92 -92
  12. package/src/components/ActionButton.tsx +28 -28
  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 +164 -164
  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 -63
  25. package/src/components/DrawerWrapper/DrawerTemplate.tsx +53 -53
  26. package/src/components/DrawerWrapper/DrawerWrapper.tsx +53 -53
  27. package/src/components/DropDownButton.tsx +194 -194
  28. package/src/components/ErrorBoundary/ErrorBoundary.tsx +28 -28
  29. package/src/components/ErrorBoundary/ErrorFallback.tsx +236 -236
  30. package/src/components/ErrorBoundary/GlobalNetworkLoadingIndicator.tsx +13 -13
  31. package/src/components/ErrorBoundary/index.tsx +1 -1
  32. package/src/components/ErrorBox.tsx +42 -42
  33. package/src/components/FloatingContainer.tsx +33 -33
  34. package/src/components/Form/Form.tsx +156 -156
  35. package/src/components/Form/RenderForm.tsx +188 -188
  36. package/src/components/FullCalendar/Actions.tsx +162 -162
  37. package/src/components/FullCalendar/FullCalendarWrapper.tsx +54 -54
  38. package/src/components/FullScreenLoader.tsx +19 -19
  39. package/src/components/HookForm/AutoCompleteSearch.tsx +113 -113
  40. package/src/components/HookForm/DatePicker.tsx +65 -65
  41. package/src/components/HookForm/DateTimePicker.tsx +70 -70
  42. package/src/components/HookForm/FormLabel.tsx +14 -14
  43. package/src/components/HookForm/MultiCheckbox.tsx +82 -82
  44. package/src/components/HookForm/MultiSelect.tsx +100 -100
  45. package/src/components/HookForm/RadioGroup.tsx +106 -106
  46. package/src/components/HookForm/SingleCheckbox.tsx +46 -46
  47. package/src/components/HookForm/SingleSelect.tsx +93 -93
  48. package/src/components/HookForm/TextField.tsx +74 -74
  49. package/src/components/HookForm/TimePicker.tsx +82 -82
  50. package/src/components/HookForm/index.ts +23 -23
  51. package/src/components/IconButtons/IconButtons.tsx +137 -137
  52. package/src/components/IconButtons/Icons.tsx +268 -268
  53. package/src/components/IconButtons/assets/edit.svg +4 -4
  54. package/src/components/IconButtons/assets/eye.svg +6 -6
  55. package/src/components/IconButtons/assets/trash.svg +7 -7
  56. package/src/components/IconButtons/index.tsx +8 -8
  57. package/src/components/IconLabel.tsx +37 -37
  58. package/src/components/Image/Image.tsx +43 -43
  59. package/src/components/Image/index.tsx +1 -1
  60. package/src/components/ImageUpload.tsx +98 -98
  61. package/src/components/Input/AutoCompleteSearch.tsx +113 -113
  62. package/src/components/Input/DatePicker.tsx +60 -60
  63. package/src/components/Input/DateRangePicker.tsx +131 -131
  64. package/src/components/Input/DateTimePicker.tsx +70 -70
  65. package/src/components/Input/FormLabel.tsx +14 -14
  66. package/src/components/Input/MultiCheckbox.tsx +79 -79
  67. package/src/components/Input/MultiSelect.tsx +52 -52
  68. package/src/components/Input/RadioGroup.tsx +61 -61
  69. package/src/components/Input/SingleCheckbox.tsx +23 -23
  70. package/src/components/Input/SingleSelect.tsx +124 -124
  71. package/src/components/Input/TextField.tsx +50 -50
  72. package/src/components/Input/TimePicker.tsx +82 -82
  73. package/src/components/Input/index.ts +26 -26
  74. package/src/components/JsonPreview/JsonPreview.tsx +7 -7
  75. package/src/components/JsonPreview/index.tsx +1 -1
  76. package/src/components/LabelValue/LabelValue.tsx +21 -21
  77. package/src/components/LabelValue/index.tsx +1 -1
  78. package/src/components/Layout/ChangePassword.tsx +49 -49
  79. package/src/components/Layout/Header/AppHeader.tsx +124 -124
  80. package/src/components/Layout/Header/AppsMenu.tsx +92 -92
  81. package/src/components/Layout/Header/CogWheelMenu.tsx +33 -33
  82. package/src/components/Layout/Header/HelpWidget/HelpWidget.tsx +298 -0
  83. package/src/components/Layout/Header/HelpWidget/styles.tsx +92 -0
  84. package/src/components/Layout/Header/Notification.tsx +13 -13
  85. package/src/components/Layout/Header/UserBox.tsx +90 -70
  86. package/src/components/Layout/Header/applications.ts +90 -90
  87. package/src/components/Layout/Header/assets/background.png +0 -0
  88. package/src/components/Layout/Header/assets/campx.png +0 -0
  89. package/src/components/Layout/Header/assets/{newAssets/campx_square_small.svg → campx_square_small.svg} +9 -9
  90. package/src/components/Layout/Header/assets/{newAssets/commutex.png → commuteX.png} +0 -0
  91. package/src/components/Layout/Header/assets/commutex.png +0 -0
  92. package/src/components/Layout/Header/assets/{newAssets/commutex.svg → commutex.svg} +14 -14
  93. package/src/components/Layout/Header/assets/{newAssets/commutexSmall.svg → commutexSmall.svg} +11 -11
  94. package/src/components/Layout/Header/assets/contactBg.png +0 -0
  95. package/src/components/Layout/Header/assets/{newAssets/enroll.svg → enroll.svg} +14 -14
  96. package/src/components/Layout/Header/assets/{newAssets/enrollx.svg → enrollx.svg} +14 -14
  97. package/src/components/Layout/Header/assets/{newAssets/entrollx.png → entrollx.png} +0 -0
  98. package/src/components/Layout/Header/assets/{newAssets/exams_small.svg → exams_small.svg} +12 -12
  99. package/src/components/Layout/Header/assets/{newAssets/examsx.svg → examsx.svg} +14 -14
  100. package/src/components/Layout/Header/assets/examx.png +0 -0
  101. package/src/components/Layout/Header/assets/{newAssets/hostel_small.svg → hostel_small.svg} +13 -13
  102. package/src/components/Layout/Header/assets/hostelx.png +0 -0
  103. package/src/components/Layout/Header/assets/{newAssets/hostelx.svg → hostelx.svg} +13 -13
  104. package/src/components/Layout/Header/assets/index.ts +33 -29
  105. package/src/components/Layout/Header/assets/{newAssets/libraryx.svg → libraryx.svg} +12 -12
  106. package/src/components/Layout/Header/assets/{newAssets/libreryx.png → libreryx.png} +0 -0
  107. package/src/components/Layout/Header/assets/{newAssets/pay_small.svg → pay_small.svg} +16 -16
  108. package/src/components/Layout/Header/assets/payx.png +0 -0
  109. package/src/components/Layout/Header/assets/{newAssets/payx.svg → payx.svg} +19 -19
  110. package/src/components/Layout/Header/assets/{newAssets/people_small.svg → people_small.svg} +9 -9
  111. package/src/components/Layout/Header/assets/{newAssets/peoplex.svg → peoplex.svg} +12 -12
  112. package/src/components/Layout/Header/assets/{newAssets/pepolex.png → pepolex.png} +0 -0
  113. package/src/components/Layout/Header/assets/{newAssets/squarex.svg → 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 +98 -98
  117. package/src/components/Layout/Tickets/MyTickets.tsx +74 -0
  118. package/src/components/Layout/Tickets/Services.tsx +6 -0
  119. package/src/components/Layout/Tickets/TicketDetails.tsx +66 -0
  120. package/src/components/Layout/Tickets/TimeLine.tsx +64 -0
  121. package/src/components/Layout/Tickets/index.tsx +1 -0
  122. package/src/components/Layout/Tickets/styles.tsx +136 -0
  123. package/src/components/LayoutWrapper.tsx +25 -25
  124. package/src/components/LinearProgress.tsx +19 -19
  125. package/src/components/ListItemButton.tsx +95 -94
  126. package/src/components/LoginForm.tsx +103 -103
  127. package/src/components/MediaRow/MediaRow.tsx +69 -69
  128. package/src/components/MediaRow/index.tsx +1 -1
  129. package/src/components/MenuButton.tsx +103 -103
  130. package/src/components/ModalButtons/DialogButton.tsx +88 -88
  131. package/src/components/ModalButtons/DrawerButton.tsx +89 -89
  132. package/src/components/ModalButtons/index.tsx +4 -4
  133. package/src/components/NoDataIllustration/NoDataIllustration.tsx +32 -32
  134. package/src/components/NoDataIllustration/index.tsx +1 -1
  135. package/src/components/PageContent.tsx +17 -17
  136. package/src/components/PageHeader.tsx +52 -52
  137. package/src/components/PageNotFound.tsx +26 -26
  138. package/src/components/PopupConfirm/ConfirmContextProvider.tsx +40 -40
  139. package/src/components/PopupConfirm/PopupConfirm.tsx +34 -34
  140. package/src/components/PopupConfirm/index.tsx +1 -1
  141. package/src/components/PopupConfirm/useConfirm.ts +47 -47
  142. package/src/components/Router.tsx +7 -7
  143. package/src/components/Row/Row.tsx +24 -24
  144. package/src/components/Row/index.tsx +1 -1
  145. package/src/components/SearchBar/SearchBar.tsx +53 -53
  146. package/src/components/SearchBar/index.tsx +1 -1
  147. package/src/components/SideMenuHeader.tsx +29 -29
  148. package/src/components/SideNav.tsx +168 -168
  149. package/src/components/Spinner.tsx +18 -18
  150. package/src/components/StepsHeader/StepsHeader.tsx +115 -115
  151. package/src/components/StepsHeader/index.tsx +1 -1
  152. package/src/components/StyledTableContainer.tsx +33 -33
  153. package/src/components/SwitchButton/SwitchButton.tsx +41 -41
  154. package/src/components/SwitchButton/index.tsx +1 -1
  155. package/src/components/Table.tsx +42 -42
  156. package/src/components/TableComponent/BatchActionsHeader.tsx +58 -58
  157. package/src/components/TableComponent/Icons/index.tsx +50 -50
  158. package/src/components/TableComponent/ReactTable.tsx +293 -293
  159. package/src/components/TableComponent/RenderTableBody.tsx +64 -64
  160. package/src/components/TableComponent/TableFooter/TableFooter.tsx +102 -102
  161. package/src/components/TableComponent/TableFooter/index.tsx +1 -1
  162. package/src/components/TableComponent/TableFooter/styles.tsx +28 -28
  163. package/src/components/TableComponent/index.tsx +226 -226
  164. package/src/components/TableComponent/react-table-config.d.ts +128 -128
  165. package/src/components/TableComponent/styles.tsx +173 -173
  166. package/src/components/TableComponent/types.ts +57 -57
  167. package/src/components/Tabs/Tabs.tsx +52 -52
  168. package/src/components/Tabs/TabsContainer.tsx +50 -50
  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 +42 -42
  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/UploadDocument.tsx +108 -108
  177. package/src/components/UploadDocument/index.tsx +1 -1
  178. package/src/components/UploadFileDialog/UploadFileDialog.tsx +238 -238
  179. package/src/components/UploadFileDialog/index.tsx +1 -1
  180. package/src/components/index.ts +86 -86
  181. package/src/config/axios.ts +74 -74
  182. package/src/config/axiosXTenant.ts +57 -57
  183. package/src/constants/UIConstants.ts +97 -97
  184. package/src/constants/formValidations.ts +6 -6
  185. package/src/constants/index.ts +5 -5
  186. package/src/constants/isDevelopment.ts +3 -3
  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 +59 -59
  191. package/src/contexts/QueryClientProvider.tsx +22 -22
  192. package/src/hooks/index.ts +3 -3
  193. package/src/hooks/useAppInit.ts +33 -33
  194. package/src/hooks/useAuth.ts +92 -91
  195. package/src/hooks/useFetch.ts +53 -53
  196. package/src/hooks/useRouter.ts +31 -31
  197. package/src/layouts/Components/DashBoardMenu.tsx +232 -232
  198. package/src/layouts/Components/icons/index.tsx +403 -403
  199. package/src/layouts/Components/styles.tsx +60 -60
  200. package/src/layouts/ComponentsLayout.tsx +3 -3
  201. package/src/permissions/PageWithPermission.tsx +18 -18
  202. package/src/permissions/PermissionDeniedPage.tsx +16 -16
  203. package/src/permissions/PermissionsStore.ts +352 -352
  204. package/src/permissions/ValidateAccess.tsx +18 -18
  205. package/src/permissions/index.ts +3 -3
  206. package/src/react-app-env.d.ts +1 -1
  207. package/src/shared-state/AssetsStore.ts +15 -15
  208. package/src/shared-state/UserStore.ts +13 -13
  209. package/src/shared-state/index.ts +3 -3
  210. package/src/theme/App.less +3 -3
  211. package/src/theme/MuiThemeProvider.tsx +13 -13
  212. package/src/theme/customCssBaseline.ts +78 -78
  213. package/src/theme/index.css +75 -75
  214. package/src/theme/muiTheme.ts +490 -490
  215. package/src/theme/theme.d.ts +75 -75
  216. package/src/utils/alphabet.ts +23 -23
  217. package/src/utils/arrayPadEnd.ts +3 -3
  218. package/src/utils/formatCurrency.ts +9 -9
  219. package/src/utils/getUrlParams.ts +5 -5
  220. package/src/utils/index.ts +8 -8
  221. package/src/utils/logout.ts +24 -24
  222. package/src/utils/ordinalSuffixOf.ts +14 -14
  223. package/src/utils/romanize.ts +40 -40
  224. package/src/utils/withLocalization.tsx +11 -11
  225. package/src/utils/withRouteWrapper.tsx +25 -25
  226. package/src/utils/withSuspense.tsx +6 -6
  227. package/styled-components.tsx +60 -60
  228. package/todo.md +20 -20
  229. package/tsconfig.json +21 -21
  230. package/src/components/Layout/Header/FreshDeskHelpButton.tsx +0 -19
  231. package/src/components/Layout/Header/assets/campx.svg +0 -29
  232. package/src/components/Layout/Header/assets/collegex.png +0 -0
  233. package/src/components/Layout/Header/assets/enrollx.png +0 -0
  234. package/src/components/Layout/Header/assets/newAssets/campx.png +0 -0
  235. package/src/components/Layout/Header/assets/newAssets/examx.png +0 -0
  236. package/src/components/Layout/Header/assets/newAssets/hostelx.png +0 -0
  237. package/src/components/Layout/Header/assets/newAssets/payx.png +0 -0
  238. package/src/components/Layout/Header/assets/newexamx.png +0 -0
  239. package/src/components/Layout/Header/assets/newpayx.png +0 -0
  240. package/src/components/Layout/Header/assets/payxHeader.svg +0 -21
  241. package/src/components/Layout/Header/assets/peoplex.png +0 -0
  242. package/src/components/Layout/Header/assets/peoplexHeader.svg +0 -14
@@ -1,47 +1,47 @@
1
- import { ReactNode, useContext, useEffect, useState } from 'react'
2
- import { ConfirmContext } from './ConfirmContextProvider'
3
-
4
- export default function useConfirm(): {
5
- isConfirmed: (prompt?: string) => Promise<boolean>
6
- prompt?: ReactNode
7
- isOpen?: boolean
8
- proceed?: () => void
9
- cancel?: () => void
10
- } {
11
- const { confirm, setConfirm } = useContext(ConfirmContext)
12
- const [needsCleanup, setNeedsCleanup] = useState(false)
13
-
14
- const isConfirmed = (prompt) => {
15
- setNeedsCleanup(true)
16
- const promise = new Promise((resolve, reject) => {
17
- setConfirm({
18
- prompt,
19
- isOpen: true,
20
- proceed: resolve,
21
- cancel: reject,
22
- })
23
- })
24
- return promise.then(
25
- () => {
26
- setConfirm({ ...confirm, isOpen: false })
27
- return true
28
- },
29
- () => {
30
- setConfirm({ ...confirm, isOpen: false })
31
- return false
32
- },
33
- )
34
- }
35
-
36
- useEffect(() => {
37
- return () => {
38
- if (confirm.cancel && needsCleanup) {
39
- confirm.cancel()
40
- }
41
- }
42
- }, [confirm, needsCleanup])
43
- return {
44
- ...confirm,
45
- isConfirmed,
46
- }
47
- }
1
+ import { ReactNode, useContext, useEffect, useState } from 'react'
2
+ import { ConfirmContext } from './ConfirmContextProvider'
3
+
4
+ export default function useConfirm(): {
5
+ isConfirmed: (prompt?: string) => Promise<boolean>
6
+ prompt?: ReactNode
7
+ isOpen?: boolean
8
+ proceed?: () => void
9
+ cancel?: () => void
10
+ } {
11
+ const { confirm, setConfirm } = useContext(ConfirmContext)
12
+ const [needsCleanup, setNeedsCleanup] = useState(false)
13
+
14
+ const isConfirmed = (prompt) => {
15
+ setNeedsCleanup(true)
16
+ const promise = new Promise((resolve, reject) => {
17
+ setConfirm({
18
+ prompt,
19
+ isOpen: true,
20
+ proceed: resolve,
21
+ cancel: reject,
22
+ })
23
+ })
24
+ return promise.then(
25
+ () => {
26
+ setConfirm({ ...confirm, isOpen: false })
27
+ return true
28
+ },
29
+ () => {
30
+ setConfirm({ ...confirm, isOpen: false })
31
+ return false
32
+ },
33
+ )
34
+ }
35
+
36
+ useEffect(() => {
37
+ return () => {
38
+ if (confirm.cancel && needsCleanup) {
39
+ confirm.cancel()
40
+ }
41
+ }
42
+ }, [confirm, needsCleanup])
43
+ return {
44
+ ...confirm,
45
+ isConfirmed,
46
+ }
47
+ }
@@ -1,7 +1,7 @@
1
- import React from 'react'
2
-
3
- function Router() {
4
- return <div>Router</div>
5
- }
6
-
7
- export default Router
1
+ import React from 'react'
2
+
3
+ function Router() {
4
+ return <div>Router</div>
5
+ }
6
+
7
+ export default Router
@@ -1,24 +1,24 @@
1
- import { Box, SxProps } from '@mui/material'
2
- import { ReactNode } from 'react'
3
-
4
- export default function Row({
5
- gap,
6
- children,
7
- sx,
8
- }: {
9
- gap: number
10
- children: ReactNode
11
- sx?: SxProps
12
- }) {
13
- return (
14
- <Box
15
- sx={{
16
- display: 'flex',
17
- gap: `${gap}px`,
18
- ...sx,
19
- }}
20
- >
21
- {children}
22
- </Box>
23
- )
24
- }
1
+ import { Box, SxProps } from '@mui/material'
2
+ import { ReactNode } from 'react'
3
+
4
+ export default function Row({
5
+ gap,
6
+ children,
7
+ sx,
8
+ }: {
9
+ gap: number
10
+ children: ReactNode
11
+ sx?: SxProps
12
+ }) {
13
+ return (
14
+ <Box
15
+ sx={{
16
+ display: 'flex',
17
+ gap: `${gap}px`,
18
+ ...sx,
19
+ }}
20
+ >
21
+ {children}
22
+ </Box>
23
+ )
24
+ }
@@ -1 +1 @@
1
- export { default } from './Row'
1
+ export { default } from './Row'
@@ -1,53 +1,53 @@
1
- import { Search, Tune } from '@mui/icons-material'
2
- import { Box, InputAdornment, styled, TextField } from '@mui/material'
3
- import { useState } from 'react'
4
-
5
- interface SearchBarProps {
6
- onSearch: (v: string) => void
7
- filters?: {
8
- onClick: () => void
9
- }
10
- }
11
-
12
- export default function SearchBar({ onSearch, filters }: SearchBarProps) {
13
- const [search, setSearch] = useState('')
14
- return (
15
- <Box sx={{ display: 'flex', gap: '20px' }}>
16
- <TextField
17
- sx={{ maxWidth: '600px' }}
18
- label="Search"
19
- value={search}
20
- onChange={(e) => {
21
- setSearch(e.target.value)
22
- onSearch(e.target.value)
23
- }}
24
- InputProps={{
25
- endAdornment: (
26
- <InputAdornment position="end">
27
- <Search />
28
- </InputAdornment>
29
- ),
30
- }}
31
- />
32
- {filters && (
33
- <StyledButtonWrapper onClick={filters?.onClick}>
34
- <Tune />
35
- </StyledButtonWrapper>
36
- )}
37
- </Box>
38
- )
39
- }
40
-
41
- const StyledButtonWrapper = styled(Box)(({ theme }) => ({
42
- width: '52px',
43
- border: theme.borders.grayLight,
44
- display: 'flex',
45
- alignItems: 'center',
46
- justifyContent: 'center',
47
- borderRadius: '10px',
48
- cursor: 'pointer',
49
- '&:active': {
50
- border: `1px solid ${theme.palette.primary.main}`,
51
- },
52
- transition: 'border 0.1s ease-in-out',
53
- }))
1
+ import { Search, Tune } from '@mui/icons-material'
2
+ import { Box, InputAdornment, styled, TextField } from '@mui/material'
3
+ import { useState } from 'react'
4
+
5
+ interface SearchBarProps {
6
+ onSearch: (v: string) => void
7
+ filters?: {
8
+ onClick: () => void
9
+ }
10
+ }
11
+
12
+ export default function SearchBar({ onSearch, filters }: SearchBarProps) {
13
+ const [search, setSearch] = useState('')
14
+ return (
15
+ <Box sx={{ display: 'flex', gap: '20px' }}>
16
+ <TextField
17
+ sx={{ maxWidth: '600px' }}
18
+ label="Search"
19
+ value={search}
20
+ onChange={(e) => {
21
+ setSearch(e.target.value)
22
+ onSearch(e.target.value)
23
+ }}
24
+ InputProps={{
25
+ endAdornment: (
26
+ <InputAdornment position="end">
27
+ <Search />
28
+ </InputAdornment>
29
+ ),
30
+ }}
31
+ />
32
+ {filters && (
33
+ <StyledButtonWrapper onClick={filters?.onClick}>
34
+ <Tune />
35
+ </StyledButtonWrapper>
36
+ )}
37
+ </Box>
38
+ )
39
+ }
40
+
41
+ const StyledButtonWrapper = styled(Box)(({ theme }) => ({
42
+ width: '52px',
43
+ border: theme.borders.grayLight,
44
+ display: 'flex',
45
+ alignItems: 'center',
46
+ justifyContent: 'center',
47
+ borderRadius: '10px',
48
+ cursor: 'pointer',
49
+ '&:active': {
50
+ border: `1px solid ${theme.palette.primary.main}`,
51
+ },
52
+ transition: 'border 0.1s ease-in-out',
53
+ }))
@@ -1 +1 @@
1
- export { default as SearchBar } from './SearchBar'
1
+ export { default as SearchBar } from './SearchBar'
@@ -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 '../permissions'
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>
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?.every((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 '../permissions'
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?.every((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
+ }