@campxdev/shared 1.8.13 → 1.8.14

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 (266) hide show
  1. package/package.json +20 -4
  2. package/antd.customize.less +0 -73
  3. package/exports.ts +0 -19
  4. package/src/assets/fonts/avenir/Avenir-Book.ttf +0 -0
  5. package/src/assets/fonts/avenir/Avenir-Heavy.ttf +0 -0
  6. package/src/assets/fonts/avenir/Avenir-HeavyOblique.ttf +0 -0
  7. package/src/assets/fonts/avenir/Avenir-Medium.ttf +0 -0
  8. package/src/assets/fonts/avenir/Avenir-MediumOblique.ttf +0 -0
  9. package/src/assets/fonts/avenir/index.ts +0 -13
  10. package/src/assets/fonts/poppins/Poppins-Bold.ttf +0 -0
  11. package/src/assets/fonts/poppins/Poppins-Italic.ttf +0 -0
  12. package/src/assets/fonts/poppins/Poppins-Light.ttf +0 -0
  13. package/src/assets/fonts/poppins/Poppins-LightItalic.ttf +0 -0
  14. package/src/assets/fonts/poppins/Poppins-Medium.ttf +0 -0
  15. package/src/assets/fonts/poppins/Poppins-MediumItalic.ttf +0 -0
  16. package/src/assets/fonts/poppins/Poppins-Regular.ttf +0 -0
  17. package/src/assets/fonts/poppins/Poppins-SemiBold.ttf +0 -0
  18. package/src/assets/fonts/poppins/Poppins-SemiBoldItalic.ttf +0 -0
  19. package/src/assets/fonts/poppins/index.ts +0 -18
  20. package/src/assets/images/401.png +0 -0
  21. package/src/assets/images/403.png +0 -0
  22. package/src/assets/images/404.png +0 -0
  23. package/src/assets/images/404notfound.svg +0 -1
  24. package/src/assets/images/500.png +0 -0
  25. package/src/assets/images/avatar.png +0 -0
  26. package/src/assets/images/campx_logo__full_primary.png +0 -0
  27. package/src/assets/images/index.ts +0 -17
  28. package/src/assets/images/internalservererror.svg +0 -1
  29. package/src/assets/images/noInternet.svg +0 -1
  30. package/src/assets/images/nointernet.png +0 -0
  31. package/src/assets/images/notfound.png +0 -0
  32. package/src/assets/images/pagenotfound.svg +0 -1
  33. package/src/assets/images/permissiondenied.svg +0 -1
  34. package/src/assets/images/unauth.svg +0 -92
  35. package/src/components/ActionButton.tsx +0 -20
  36. package/src/components/Attachment.tsx +0 -26
  37. package/src/components/AutocompleteSearch/AutocompleteSearch.tsx +0 -57
  38. package/src/components/AutocompleteSearch/index.tsx +0 -1
  39. package/src/components/Breadcrumbs.tsx +0 -72
  40. package/src/components/Card.tsx +0 -98
  41. package/src/components/CardsGrid.tsx +0 -28
  42. package/src/components/ChangePassword.tsx +0 -123
  43. package/src/components/Chips.tsx +0 -81
  44. package/src/components/Detail.tsx +0 -15
  45. package/src/components/DetailsGrid.tsx +0 -52
  46. package/src/components/DividerHeading.tsx +0 -41
  47. package/src/components/DrawerWrapper/DialogWrapper.tsx +0 -67
  48. package/src/components/DrawerWrapper/DrawerTemplate.tsx +0 -53
  49. package/src/components/DrawerWrapper/DrawerWrapper.tsx +0 -53
  50. package/src/components/DropDownButton/AnchorElement.tsx +0 -44
  51. package/src/components/DropDownButton/DropDownButton.tsx +0 -184
  52. package/src/components/DropDownButton/DropdownMenuItem.tsx +0 -110
  53. package/src/components/DropDownButton/index.tsx +0 -1
  54. package/src/components/DropDownButton/styles.tsx +0 -59
  55. package/src/components/ErrorBoundary/ErrorBoundary.tsx +0 -33
  56. package/src/components/ErrorBoundary/ErrorFallback.tsx +0 -241
  57. package/src/components/ErrorBoundary/GlobalNetworkLoadingIndicator.tsx +0 -13
  58. package/src/components/ErrorBoundary/index.tsx +0 -1
  59. package/src/components/ErrorBox.tsx +0 -42
  60. package/src/components/ExcelToJsonInput/ExcelJsonUpload.tsx +0 -50
  61. package/src/components/ExcelToJsonInput/ExcelToJsonInput.tsx +0 -57
  62. package/src/components/ExcelToJsonInput/index.tsx +0 -1
  63. package/src/components/FilterComponents/FilterButton.tsx +0 -56
  64. package/src/components/FilterComponents/SearchBar.tsx +0 -45
  65. package/src/components/FloatingContainer.tsx +0 -33
  66. package/src/components/Form/Form.tsx +0 -147
  67. package/src/components/Form/RenderForm.tsx +0 -189
  68. package/src/components/FullScreenLoader.tsx +0 -19
  69. package/src/components/HookForm/AutoCompleteSearch.tsx +0 -113
  70. package/src/components/HookForm/DatePicker.tsx +0 -40
  71. package/src/components/HookForm/DateTimePicker.tsx +0 -47
  72. package/src/components/HookForm/FormLabel.tsx +0 -14
  73. package/src/components/HookForm/MultiCheckbox.tsx +0 -69
  74. package/src/components/HookForm/MultiSelect.tsx +0 -53
  75. package/src/components/HookForm/RadioGroup.tsx +0 -47
  76. package/src/components/HookForm/SingleCheckbox.tsx +0 -34
  77. package/src/components/HookForm/SingleSelect.tsx +0 -46
  78. package/src/components/HookForm/TextField.tsx +0 -40
  79. package/src/components/HookForm/TimePicker.tsx +0 -40
  80. package/src/components/HookForm/index.ts +0 -23
  81. package/src/components/IconButtons/IconButtons.tsx +0 -137
  82. package/src/components/IconButtons/Icons.tsx +0 -268
  83. package/src/components/IconButtons/assets/edit.svg +0 -4
  84. package/src/components/IconButtons/assets/eye.svg +0 -6
  85. package/src/components/IconButtons/assets/trash.svg +0 -7
  86. package/src/components/IconButtons/index.tsx +0 -8
  87. package/src/components/IconLabel.tsx +0 -37
  88. package/src/components/Image/Image.tsx +0 -45
  89. package/src/components/Image/broken-image.png +0 -0
  90. package/src/components/Image/index.tsx +0 -1
  91. package/src/components/ImageUpload.tsx +0 -98
  92. package/src/components/Input/AsyncSearchSelect/AsyncSearchSelect.tsx +0 -216
  93. package/src/components/Input/AsyncSearchSelect/index.tsx +0 -1
  94. package/src/components/Input/AsyncSearchSelect/styles.tsx +0 -105
  95. package/src/components/Input/AutoCompleteSearch.tsx +0 -121
  96. package/src/components/Input/DatePicker.tsx +0 -87
  97. package/src/components/Input/DateRangePicker.tsx +0 -105
  98. package/src/components/Input/DateTimePicker.tsx +0 -84
  99. package/src/components/Input/FormLabel.tsx +0 -21
  100. package/src/components/Input/MultiCheckbox.tsx +0 -64
  101. package/src/components/Input/MultiSelect.tsx +0 -150
  102. package/src/components/Input/RadioGroup.tsx +0 -104
  103. package/src/components/Input/SingleCheckbox.tsx +0 -78
  104. package/src/components/Input/SingleSelect.tsx +0 -104
  105. package/src/components/Input/TextField.tsx +0 -46
  106. package/src/components/Input/TimePicker.tsx +0 -77
  107. package/src/components/Input/index.ts +0 -26
  108. package/src/components/Input/types.ts +0 -3
  109. package/src/components/JsonPreview.tsx +0 -7
  110. package/src/components/LabelValue.tsx +0 -21
  111. package/src/components/Layout/ChangePassword.tsx +0 -49
  112. package/src/components/Layout/Header/AppHeader.tsx +0 -112
  113. package/src/components/Layout/Header/AppsMenu.tsx +0 -105
  114. package/src/components/Layout/Header/HeaderActions/CogWheelMenu.tsx +0 -33
  115. package/src/components/Layout/Header/HeaderActions/FreshDeskHelpButton.tsx +0 -24
  116. package/src/components/Layout/Header/HeaderActions/HeaderActions.tsx +0 -18
  117. package/src/components/Layout/Header/HeaderActions/UserBox.tsx +0 -56
  118. package/src/components/Layout/Header/Notification.tsx +0 -13
  119. package/src/components/Layout/Header/applications.ts +0 -103
  120. package/src/components/Layout/Header/assets/background.png +0 -0
  121. package/src/components/Layout/Header/assets/campx.png +0 -0
  122. package/src/components/Layout/Header/assets/campx_square_small.svg +0 -9
  123. package/src/components/Layout/Header/assets/commuteX.png +0 -0
  124. package/src/components/Layout/Header/assets/commutex.png +0 -0
  125. package/src/components/Layout/Header/assets/commutex.svg +0 -14
  126. package/src/components/Layout/Header/assets/commutexSmall.svg +0 -11
  127. package/src/components/Layout/Header/assets/contactBg.png +0 -0
  128. package/src/components/Layout/Header/assets/enroll.svg +0 -14
  129. package/src/components/Layout/Header/assets/enroll_logo.svg +0 -9
  130. package/src/components/Layout/Header/assets/enrollx.svg +0 -14
  131. package/src/components/Layout/Header/assets/entrollx.png +0 -0
  132. package/src/components/Layout/Header/assets/exams_small.svg +0 -12
  133. package/src/components/Layout/Header/assets/examsx.svg +0 -14
  134. package/src/components/Layout/Header/assets/examx.png +0 -0
  135. package/src/components/Layout/Header/assets/hostel_small.svg +0 -13
  136. package/src/components/Layout/Header/assets/hostelx.png +0 -0
  137. package/src/components/Layout/Header/assets/hostelx.svg +0 -13
  138. package/src/components/Layout/Header/assets/index.ts +0 -35
  139. package/src/components/Layout/Header/assets/libraryx.svg +0 -12
  140. package/src/components/Layout/Header/assets/libreryx.png +0 -0
  141. package/src/components/Layout/Header/assets/pay_small.svg +0 -16
  142. package/src/components/Layout/Header/assets/payx.png +0 -0
  143. package/src/components/Layout/Header/assets/payx.svg +0 -19
  144. package/src/components/Layout/Header/assets/people_small.svg +0 -9
  145. package/src/components/Layout/Header/assets/peoplex.svg +0 -12
  146. package/src/components/Layout/Header/assets/pepolex.png +0 -0
  147. package/src/components/Layout/Header/assets/squarex.svg +0 -12
  148. package/src/components/Layout/Header/icons.tsx +0 -57
  149. package/src/components/Layout/Header/index.tsx +0 -1
  150. package/src/components/Layout/Header/styles.tsx +0 -133
  151. package/src/components/Layout/Helmet.tsx +0 -49
  152. package/src/components/Layout/LayoutWrapper.tsx +0 -28
  153. package/src/components/Layout/SideMenuHeader.tsx +0 -29
  154. package/src/components/Layout/SideNav.tsx +0 -168
  155. package/src/components/Layout/Tickets/HelpWidget/HelpWidget.tsx +0 -273
  156. package/src/components/Layout/Tickets/HelpWidget/styles.tsx +0 -94
  157. package/src/components/Layout/Tickets/MyTickets.tsx +0 -72
  158. package/src/components/Layout/Tickets/TicketDetails.tsx +0 -65
  159. package/src/components/Layout/Tickets/TimeLine.tsx +0 -64
  160. package/src/components/Layout/Tickets/index.tsx +0 -1
  161. package/src/components/Layout/Tickets/services.ts +0 -11
  162. package/src/components/Layout/Tickets/styles.tsx +0 -136
  163. package/src/components/LinearProgress.tsx +0 -19
  164. package/src/components/ListItemButton.tsx +0 -95
  165. package/src/components/LoginForm.tsx +0 -279
  166. package/src/components/MediaRow/MediaRow.tsx +0 -67
  167. package/src/components/MediaRow/index.tsx +0 -1
  168. package/src/components/ModalButtons/DialogButton.tsx +0 -126
  169. package/src/components/ModalButtons/DrawerButton.tsx +0 -115
  170. package/src/components/ModalButtons/index.tsx +0 -4
  171. package/src/components/NoDataIllustration.tsx +0 -32
  172. package/src/components/PageContent.tsx +0 -12
  173. package/src/components/PageHeader.tsx +0 -55
  174. package/src/components/PageNotFound.tsx +0 -26
  175. package/src/components/PopupConfirm/ConfirmContextProvider.tsx +0 -40
  176. package/src/components/PopupConfirm/PopupConfirm.tsx +0 -67
  177. package/src/components/PopupConfirm/animation.gif +0 -0
  178. package/src/components/PopupConfirm/index.tsx +0 -1
  179. package/src/components/PopupConfirm/useConfirm.ts +0 -47
  180. package/src/components/ResetPassword.tsx +0 -107
  181. package/src/components/Row.tsx +0 -24
  182. package/src/components/Spinner.tsx +0 -18
  183. package/src/components/StepsHeader/StepsHeader.tsx +0 -115
  184. package/src/components/StepsHeader/index.tsx +0 -1
  185. package/src/components/StyledTableContainer.tsx +0 -33
  186. package/src/components/SwitchButton.tsx +0 -41
  187. package/src/components/Table.tsx +0 -42
  188. package/src/components/Tables/BasicTable/Table.tsx +0 -198
  189. package/src/components/Tables/BasicTable/TableFooter.tsx +0 -86
  190. package/src/components/Tables/BasicTable/index.tsx +0 -1
  191. package/src/components/Tables/ReactTable/BatchActionsHeader.tsx +0 -58
  192. package/src/components/Tables/ReactTable/ReactTable.tsx +0 -295
  193. package/src/components/Tables/ReactTable/RenderTableBody.tsx +0 -49
  194. package/src/components/Tables/ReactTable/index.tsx +0 -1
  195. package/src/components/Tables/ReactTable/react-table-config.d.ts +0 -128
  196. package/src/components/Tables/common/NoRecordsFound.tsx +0 -27
  197. package/src/components/Tables/common/TableStats.tsx +0 -22
  198. package/src/components/Tables/common/icons.tsx +0 -50
  199. package/src/components/Tables/common/no-data-illu.svg +0 -1
  200. package/src/components/Tables/common/styles.tsx +0 -170
  201. package/src/components/Tables/common/types.ts +0 -57
  202. package/src/components/Tabs/NavigationTabs.tsx +0 -80
  203. package/src/components/Tabs/Tabs.tsx +0 -53
  204. package/src/components/Tabs/TabsContainer.tsx +0 -53
  205. package/src/components/Tabs/index.tsx +0 -1
  206. package/src/components/Tabs/styles.tsx +0 -55
  207. package/src/components/ToastContainer/ToastContainer.tsx +0 -57
  208. package/src/components/ToastContainer/index.tsx +0 -1
  209. package/src/components/UploadButton/UploadButton.tsx +0 -126
  210. package/src/components/UploadButton/index.tsx +0 -1
  211. package/src/components/UploadButton/types.ts +0 -19
  212. package/src/components/UploadDocument.tsx +0 -108
  213. package/src/components/UploadFileDialog/AnimatedUploadFile.gif +0 -0
  214. package/src/components/UploadFileDialog/UploadFileDialog.tsx +0 -238
  215. package/src/components/UploadFileDialog/index.tsx +0 -1
  216. package/src/components/index.ts +0 -106
  217. package/src/config/axios.ts +0 -73
  218. package/src/config/axiosEvaluator.ts +0 -53
  219. package/src/config/axiosXTenant.ts +0 -57
  220. package/src/constants/UIConstants.ts +0 -97
  221. package/src/constants/formValidations.ts +0 -6
  222. package/src/constants/index.ts +0 -5
  223. package/src/constants/isDevelopment.ts +0 -4
  224. package/src/constants/permissions.ts +0 -67
  225. package/src/constants/validateMessages.ts +0 -12
  226. package/src/contexts/LoginFormProvider.tsx +0 -44
  227. package/src/contexts/Providers.tsx +0 -50
  228. package/src/contexts/PublicProviders.tsx +0 -30
  229. package/src/contexts/QueryClientProvider.tsx +0 -22
  230. package/src/hooks/index.ts +0 -4
  231. package/src/hooks/useAuth.ts +0 -96
  232. package/src/hooks/useFetch.ts +0 -53
  233. package/src/hooks/useFilters.ts +0 -83
  234. package/src/hooks/useRouter.ts +0 -31
  235. package/src/layouts/Components/DashBoardMenu.tsx +0 -232
  236. package/src/layouts/Components/icons/index.tsx +0 -403
  237. package/src/layouts/Components/styles.tsx +0 -74
  238. package/src/layouts/ComponentsLayout.tsx +0 -3
  239. package/src/permissions/PageWithPermission.tsx +0 -18
  240. package/src/permissions/PermissionDeniedPage.tsx +0 -16
  241. package/src/permissions/ValidateAccess.tsx +0 -18
  242. package/src/permissions/index.ts +0 -2
  243. package/src/react-app-env.d.ts +0 -1
  244. package/src/shared-state/AssetsStore.ts +0 -15
  245. package/src/shared-state/PermissionsStore.ts +0 -384
  246. package/src/shared-state/UserStore.ts +0 -13
  247. package/src/shared-state/index.ts +0 -4
  248. package/src/theme/App.less +0 -3
  249. package/src/theme/MuiThemeProvider.tsx +0 -18
  250. package/src/theme/customCssBaseline.ts +0 -135
  251. package/src/theme/index.css +0 -28
  252. package/src/theme/muiTheme.ts +0 -595
  253. package/src/theme/theme.d.ts +0 -75
  254. package/src/utils/adminAxios.ts +0 -15
  255. package/src/utils/alphabet.ts +0 -23
  256. package/src/utils/arrayPadEnd.ts +0 -3
  257. package/src/utils/formatCurrency.ts +0 -9
  258. package/src/utils/getUrlParams.ts +0 -5
  259. package/src/utils/index.ts +0 -7
  260. package/src/utils/logout.ts +0 -25
  261. package/src/utils/ordinalSuffixOf.ts +0 -14
  262. package/src/utils/romanize.ts +0 -40
  263. package/src/utils/withRouteWrapper.tsx +0 -25
  264. package/src/utils/withSuspense.tsx +0 -6
  265. package/styled-components.tsx +0 -60
  266. package/tsconfig.json +0 -21
