@campxdev/shared 1.4.19 → 1.4.21

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 (216) hide show
  1. package/antd.customize.less +73 -73
  2. package/exports.ts +18 -18
  3. package/package.json +84 -84
  4. package/src/assets/fonts/avenir/index.ts +2 -2
  5. package/src/assets/fonts/poppins/index.ts +7 -7
  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/Attachment.tsx +26 -26
  10. package/src/components/AutocompleteSearch/AutocompleteSearch.tsx +57 -57
  11. package/src/components/AutocompleteSearch/index.tsx +1 -1
  12. package/src/components/Breadcrumbs.tsx +72 -72
  13. package/src/components/Card.tsx +98 -98
  14. package/src/components/CardsGrid.tsx +28 -28
  15. package/src/components/ChangePassword.tsx +123 -123
  16. package/src/components/Chips.tsx +81 -81
  17. package/src/components/Detail.tsx +15 -15
  18. package/src/components/DetailsGrid.tsx +52 -52
  19. package/src/components/DividerHeading.tsx +41 -41
  20. package/src/components/DrawerWrapper/DialogWrapper.tsx +67 -67
  21. package/src/components/DrawerWrapper/DrawerTemplate.tsx +53 -53
  22. package/src/components/DrawerWrapper/DrawerWrapper.tsx +53 -53
  23. package/src/components/DropDownButton/AnchorElement.tsx +44 -0
  24. package/src/components/DropDownButton/DropDownButton.tsx +175 -177
  25. package/src/components/DropDownButton/DropdownMenuItem.tsx +100 -0
  26. package/src/components/DropDownButton/index.tsx +1 -1
  27. package/src/components/DropDownButton/styles.tsx +59 -56
  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/FilterComponents/FilterButton.tsx +40 -40
  34. package/src/components/FilterComponents/SearchBar.tsx +40 -40
  35. package/src/components/FloatingContainer.tsx +33 -33
  36. package/src/components/Form/Form.tsx +156 -156
  37. package/src/components/Form/RenderForm.tsx +188 -188
  38. package/src/components/FullCalendar/Actions.tsx +162 -162
  39. package/src/components/FullCalendar/FullCalendarWrapper.tsx +54 -54
  40. package/src/components/FullScreenLoader.tsx +19 -19
  41. package/src/components/HookForm/AutoCompleteSearch.tsx +113 -113
  42. package/src/components/HookForm/DatePicker.tsx +40 -40
  43. package/src/components/HookForm/DateTimePicker.tsx +47 -47
  44. package/src/components/HookForm/FormLabel.tsx +14 -14
  45. package/src/components/HookForm/MultiCheckbox.tsx +69 -69
  46. package/src/components/HookForm/MultiSelect.tsx +53 -53
  47. package/src/components/HookForm/RadioGroup.tsx +45 -45
  48. package/src/components/HookForm/SingleCheckbox.tsx +34 -34
  49. package/src/components/HookForm/SingleSelect.tsx +46 -46
  50. package/src/components/HookForm/TextField.tsx +40 -40
  51. package/src/components/HookForm/TimePicker.tsx +40 -40
  52. package/src/components/HookForm/index.ts +23 -23
  53. package/src/components/IconButtons/IconButtons.tsx +137 -137
  54. package/src/components/IconButtons/Icons.tsx +268 -268
  55. package/src/components/IconButtons/assets/edit.svg +4 -4
  56. package/src/components/IconButtons/assets/eye.svg +6 -6
  57. package/src/components/IconButtons/assets/trash.svg +7 -7
  58. package/src/components/IconButtons/index.tsx +8 -8
  59. package/src/components/IconLabel.tsx +37 -37
  60. package/src/components/Image/Image.tsx +45 -45
  61. package/src/components/Image/index.tsx +1 -1
  62. package/src/components/ImageUpload.tsx +98 -98
  63. package/src/components/Input/AsyncSearchSelect/AsyncSearchSelect.tsx +216 -216
  64. package/src/components/Input/AsyncSearchSelect/index.tsx +1 -1
  65. package/src/components/Input/AsyncSearchSelect/styles.tsx +105 -105
  66. package/src/components/Input/AutoCompleteSearch.tsx +121 -121
  67. package/src/components/Input/DatePicker.tsx +69 -69
  68. package/src/components/Input/DateRangePicker.tsx +105 -105
  69. package/src/components/Input/DateTimePicker.tsx +77 -77
  70. package/src/components/Input/FormLabel.tsx +21 -21
  71. package/src/components/Input/MultiCheckbox.tsx +64 -64
  72. package/src/components/Input/MultiSelect.tsx +150 -150
  73. package/src/components/Input/RadioGroup.tsx +104 -104
  74. package/src/components/Input/SingleCheckbox.tsx +78 -78
  75. package/src/components/Input/SingleSelect.tsx +104 -104
  76. package/src/components/Input/TextField.tsx +46 -46
  77. package/src/components/Input/TimePicker.tsx +70 -70
  78. package/src/components/Input/index.ts +26 -26
  79. package/src/components/Input/types.ts +3 -3
  80. package/src/components/JsonPreview.tsx +7 -7
  81. package/src/components/LabelValue.tsx +21 -21
  82. package/src/components/Layout/ChangePassword.tsx +49 -49
  83. package/src/components/Layout/Header/AppHeader.tsx +102 -102
  84. package/src/components/Layout/Header/AppsMenu.tsx +98 -98
  85. package/src/components/Layout/Header/CogWheelMenu.tsx +33 -33
  86. package/src/components/Layout/Header/Notification.tsx +13 -13
  87. package/src/components/Layout/Header/UserBox.tsx +81 -81
  88. package/src/components/Layout/Header/applications.ts +91 -91
  89. package/src/components/Layout/Header/assets/campx_square_small.svg +9 -9
  90. package/src/components/Layout/Header/assets/commutex.svg +14 -14
  91. package/src/components/Layout/Header/assets/commutexSmall.svg +11 -11
  92. package/src/components/Layout/Header/assets/enroll.svg +14 -14
  93. package/src/components/Layout/Header/assets/enrollx.svg +14 -14
  94. package/src/components/Layout/Header/assets/exams_small.svg +12 -12
  95. package/src/components/Layout/Header/assets/examsx.svg +14 -14
  96. package/src/components/Layout/Header/assets/hostel_small.svg +13 -13
  97. package/src/components/Layout/Header/assets/hostelx.svg +13 -13
  98. package/src/components/Layout/Header/assets/index.ts +33 -33
  99. package/src/components/Layout/Header/assets/libraryx.svg +12 -12
  100. package/src/components/Layout/Header/assets/pay_small.svg +16 -16
  101. package/src/components/Layout/Header/assets/payx.svg +19 -19
  102. package/src/components/Layout/Header/assets/people_small.svg +9 -9
  103. package/src/components/Layout/Header/assets/peoplex.svg +12 -12
  104. package/src/components/Layout/Header/assets/squarex.svg +12 -12
  105. package/src/components/Layout/Header/icons.tsx +57 -57
  106. package/src/components/Layout/Header/index.tsx +1 -1
  107. package/src/components/Layout/Header/styles.tsx +124 -124
  108. package/src/components/Layout/LayoutWrapper.tsx +28 -28
  109. package/src/components/Layout/SideMenuHeader.tsx +29 -29
  110. package/src/components/Layout/SideNav.tsx +168 -168
  111. package/src/components/Layout/Tickets/HelpWidget/HelpWidget.tsx +273 -273
  112. package/src/components/Layout/Tickets/HelpWidget/styles.tsx +94 -94
  113. package/src/components/Layout/Tickets/MyTickets.tsx +72 -72
  114. package/src/components/Layout/Tickets/TicketDetails.tsx +65 -65
  115. package/src/components/Layout/Tickets/TimeLine.tsx +64 -64
  116. package/src/components/Layout/Tickets/index.tsx +1 -1
  117. package/src/components/Layout/Tickets/services.ts +11 -11
  118. package/src/components/Layout/Tickets/styles.tsx +136 -136
  119. package/src/components/LinearProgress.tsx +19 -19
  120. package/src/components/ListItemButton.tsx +95 -95
  121. package/src/components/LoginForm.tsx +80 -80
  122. package/src/components/MediaRow/MediaRow.tsx +69 -69
  123. package/src/components/MediaRow/index.tsx +1 -1
  124. package/src/components/ModalButtons/DialogButton.tsx +121 -93
  125. package/src/components/ModalButtons/DrawerButton.tsx +113 -84
  126. package/src/components/ModalButtons/index.tsx +4 -4
  127. package/src/components/NoDataIllustration.tsx +32 -32
  128. package/src/components/PageContent.tsx +12 -12
  129. package/src/components/PageHeader.tsx +55 -55
  130. package/src/components/PageNotFound.tsx +26 -26
  131. package/src/components/PopupConfirm/ConfirmContextProvider.tsx +40 -40
  132. package/src/components/PopupConfirm/PopupConfirm.tsx +34 -34
  133. package/src/components/PopupConfirm/index.tsx +1 -1
  134. package/src/components/PopupConfirm/useConfirm.ts +47 -47
  135. package/src/components/Row.tsx +24 -24
  136. package/src/components/Spinner.tsx +18 -18
  137. package/src/components/StepsHeader/StepsHeader.tsx +115 -115
  138. package/src/components/StepsHeader/index.tsx +1 -1
  139. package/src/components/StyledTableContainer.tsx +33 -33
  140. package/src/components/SwitchButton.tsx +41 -41
  141. package/src/components/Table.tsx +42 -42
  142. package/src/components/TableComponent/BatchActionsHeader.tsx +58 -58
  143. package/src/components/TableComponent/Icons/index.tsx +50 -50
  144. package/src/components/TableComponent/ReactTable.tsx +295 -295
  145. package/src/components/TableComponent/RenderTableBody.tsx +68 -68
  146. package/src/components/TableComponent/Table.tsx +197 -197
  147. package/src/components/TableComponent/TableFooter/TableFooter.tsx +104 -104
  148. package/src/components/TableComponent/TableFooter/index.tsx +1 -1
  149. package/src/components/TableComponent/TableFooter/styles.tsx +28 -28
  150. package/src/components/TableComponent/index.tsx +1 -1
  151. package/src/components/TableComponent/react-table-config.d.ts +128 -128
  152. package/src/components/TableComponent/styles.tsx +170 -170
  153. package/src/components/TableComponent/types.ts +57 -57
  154. package/src/components/Tabs/Tabs.tsx +52 -52
  155. package/src/components/Tabs/TabsContainer.tsx +50 -50
  156. package/src/components/Tabs/index.tsx +1 -1
  157. package/src/components/Tabs/styles.tsx +55 -55
  158. package/src/components/ToastContainer/ToastContainer.tsx +42 -42
  159. package/src/components/ToastContainer/index.tsx +1 -1
  160. package/src/components/UploadButton/UploadButton.tsx +126 -126
  161. package/src/components/UploadButton/index.tsx +1 -1
  162. package/src/components/UploadButton/types.ts +19 -19
  163. package/src/components/UploadDocument.tsx +108 -108
  164. package/src/components/UploadFileDialog/UploadFileDialog.tsx +238 -238
  165. package/src/components/UploadFileDialog/index.tsx +1 -1
  166. package/src/components/index.ts +89 -89
  167. package/src/config/axios.ts +73 -73
  168. package/src/config/axiosEvaluator.ts +53 -53
  169. package/src/config/axiosXTenant.ts +57 -57
  170. package/src/constants/UIConstants.ts +97 -97
  171. package/src/constants/formValidations.ts +6 -6
  172. package/src/constants/index.ts +5 -5
  173. package/src/constants/isDevelopment.ts +3 -3
  174. package/src/constants/permissions.ts +67 -67
  175. package/src/constants/validateMessages.ts +12 -12
  176. package/src/contexts/LoginFormProvider.tsx +39 -39
  177. package/src/contexts/Providers.tsx +73 -73
  178. package/src/contexts/PublicProviders.tsx +30 -30
  179. package/src/contexts/QueryClientProvider.tsx +22 -22
  180. package/src/hooks/index.ts +3 -3
  181. package/src/hooks/useAuth.ts +96 -96
  182. package/src/hooks/useFetch.ts +53 -53
  183. package/src/hooks/useRouter.ts +31 -31
  184. package/src/layouts/Components/DashBoardMenu.tsx +232 -232
  185. package/src/layouts/Components/icons/index.tsx +403 -403
  186. package/src/layouts/Components/styles.tsx +74 -74
  187. package/src/layouts/ComponentsLayout.tsx +3 -3
  188. package/src/permissions/PageWithPermission.tsx +18 -18
  189. package/src/permissions/PermissionDeniedPage.tsx +16 -16
  190. package/src/permissions/ValidateAccess.tsx +18 -18
  191. package/src/permissions/index.ts +2 -2
  192. package/src/react-app-env.d.ts +1 -1
  193. package/src/shared-state/AssetsStore.ts +15 -15
  194. package/src/shared-state/PermissionsStore.ts +352 -352
  195. package/src/shared-state/UserStore.ts +13 -13
  196. package/src/shared-state/index.ts +4 -4
  197. package/src/theme/App.less +3 -3
  198. package/src/theme/MuiThemeProvider.tsx +13 -13
  199. package/src/theme/customCssBaseline.ts +78 -78
  200. package/src/theme/index.css +75 -75
  201. package/src/theme/muiTheme.ts +592 -560
  202. package/src/theme/theme.d.ts +75 -75
  203. package/src/utils/alphabet.ts +23 -23
  204. package/src/utils/arrayPadEnd.ts +3 -3
  205. package/src/utils/formatCurrency.ts +9 -9
  206. package/src/utils/getUrlParams.ts +5 -5
  207. package/src/utils/index.ts +7 -7
  208. package/src/utils/logout.ts +24 -24
  209. package/src/utils/ordinalSuffixOf.ts +14 -14
  210. package/src/utils/romanize.ts +40 -40
  211. package/src/utils/withRouteWrapper.tsx +25 -25
  212. package/src/utils/withSuspense.tsx +6 -6
  213. package/styled-components.tsx +60 -60
  214. package/tsconfig.json +21 -21
  215. package/yarn-error.log +109 -0
  216. package/src/components/Layout/Header/assets/commuteX.png +0 -0