@@ -1,50 +0,0 @@
1
- import { Box, Button, ButtonProps, CircularProgress } from '@mui/material'
2
- import { AxiosResponse } from 'axios'
3
- import { useState } from 'react'
4
- import { useMutation } from 'react-query'
5
- import { toast } from 'react-toastify'
6
- import { axiosErrorToast } from '../../config/axios'
7
- import ExcelToJsonInput from './ExcelToJsonInput'
8
-
9
- interface ExcelJsonUploadProps {
10
- postFn: (json) => Promise<AxiosResponse<any, any>>
11
- btnProps?: ButtonProps
12
- }
13
-
14
- export default function ExcelJsonUpload({
15
- postFn,
16
- btnProps,
17
- }: ExcelJsonUploadProps) {
18
- const [json, setJson] = useState([])
19
- const { mutate, isLoading } = useMutation(postFn, {
20
- onSuccess(data) {
21
- toast.success('Data uploaded successfully')
22
- },
23
- onError(error) {
24
- axiosErrorToast(error)
25
- },
26
- })
27
-
28
- const onSubmit = () => {
29
- mutate(json)
30
- }
31
-
32
- return (
33
- <Box>
34
- <Button
35
- sx={{ marginBottom: '20px' }}
36
- onClick={onSubmit}
37
- endIcon={isLoading ? <CircularProgress size={20} /> : null}
38
- disabled={isLoading}
39
- {...btnProps}
40
- >
41
- Submit Data
42
- </Button>
43
- <ExcelToJsonInput
44
- onChange={(jsonValue) => {
45
- setJson(jsonValue)
46
- }}
47
- />
48
- </Box>
49
- )
50
- }
@@ -1,57 +0,0 @@
1
- import { Box } from '@mui/material'
2
-
3
- function tableToJson(innerText) {
4
- if (!innerText) return []
5
- const matrix = innerText
6
- ?.split('\n')
7
- ?.map((row) => row?.split('\t')?.map((cell) => (cell === '' ? null : cell)))
8
-
9
- const arrayList = matrix.filter((row) => row.length === matrix[0].length)
10
-
11
- var data = []
12
- for (var i = 1; i < arrayList.length; i++) {
13
- var tableRow = arrayList[i]
14
- let rowObj = {}
15
- for (var j = 0; j < arrayList[0].length; j++) {
16
- rowObj[arrayList[0][j]] = tableRow[j]
17
- }
18
- data.push(rowObj)
19
- }
20
- return data
21
- }
22
-
23
- export default function ExcelToJsonInput({ onChange }) {
24
- return (
25
- <Box
26
- onInput={(e) => {
27
- const input = e.currentTarget.innerText
28
- let json = tableToJson(input)
29
- onChange(json)
30
- }}
31
- placeholder="paste"
32
- contentEditable
33
- sx={{
34
- fontSize: '16px',
35
- height: 'auto',
36
- width: '100%',
37
- border: '1px solid #ccc',
38
- color: 'black',
39
- padding: '20px',
40
- '& table': {
41
- borderCollapse: 'collapse',
42
- border: '1px solid #ccc',
43
- '& th, & td': {
44
- border: '1px solid #ccc !important',
45
- padding: '5px',
46
- background: 'white !important',
47
- fontSize: '14px',
48
- },
49
- '& font': {
50
- fontSize: '14px',
51
- fontFamily: 'sans-serif',
52
- },
53
- },
54
- }}
55
- />
56
- )
57
- }
@@ -1 +0,0 @@
1
- export { default } from './ExcelToJsonInput'
@@ -1,56 +0,0 @@
1
- import { Tune } from '@mui/icons-material'
2
- import { Box, styled } from '@mui/material'
3
- import { useEffect, useState } from 'react'
4
-
5
- const StyledButtonWrapper = styled(Box)<{ size: 'regular' | 'large' }>(
6
- ({ theme, size }) => ({
7
- width: size === 'regular' ? '40px' : '50px',
8
- height: size === 'regular' ? '40px' : '50px',
9
- flexShrink: 0,
10
- border: theme.borders.grayLight,
11
- display: 'flex',
12
- position: 'relative',
13
- alignItems: 'center',
14
- justifyContent: 'center',
15
- borderRadius: '10px',
16
- cursor: 'pointer',
17
- '&:active': {
18
- border: `1px solid ${theme.palette.primary.main}`,
19
- },
20
- transition: 'border 0.1s ease-in-out',
21
- }),
22
- )
23
-
24
- const StyledNotify = styled(Box)(({ theme }) => ({
25
- height: '5px',
26
- width: '5px',
27
- backgroundColor: theme.palette.error.main,
28
- position: 'absolute',
29
- borderRadius: '50%',
30
- top: 5,
31
- right: 5,
32
- }))
33
-
34
- export default function FilterButton({
35
- onClick,
36
- size = 'large',
37
- filtersApplied,
38
- ...props
39
- }: {
40
- onClick: (e: any) => void
41
- size?: 'regular' | 'large'
42
- filtersApplied?: any
43
- }) {
44
- const handleClick = (e) => {
45
- e.stopPropagation()
46
- if (!onClick) return
47
- onClick(e)
48
- }
49
-
50
- return (
51
- <StyledButtonWrapper size={size} {...props} onClick={handleClick}>
52
- {filtersApplied && <StyledNotify />}
53
- <Tune />
54
- </StyledButtonWrapper>
55
- )
56
- }
@@ -1,45 +0,0 @@
1
- import { Search } from '@mui/icons-material'
2
- import { InputAdornment } from '@mui/material'
3
- import _ from 'lodash'
4
- import { ReactNode, useMemo, useState } from 'react'
5
- import { TextField } from '../Input'
6
- import { ITextFieldProps } from '../Input/TextField'
7
-
8
- interface SearchBarProps {
9
- onSearch: (v: string) => void
10
- label?: ReactNode
11
- textFieldProps?: ITextFieldProps
12
- }
13
-
14
- export default function SearchBar({
15
- onSearch,
16
- label,
17
- ...restProps
18
- }: SearchBarProps) {
19
- const [, setSearch] = useState('')
20
-
21
- const debouncedChangeHandler = useMemo(
22
- () =>
23
- _.debounce((e) => {
24
- setSearch(e.target.value)
25
- onSearch(e.target.value)
26
- }, 300),
27
- [],
28
- )
29
-
30
- return (
31
- <TextField
32
- label={label}
33
- placeholder="Search"
34
- onChange={debouncedChangeHandler}
35
- InputProps={{
36
- endAdornment: (
37
- <InputAdornment position="end">
38
- <Search />
39
- </InputAdornment>
40
- ),
41
- }}
42
- {...restProps.textFieldProps}
43
- />
44
- )
45
- }
@@ -1,33 +0,0 @@
1
- import { Box, styled } from '@mui/material'
2
- export const StyledFooter = styled(Box)<{
3
- show: boolean
4
- }>`
5
- position: fixed;
6
- background: #fff;
7
- bottom: ${(props) => (props.show ? '0' : '-70px')};
8
- right: 16px;
9
- width: calc(100% - 236px);
10
- height: 64px;
11
- display: flex;
12
- justify-content: center;
13
- align-items: center;
14
- gap: 1.5rem;
15
- padding: 1rem;
16
- transition: bottom 400ms ease-in-out;
17
- box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1);
18
- `
19
-
20
- function FloatingContainer({
21
- children,
22
- show,
23
- }: {
24
- show?: boolean
25
- children: React.ReactNode
26
- }) {
27
- return (
28
- <>
29
- <StyledFooter show={show}>{children}</StyledFooter>
30
- </>
31
- )
32
- }
33
- export default FloatingContainer
@@ -1,147 +0,0 @@
1
- import { yupResolver } from '@hookform/resolvers/yup'
2
- import { Alert, Box, ButtonProps, Typography } from '@mui/material'
3
- import { AxiosResponse } from 'axios'
4
- import { ReactNode, useState } from 'react'
5
- import { useForm } from 'react-hook-form'
6
- import { useMutation, useQueryClient } from 'react-query'
7
- import { axiosErrorToast } from '../../config/axios'
8
- import ActionButton from '../ActionButton'
9
- import RenderForm, { generateYupSchema, RenderFormProps } from './RenderForm'
10
-
11
- interface FormProps extends Omit<RenderFormProps, 'control'> {
12
- buttonProps?: ButtonProps
13
- submitBtn?: { label?: ReactNode }
14
- cancelBtn?: { label?: ReactNode; hide: boolean }
15
- defaultValues?: any
16
- refetchKey?: string
17
- previousData?: any
18
- onCancel?: () => void
19
- postFunction: (body: any) => Promise<AxiosResponse>
20
- onPostSuccess?: (response: any) => void
21
- onPostError?: (error: any) => void
22
- onFormError?: (error: any) => void
23
- }
24
-
25
- export default function Form({
26
- submitBtn = { label: 'Submit' },
27
- cancelBtn = { label: 'Cancel', hide: false },
28
- buttonProps,
29
- defaultValues,
30
- cols,
31
- fields,
32
- dropdowns,
33
- refetchKey,
34
- onCancel,
35
- previousData,
36
- postFunction,
37
- onPostSuccess,
38
- onPostError,
39
- gap,
40
- onFormError,
41
- }: FormProps) {
42
- const queryClient = useQueryClient()
43
- const [error, setError] = useState<any>(null)
44
- const { control, watch, handleSubmit } = useForm({
45
- defaultValues: previousData ? previousData : null,
46
- resolver: yupResolver(
47
- generateYupSchema({
48
- fieldGroups: fields as any,
49
- }),
50
- ),
51
- })
52
-
53
- const { mutate, isLoading: posting } = useMutation(postFunction, {
54
- onSuccess(data) {
55
- queryClient.invalidateQueries(refetchKey)
56
- onPostSuccess && onPostSuccess(data)
57
- },
58
- onError(error: any) {
59
- onPostError ? onPostError(error) : axiosErrorToast(error)
60
- },
61
- })
62
-
63
- const onError = (error) => {
64
- const errorArray = Object.values(error)?.map((item: any) => item?.message)
65
- setError(errorArray)
66
- onFormError && onFormError(error)
67
- }
68
-
69
- return (
70
- <form
71
- onSubmit={handleSubmit((originalFormData) => {
72
- mutate(originalFormData)
73
- }, onError)}
74
- >
75
- <RenderForm
76
- cols={cols}
77
- gap={gap}
78
- fields={fields}
79
- control={control}
80
- dropdowns={dropdowns}
81
- />
82
-
83
- <FormErrorDisplay message={error} />
84
- <Box
85
- sx={{
86
- display: 'flex',
87
- gap: '20px',
88
- marginTop: `20px`,
89
- justifyContent: 'center',
90
- }}
91
- >
92
- <ActionButton
93
- loading={posting}
94
- disabled={posting}
95
- type="submit"
96
- {...buttonProps}
97
- >
98
- {submitBtn?.label}
99
- </ActionButton>
100
- {!cancelBtn?.hide && (
101
- <ActionButton
102
- fullWidth
103
- variant="outlined"
104
- onClick={() => {
105
- onCancel ? onCancel() : null
106
- }}
107
- {...buttonProps}
108
- >
109
- {cancelBtn?.label}
110
- </ActionButton>
111
- )}
112
- </Box>
113
- </form>
114
- )
115
- }
116
-
117
- const FormErrorDisplay = ({ message }: { message: string | string[] }) => {
118
- if (!message) return null
119
-
120
- if (typeof message === 'string')
121
- return (
122
- <Alert severity="error" sx={{ marginTop: '1rem' }}>
123
- {message}
124
- </Alert>
125
- )
126
-
127
- return (
128
- <Alert
129
- severity="error"
130
- sx={{
131
- marginTop: '1rem',
132
- '& .MuiAlert-icon': {
133
- display: 'flex',
134
- alignItems: 'center',
135
- },
136
- }}
137
- >
138
- <Box>
139
- {message?.map((item, index) => (
140
- <Typography color="error" variant="body1" key={index}>
141
- {item}
142
- </Typography>
143
- ))}
144
- </Box>
145
- </Alert>
146
- )
147
- }
@@ -1,189 +0,0 @@
1
- import { Box, Typography } from '@mui/material'
2
- import { ReactNode } from 'react'
3
- import * as yup from 'yup'
4
- import { Control } from 'react-hook-form'
5
- import {
6
- FormDatePicker,
7
- FormRadioGroup,
8
- FormSingleSelect,
9
- FormTextField,
10
- } from '../HookForm'
11
-
12
- export const generateYupSchema = (options: {
13
- fieldGroups: any[][]
14
- fieldArrayGroups?: any[]
15
- extraValidations?: any
16
- }) => {
17
- const flatArray = options.fieldGroups.flat()
18
-
19
- const validations = flatArray
20
- ?.filter(
21
- (item) => item?.required !== undefined || item?.validation !== undefined,
22
- )
23
- ?.reduce((acc, curr) => {
24
- return {
25
- [curr.name]:
26
- curr?.validation ??
27
- yup.string().required(`${curr?.label} is required`),
28
- ...acc,
29
- }
30
- }, {})
31
-
32
- return yup.object().shape({ ...validations, ...options.extraValidations })
33
- }
34
-
35
- type FormTypes =
36
- | 'FormTextField'
37
- | 'Display'
38
- | 'FormSingleSelect'
39
- | 'FormRadioGroup'
40
- | 'FormDatePicker'
41
-
42
- export interface Field {
43
- render: FormTypes
44
- name: string
45
- label?: string
46
- required?: boolean
47
- elementProps?: any
48
- disabled?: boolean
49
- valiation?: any
50
- }
51
-
52
- export interface RenderFormProps {
53
- fields: Field[]
54
- dropdowns?: { [x: string]: { label: string | ReactNode; value: any }[] }
55
- control: Control<any, any>
56
- cols: number
57
- data?: any
58
- fieldArrayOptions?: { index: number; name: string }
59
- gap?: string | number
60
- }
61
-
62
- const RenderForm = ({
63
- fields,
64
- dropdowns,
65
- control,
66
- cols,
67
- data = null,
68
- fieldArrayOptions,
69
- gap = '1rem',
70
- }: RenderFormProps) => {
71
- return (
72
- <>
73
- <Box
74
- sx={{
75
- display: 'grid',
76
- gridTemplateColumns: `repeat(${cols}, 1fr)`,
77
- gap,
78
- width: '100%',
79
- }}
80
- >
81
- {fields?.map((item) => {
82
- return renderFormField({
83
- field: item,
84
- control,
85
- dropdown: dropdowns ? dropdowns[item?.name] : null,
86
- elementProps: item?.elementProps,
87
- value: data ? data[item?.name] : null,
88
- fieldArrayOptions,
89
- })
90
- })}
91
- </Box>
92
- </>
93
- )
94
- }
95
- export default RenderForm
96
-
97
- const renderFormField = ({
98
- field,
99
- control,
100
- dropdown,
101
- elementProps,
102
- value,
103
- fieldArrayOptions,
104
- }) => {
105
- const name = fieldArrayOptions?.name
106
- ? `${fieldArrayOptions?.name}.${fieldArrayOptions?.index}.${field?.name}`
107
- : field?.name
108
-
109
- switch (field.render) {
110
- case 'FormTextField':
111
- return (
112
- <FormTextField
113
- control={control}
114
- name={name}
115
- label={field?.label}
116
- required={field?.required}
117
- disabled={field?.disabled}
118
- {...elementProps}
119
- />
120
- )
121
-
122
- case 'FormSingleSelect':
123
- return (
124
- <FormSingleSelect
125
- options={dropdown}
126
- control={control}
127
- name={name}
128
- label={field?.label}
129
- required={field?.required}
130
- disabled={field?.disabled}
131
- {...elementProps}
132
- />
133
- )
134
- case 'FormDatePicker':
135
- return (
136
- <FormDatePicker
137
- size="medium"
138
- control={control}
139
- name={name}
140
- label={field?.label}
141
- required={field?.required}
142
- disabled={field?.disabled}
143
- {...elementProps}
144
- />
145
- )
146
- case 'FormRadioGroup':
147
- return (
148
- <FormRadioGroup
149
- row={true}
150
- options={dropdown}
151
- control={control}
152
- name={name}
153
- label={field?.label}
154
- required={field?.required}
155
- disabled={field?.disabled}
156
- {...elementProps}
157
- />
158
- )
159
- case 'Display':
160
- return <FormDisplay label={field?.label} value={value} />
161
-
162
- case 'NestedForm':
163
- return <NestedForm label={field?.label} nestedFields={[]} />
164
-
165
- default:
166
- return <>{field?.label}</>
167
- }
168
- }
169
-
170
- const FormDisplay = ({ label, value }) => {
171
- return (
172
- <Box>
173
- <Typography variant="subtitle2">{label}</Typography>
174
- <Typography variant="body1" marginTop={'5px'}>
175
- {value ?? '-'}
176
- </Typography>
177
- </Box>
178
- )
179
- }
180
-
181
- const NestedForm = ({
182
- nestedFields,
183
- label,
184
- }: {
185
- label: ReactNode
186
- nestedFields: Field[]
187
- }) => {
188
- return <></>
189
- }
@@ -1,19 +0,0 @@
1
- import { Box, CircularProgress } from '@mui/material'
2
-
3
- const FullScreenLoader = () => {
4
- return (
5
- <Box
6
- sx={{
7
- margin: 0,
8
- padding: 0,
9
- height: '100vh',
10
- width: '100vw',
11
- display: 'grid',
12
- placeItems: 'center',
13
- }}
14
- >
15
- <CircularProgress size={60} />
16
- </Box>
17
- )
18
- }
19
- export default FullScreenLoader