@@ -1,56 +1,59 @@
1
- import { Button, IconButton, Menu, MenuItem, styled } from '@mui/material'
2
-
3
- export const StyledIconButton = styled(IconButton, {
4
- shouldForwardProp: (prop) => prop !== 'outlined',
5
- })<{ outlined?: boolean; size: 'small' | 'regular' }>(
6
- ({ theme, outlined, size }) => ({
7
- ...(outlined && {
8
- border: `1px solid ${theme.palette.primary.main}`,
9
- borderRadius: '5px',
10
- height: '40px',
11
- width: '40px',
12
- ...(size === 'small' && {}),
13
- }),
14
- }),
15
- )
16
-
17
- export const StyledMenuItem = styled(MenuItem)(({}) => ({
18
- display: 'flex',
19
- alignItems: 'center',
20
- height: '60px',
21
- '& .MuiListItemIcon-root': {
22
- minWidth: '24px',
23
- },
24
- '& .MuiSvgIcon-root': {
25
- height: '18px',
26
- width: '18px',
27
- },
28
- }))
29
-
30
- export const StyledDropDownButton = styled(Button)(({}) => ({
31
- padding: '0 15px',
32
- minWidth: '180px',
33
- justifyContent: 'space-between',
34
- }))
35
-
36
- export const StyledMenu = styled(Menu)(({ theme }) => ({
37
- '& .MuiPaper-root': {
38
- borderRadius: '10px',
39
- border: '1px solid #1212121A',
40
- marginTop: '10px',
41
- boxShadow: '0px 4px 16px #0000000F',
42
- },
43
- '& .MuiList-root': {
44
- minWidth: '240px',
45
- padding: 0,
46
- '& li': {
47
- borderBottom: theme.borders.grayLight,
48
- ':hover': {
49
- backgroundColor: 'rgba(0, 0, 0, 0.025)',
50
- },
51
- },
52
- '& > :last-child': {
53
- borderBottom: 'none',
54
- },
55
- },
56
- }))
1
+ import { Button, IconButton, Menu, MenuItem, styled } from '@mui/material'
2
+
3
+ export const StyledIconButton = styled(IconButton, {
4
+ shouldForwardProp: (prop) => prop !== 'outlined',
5
+ })<{ outlined?: boolean; size: 'small' | 'regular' }>(
6
+ ({ theme, outlined, size }) => ({
7
+ ...(outlined && {
8
+ border: `1px solid ${theme.palette.primary.main}`,
9
+ borderRadius: '5px',
10
+ height: '40px',
11
+ width: '40px',
12
+ ...(size === 'small' && {}),
13
+ }),
14
+ }),
15
+ )
16
+
17
+ export const StyledMenuItem = styled(MenuItem)(({}) => ({
18
+ display: 'flex',
19
+ alignItems: 'center',
20
+ height: '60px',
21
+ '& .MuiListItemIcon-root': {
22
+ minWidth: '24px',
23
+ },
24
+ '& .MuiSvgIcon-root': {
25
+ height: '18px',
26
+ width: '18px',
27
+ },
28
+ }))
29
+
30
+ export const StyledDropDownButton = styled(Button)(({}) => ({
31
+ padding: '0 15px',
32
+ minWidth: '180px',
33
+ justifyContent: 'space-between',
34
+ }))
35
+
36
+ export const StyledMenu = styled(Menu)(({ theme }) => ({
37
+ '& .MuiPaper-root': {
38
+ borderRadius: '10px',
39
+ border: '1px solid #1212121A',
40
+ marginTop: '10px',
41
+ boxShadow: '0px 4px 16px #0000000F',
42
+ },
43
+ '& .MuiList-root': {
44
+ minWidth: '240px',
45
+ padding: 0,
46
+ '& li': {
47
+ borderBottom: theme.borders.grayLight,
48
+ ':hover': {
49
+ backgroundColor: 'rgba(0, 0, 0, 0.025)',
50
+ },
51
+ },
52
+ '& > :last-child': {
53
+ borderBottom: 'none',
54
+ '& li': {
55
+ borderBottom: 'none',
56
+ },
57
+ },
58
+ },
59
+ }))
@@ -1,28 +1,28 @@
1
- import { ReactNode } from 'react'
2
- import { ErrorBoundary as ReactErrorBoundary } from 'react-error-boundary'
3
- import { QueryErrorResetBoundary } from 'react-query'
4
- import { useLocation } from 'react-router-dom'
5
- import ErrorFallback from './ErrorFallback'
6
-
7
- export default function ErrorBoundary({
8
- children,
9
- resetKey,
10
- }: {
11
- children: ReactNode
12
- resetKey?: string
13
- }) {
14
- const location = useLocation()
15
- return (
16
- <QueryErrorResetBoundary>
17
- {({ reset }) => (
18
- <ReactErrorBoundary
19
- key={resetKey ?? location?.pathname}
20
- fallbackRender={ErrorFallback}
21
- onReset={reset}
22
- >
23
- {children}
24
- </ReactErrorBoundary>
25
- )}
26
- </QueryErrorResetBoundary>
27
- )
28
- }
1
+ import { ReactNode } from 'react'
2
+ import { ErrorBoundary as ReactErrorBoundary } from 'react-error-boundary'
3
+ import { QueryErrorResetBoundary } from 'react-query'
4
+ import { useLocation } from 'react-router-dom'
5
+ import ErrorFallback from './ErrorFallback'
6
+
7
+ export default function ErrorBoundary({
8
+ children,
9
+ resetKey,
10
+ }: {
11
+ children: ReactNode
12
+ resetKey?: string
13
+ }) {
14
+ const location = useLocation()
15
+ return (
16
+ <QueryErrorResetBoundary>
17
+ {({ reset }) => (
18
+ <ReactErrorBoundary
19
+ key={resetKey ?? location?.pathname}
20
+ fallbackRender={ErrorFallback}
21
+ onReset={reset}
22
+ >
23
+ {children}
24
+ </ReactErrorBoundary>
25
+ )}
26
+ </QueryErrorResetBoundary>
27
+ )
28
+ }
@@ -1,236 +1,236 @@
1
- import { Alert, Box, Button, Divider, styled, Typography } from '@mui/material'
2
- import { useEffect, useState } from 'react'
3
- import {
4
- nointernet,
5
- pagenotfound,
6
- permissiondenied,
7
- unauth,
8
- internalserver,
9
- } from '../../assets/images'
10
- import Cookies from 'js-cookie'
11
- import LoginForm from '../LoginForm'
12
- import { useModal } from '../DrawerWrapper/DrawerWrapper'
13
- import { PermissionsStore } from '../../shared-state'
14
- import axios from '../../config/axios'
15
-
16
- const StyledAlert = styled(Alert)(({ theme }) => ({
17
- border: `1px solid ${theme.palette.error.main}`,
18
- display: 'flex',
19
- alignItems: 'center',
20
- '& .MuiAlert-message': {
21
- padding: 0,
22
- },
23
- '& .MuiTypography-root': {
24
- margin: 0,
25
- },
26
- position: 'relative',
27
- '& .retryBtn': {
28
- color: '#661b2a',
29
- position: 'absolute',
30
- right: 8,
31
- top: 8,
32
- },
33
- }))
34
-
35
- const StyledBox = styled(Box)(({ theme }) => ({
36
- width: '100%',
37
- display: 'flex',
38
- flexDirection: 'column',
39
- alignItems: 'center',
40
- justifyContent: 'center',
41
- }))
42
-
43
- export default function ErrorFallback({ error, resetErrorBoundary }) {
44
- if (error?.response?.status) {
45
- switch (error?.response?.status) {
46
- case 401:
47
- return <UnAuth resetBoundary={resetErrorBoundary} />
48
-
49
- case 500:
50
- return (
51
- <InternalServer resetBoundary={resetErrorBoundary} error={error} />
52
- )
53
-
54
- case 403:
55
- return <PemissionDenied resetBoundary={resetErrorBoundary} />
56
-
57
- default:
58
- return (
59
- <InternalServer resetBoundary={resetErrorBoundary} error={error} />
60
- )
61
- }
62
- }
63
-
64
- if (error?.message === 'Network Error') {
65
- return <NoInternet resetBoundary={resetErrorBoundary} />
66
- }
67
-
68
- return (
69
- <Box sx={{ marginTop: '16px', padding: '16px' }}>
70
- <StyledAlert severity="error">
71
- {error?.response?.data?.message ?? error?.message}
72
- <Button
73
- className="retryBtn"
74
- onClick={() => resetErrorBoundary()}
75
- size="small"
76
- color="error"
77
- variant="outlined"
78
- >
79
- Try Again
80
- </Button>
81
- </StyledAlert>
82
- </Box>
83
- )
84
- }
85
-
86
- export function PageNotFound({ resetBoundary }) {
87
- return (
88
- <>
89
- <StyledBox>
90
- <img
91
- src={pagenotfound}
92
- alt="page not found"
93
- width={470}
94
- style={{ marginTop: '20px' }}
95
- />
96
- <Typography variant="h1">Page Not Found.</Typography>
97
- <Button sx={{ marginTop: '20px' }} onClick={() => resetBoundary()}>
98
- Try Again
99
- </Button>
100
- </StyledBox>
101
- </>
102
- )
103
- }
104
-
105
- export function NoInternet({ resetBoundary }) {
106
- return (
107
- <>
108
- <StyledBox>
109
- <img src={nointernet} alt="No Internet Found" width={470} />
110
- <Typography variant="h1">No Internet Found.</Typography>
111
- <Button sx={{ marginTop: '20px' }} onClick={() => resetBoundary()}>
112
- Try Again
113
- </Button>
114
- </StyledBox>
115
- </>
116
- )
117
- }
118
-
119
- export function PemissionDenied({ resetBoundary }) {
120
- return (
121
- <>
122
- <StyledBox>
123
- <img src={permissiondenied} alt="permission denied" width={470} />
124
- <Typography variant="h1">Permission Denied.</Typography>
125
- <Button sx={{ marginTop: '20px' }} onClick={() => resetBoundary()}>
126
- Try Again
127
- </Button>
128
- </StyledBox>
129
- </>
130
- )
131
- }
132
-
133
- export function InternalServer({ resetBoundary, error }) {
134
- return (
135
- <>
136
- <StyledBox>
137
- <img src={internalserver} alt="internal server error" width={470} />
138
- <Typography variant="h1" marginTop={'20px'}>
139
- Internal Server Error.
140
- </Typography>
141
- <Typography variant="body1">
142
- {error?.response?.data?.message}
143
- </Typography>
144
- <Button
145
- size="small"
146
- variant="outlined"
147
- sx={{ marginTop: '20px' }}
148
- onClick={() => resetBoundary()}
149
- >
150
- Try Again
151
- </Button>
152
- </StyledBox>
153
- </>
154
- )
155
- }
156
-
157
- export function UnAuth({ resetBoundary }) {
158
- const modal = useModal()
159
- const [username, setUsername] = useState('')
160
- const [loading, setLoading] = useState(false)
161
-
162
- const url = window.location.origin
163
- const origin = window?.location?.origin?.split('.')
164
- const isLocalHost =
165
- process.env.NODE_ENV === 'development' ||
166
- origin?.slice(-2).join('.') === 'campx.dev'
167
- const sessionCookie = Cookies.get('campx_session_key')
168
- const appinit = async () => {
169
- setLoading(true)
170
- await axios
171
- .get('/auth/my-permissions')
172
- .then((res) => {
173
- setUsername(res.data.user.fullName)
174
- PermissionsStore.update((s) => {
175
- s.permissions = {
176
- ...res.data?.permissions,
177
- can_settings_view: 1,
178
- can_dashboard_view: 1,
179
- can_individual_pages_view: 1,
180
- } as any
181
- })
182
- setLoading(false)
183
- })
184
- .catch((e) => {
185
- modal({
186
- title: 'Login',
187
- content: () => <LoginForm />,
188
- })
189
- })
190
- }
191
- function LoginPage() {
192
- if (isLocalHost) {
193
- if (!sessionCookie) {
194
- modal({
195
- title: 'Login',
196
- content: () => <LoginForm />,
197
- })
198
- } else {
199
- appinit()
200
- }
201
- } else {
202
- if (!sessionCookie) {
203
- window.location.replace(`https://www.id.campx.in/?redirect_to=${url}`)
204
- } else {
205
- appinit()
206
- }
207
- }
208
- }
209
-
210
- return (
211
- <>
212
- <StyledBox>
213
- <img src={unauth} alt="unauthorized" width={470} />
214
- <Typography variant="h1" marginTop={'20px'}>
215
- UnAuthorized.
216
- </Typography>
217
- <Box
218
- sx={{
219
- display: 'flex',
220
- marginTop: '20px',
221
- }}
222
- >
223
- <Button
224
- variant="outlined"
225
- sx={{ marginRight: '10px' }}
226
- onClick={() => resetBoundary()}
227
- >
228
- Try Again
229
- </Button>
230
-
231
- <Button onClick={() => LoginPage()}>Click here to Login</Button>
232
- </Box>
233
- </StyledBox>
234
- </>
235
- )
236
- }
1
+ import { Alert, Box, Button, Divider, styled, Typography } from '@mui/material'
2
+ import { useEffect, useState } from 'react'
3
+ import {
4
+ nointernet,
5
+ pagenotfound,
6
+ permissiondenied,
7
+ unauth,
8
+ internalserver,
9
+ } from '../../assets/images'
10
+ import Cookies from 'js-cookie'
11
+ import LoginForm from '../LoginForm'
12
+ import { useModal } from '../DrawerWrapper/DrawerWrapper'
13
+ import { PermissionsStore } from '../../shared-state'
14
+ import axios from '../../config/axios'
15
+
16
+ const StyledAlert = styled(Alert)(({ theme }) => ({
17
+ border: `1px solid ${theme.palette.error.main}`,
18
+ display: 'flex',
19
+ alignItems: 'center',
20
+ '& .MuiAlert-message': {
21
+ padding: 0,
22
+ },
23
+ '& .MuiTypography-root': {
24
+ margin: 0,
25
+ },
26
+ position: 'relative',
27
+ '& .retryBtn': {
28
+ color: '#661b2a',
29
+ position: 'absolute',
30
+ right: 8,
31
+ top: 8,
32
+ },
33
+ }))
34
+
35
+ const StyledBox = styled(Box)(({ theme }) => ({
36
+ width: '100%',
37
+ display: 'flex',
38
+ flexDirection: 'column',
39
+ alignItems: 'center',
40
+ justifyContent: 'center',
41
+ }))
42
+
43
+ export default function ErrorFallback({ error, resetErrorBoundary }) {
44
+ if (error?.response?.status) {
45
+ switch (error?.response?.status) {
46
+ case 401:
47
+ return <UnAuth resetBoundary={resetErrorBoundary} />
48
+
49
+ case 500:
50
+ return (
51
+ <InternalServer resetBoundary={resetErrorBoundary} error={error} />
52
+ )
53
+
54
+ case 403:
55
+ return <PemissionDenied resetBoundary={resetErrorBoundary} />
56
+
57
+ default:
58
+ return (
59
+ <InternalServer resetBoundary={resetErrorBoundary} error={error} />
60
+ )
61
+ }
62
+ }
63
+
64
+ if (error?.message === 'Network Error') {
65
+ return <NoInternet resetBoundary={resetErrorBoundary} />
66
+ }
67
+
68
+ return (
69
+ <Box sx={{ marginTop: '16px', padding: '16px' }}>
70
+ <StyledAlert severity="error">
71
+ {error?.response?.data?.message ?? error?.message}
72
+ <Button
73
+ className="retryBtn"
74
+ onClick={() => resetErrorBoundary()}
75
+ size="small"
76
+ color="error"
77
+ variant="outlined"
78
+ >
79
+ Try Again
80
+ </Button>
81
+ </StyledAlert>
82
+ </Box>
83
+ )
84
+ }
85
+
86
+ export function PageNotFound({ resetBoundary }) {
87
+ return (
88
+ <>
89
+ <StyledBox>
90
+ <img
91
+ src={pagenotfound}
92
+ alt="page not found"
93
+ width={470}
94
+ style={{ marginTop: '20px' }}
95
+ />
96
+ <Typography variant="h1">Page Not Found.</Typography>
97
+ <Button sx={{ marginTop: '20px' }} onClick={() => resetBoundary()}>
98
+ Try Again
99
+ </Button>
100
+ </StyledBox>
101
+ </>
102
+ )
103
+ }
104
+
105
+ export function NoInternet({ resetBoundary }) {
106
+ return (
107
+ <>
108
+ <StyledBox>
109
+ <img src={nointernet} alt="No Internet Found" width={470} />
110
+ <Typography variant="h1">No Internet Found.</Typography>
111
+ <Button sx={{ marginTop: '20px' }} onClick={() => resetBoundary()}>
112
+ Try Again
113
+ </Button>
114
+ </StyledBox>
115
+ </>
116
+ )
117
+ }
118
+
119
+ export function PemissionDenied({ resetBoundary }) {
120
+ return (
121
+ <>
122
+ <StyledBox>
123
+ <img src={permissiondenied} alt="permission denied" width={470} />
124
+ <Typography variant="h1">Permission Denied.</Typography>
125
+ <Button sx={{ marginTop: '20px' }} onClick={() => resetBoundary()}>
126
+ Try Again
127
+ </Button>
128
+ </StyledBox>
129
+ </>
130
+ )
131
+ }
132
+
133
+ export function InternalServer({ resetBoundary, error }) {
134
+ return (
135
+ <>
136
+ <StyledBox>
137
+ <img src={internalserver} alt="internal server error" width={470} />
138
+ <Typography variant="h1" marginTop={'20px'}>
139
+ Internal Server Error.
140
+ </Typography>
141
+ <Typography variant="body1">
142
+ {error?.response?.data?.message}
143
+ </Typography>
144
+ <Button
145
+ size="small"
146
+ variant="outlined"
147
+ sx={{ marginTop: '20px' }}
148
+ onClick={() => resetBoundary()}
149
+ >
150
+ Try Again
151
+ </Button>
152
+ </StyledBox>
153
+ </>
154
+ )
155
+ }
156
+
157
+ export function UnAuth({ resetBoundary }) {
158
+ const modal = useModal()
159
+ const [username, setUsername] = useState('')
160
+ const [loading, setLoading] = useState(false)
161
+
162
+ const url = window.location.origin
163
+ const origin = window?.location?.origin?.split('.')
164
+ const isLocalHost =
165
+ process.env.NODE_ENV === 'development' ||
166
+ origin?.slice(-2).join('.') === 'campx.dev'
167
+ const sessionCookie = Cookies.get('campx_session_key')
168
+ const appinit = async () => {
169
+ setLoading(true)
170
+ await axios
171
+ .get('/auth/my-permissions')
172
+ .then((res) => {
173
+ setUsername(res.data.user.fullName)
174
+ PermissionsStore.update((s) => {
175
+ s.permissions = {
176
+ ...res.data?.permissions,
177
+ can_settings_view: 1,
178
+ can_dashboard_view: 1,
179
+ can_individual_pages_view: 1,
180
+ } as any
181
+ })
182
+ setLoading(false)
183
+ })
184
+ .catch((e) => {
185
+ modal({
186
+ title: 'Login',
187
+ content: () => <LoginForm />,
188
+ })
189
+ })
190
+ }
191
+ function LoginPage() {
192
+ if (isLocalHost) {
193
+ if (!sessionCookie) {
194
+ modal({
195
+ title: 'Login',
196
+ content: () => <LoginForm />,
197
+ })
198
+ } else {
199
+ appinit()
200
+ }
201
+ } else {
202
+ if (!sessionCookie) {
203
+ window.location.replace(`https://www.id.campx.in/?redirect_to=${url}`)
204
+ } else {
205
+ appinit()
206
+ }
207
+ }
208
+ }
209
+
210
+ return (
211
+ <>
212
+ <StyledBox>
213
+ <img src={unauth} alt="unauthorized" width={470} />
214
+ <Typography variant="h1" marginTop={'20px'}>
215
+ UnAuthorized.
216
+ </Typography>
217
+ <Box
218
+ sx={{
219
+ display: 'flex',
220
+ marginTop: '20px',
221
+ }}
222
+ >
223
+ <Button
224
+ variant="outlined"
225
+ sx={{ marginRight: '10px' }}
226
+ onClick={() => resetBoundary()}
227
+ >
228
+ Try Again
229
+ </Button>
230
+
231
+ <Button onClick={() => LoginPage()}>Click here to Login</Button>
232
+ </Box>
233
+ </StyledBox>
234
+ </>
235
+ )
236
+ }
@@ -1,13 +1,13 @@
1
- import { Store } from 'pullstate'
2
- import { LinearProgress } from '../LinearProgress'
3
-
4
- export const NetworkStore = new Store({
5
- loading: false,
6
- })
7
-
8
- export default function GlobalNetworkLoadingIndicator() {
9
- const { loading } = NetworkStore.useState()
10
-
11
- if (loading) return <LinearProgress />
12
- if (loading) return null
13
- }
1
+ import { Store } from 'pullstate'
2
+ import { LinearProgress } from '../LinearProgress'
3
+
4
+ export const NetworkStore = new Store({
5
+ loading: false,
6
+ })
7
+
8
+ export default function GlobalNetworkLoadingIndicator() {
9
+ const { loading } = NetworkStore.useState()
10
+
11
+ if (loading) return <LinearProgress />
12
+ if (loading) return null
13
+ }
@@ -1 +1 @@
1
- export { default } from './ErrorBoundary'
1
+ export { default } from './ErrorBoundary'