@campxdev/shared 0.5.20 → 0.5.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 (200) hide show
  1. package/antd.customize.less +73 -73
  2. package/exports.ts +15 -15
  3. package/package.json +52 -52
  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 +28 -28
  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 +73 -73
  13. package/src/components/Card.tsx +97 -97
  14. package/src/components/CardsGrid.tsx +28 -28
  15. package/src/components/ChangePassword.tsx +164 -164
  16. package/src/components/Chips.tsx +77 -77
  17. package/src/components/Detail.tsx +15 -15
  18. package/src/components/DetailsGrid.tsx +52 -52
  19. package/src/components/DividerHeading.tsx +40 -40
  20. package/src/components/DrawerWrapper/DialogWrapper.tsx +63 -63
  21. package/src/components/DrawerWrapper/DrawerTemplate.tsx +53 -53
  22. package/src/components/DrawerWrapper/DrawerWrapper.tsx +53 -53
  23. package/src/components/DropDownButton.tsx +190 -190
  24. package/src/components/ErrorBoundary/ErrorBoundary.tsx +28 -28
  25. package/src/components/ErrorBoundary/ErrorFallback.tsx +236 -236
  26. package/src/components/ErrorBoundary/GlobalNetworkLoadingIndicator.tsx +13 -13
  27. package/src/components/ErrorBoundary/index.tsx +1 -1
  28. package/src/components/ErrorBox.tsx +42 -42
  29. package/src/components/FloatingContainer.tsx +26 -26
  30. package/src/components/FullCalendar/Actions.tsx +162 -162
  31. package/src/components/FullCalendar/FullCalendarWrapper.tsx +54 -54
  32. package/src/components/FullScreenLoader.tsx +19 -19
  33. package/src/components/HookForm/AutoCompleteSearch.tsx +143 -143
  34. package/src/components/HookForm/DatePicker.tsx +65 -65
  35. package/src/components/HookForm/DateTimePicker.tsx +70 -70
  36. package/src/components/HookForm/FormLabel.tsx +14 -14
  37. package/src/components/HookForm/MultiCheckbox.tsx +82 -82
  38. package/src/components/HookForm/MultiSelect.tsx +100 -100
  39. package/src/components/HookForm/RadioGroup.tsx +112 -112
  40. package/src/components/HookForm/SingleCheckbox.tsx +46 -46
  41. package/src/components/HookForm/SingleSelect.tsx +93 -93
  42. package/src/components/HookForm/TextField.tsx +74 -74
  43. package/src/components/HookForm/TimePicker.tsx +82 -82
  44. package/src/components/HookForm/index.ts +23 -23
  45. package/src/components/IconButtons/IconButtons.tsx +137 -137
  46. package/src/components/IconButtons/Icons.tsx +268 -268
  47. package/src/components/IconButtons/assets/edit.svg +4 -4
  48. package/src/components/IconButtons/assets/eye.svg +6 -6
  49. package/src/components/IconButtons/assets/trash.svg +7 -7
  50. package/src/components/IconButtons/index.tsx +8 -8
  51. package/src/components/IconLabel.tsx +37 -37
  52. package/src/components/Image/Image.tsx +43 -43
  53. package/src/components/Image/index.tsx +1 -1
  54. package/src/components/ImageUpload.tsx +98 -98
  55. package/src/components/Input/AutoCompleteSearch.tsx +143 -143
  56. package/src/components/Input/DatePicker.tsx +60 -60
  57. package/src/components/Input/DateRangePicker.tsx +131 -131
  58. package/src/components/Input/DateTimePicker.tsx +70 -70
  59. package/src/components/Input/FormLabel.tsx +14 -14
  60. package/src/components/Input/MultiCheckbox.tsx +79 -79
  61. package/src/components/Input/MultiSelect.tsx +52 -52
  62. package/src/components/Input/RadioGroup.tsx +55 -55
  63. package/src/components/Input/SingleCheckbox.tsx +23 -23
  64. package/src/components/Input/SingleSelect.tsx +139 -139
  65. package/src/components/Input/TextField.tsx +50 -50
  66. package/src/components/Input/TimePicker.tsx +82 -82
  67. package/src/components/Input/index.ts +26 -26
  68. package/src/components/JsonPreview/JsonPreview.tsx +7 -7
  69. package/src/components/JsonPreview/index.tsx +1 -1
  70. package/src/components/LabelValue/LabelValue.tsx +21 -21
  71. package/src/components/LabelValue/index.tsx +1 -1
  72. package/src/components/Layout/ChangePassword.tsx +49 -49
  73. package/src/components/Layout/Header/AppHeader.tsx +113 -113
  74. package/src/components/Layout/Header/AppsMenu.tsx +92 -92
  75. package/src/components/Layout/Header/CogWheelMenu.tsx +33 -33
  76. package/src/components/Layout/Header/FreshDeskHelpButton.tsx +19 -19
  77. package/src/components/Layout/Header/Notification.tsx +13 -13
  78. package/src/components/Layout/Header/UserBox.tsx +70 -70
  79. package/src/components/Layout/Header/applications.ts +87 -87
  80. package/src/components/Layout/Header/assets/campx.svg +29 -29
  81. package/src/components/Layout/Header/assets/campx_square_small.svg +9 -9
  82. package/src/components/Layout/Header/assets/exams_small.svg +12 -12
  83. package/src/components/Layout/Header/assets/hostel_small.svg +13 -13
  84. package/src/components/Layout/Header/assets/index.ts +23 -23
  85. package/src/components/Layout/Header/assets/pay_small.svg +16 -16
  86. package/src/components/Layout/Header/assets/payxHeader.svg +21 -21
  87. package/src/components/Layout/Header/assets/people_small.svg +9 -9
  88. package/src/components/Layout/Header/assets/peoplexHeader.svg +14 -14
  89. package/src/components/Layout/Header/icons.tsx +57 -57
  90. package/src/components/Layout/Header/index.tsx +1 -1
  91. package/src/components/Layout/Header/styles.tsx +98 -98
  92. package/src/components/LayoutWrapper.tsx +25 -25
  93. package/src/components/LinearProgress.tsx +19 -19
  94. package/src/components/ListItemButton.tsx +94 -94
  95. package/src/components/LoginForm.tsx +103 -103
  96. package/src/components/MediaRow/MediaRow.tsx +69 -69
  97. package/src/components/MediaRow/index.tsx +1 -1
  98. package/src/components/MenuButton.tsx +103 -103
  99. package/src/components/ModalButtons/DialogButton.tsx +85 -85
  100. package/src/components/ModalButtons/DrawerButton.tsx +89 -89
  101. package/src/components/ModalButtons/index.tsx +4 -4
  102. package/src/components/NoDataIllustration/NoDataIllustration.tsx +32 -32
  103. package/src/components/NoDataIllustration/index.tsx +1 -1
  104. package/src/components/PageContent.tsx +17 -17
  105. package/src/components/PageHeader.tsx +52 -52
  106. package/src/components/PageNotFound.tsx +26 -26
  107. package/src/components/PopupConfirm/ConfirmContextProvider.tsx +40 -40
  108. package/src/components/PopupConfirm/PopupConfirm.tsx +34 -34
  109. package/src/components/PopupConfirm/index.tsx +1 -1
  110. package/src/components/PopupConfirm/useConfirm.ts +47 -47
  111. package/src/components/Row/Row.tsx +24 -24
  112. package/src/components/Row/index.tsx +1 -1
  113. package/src/components/SearchBar/SearchBar.tsx +53 -53
  114. package/src/components/SearchBar/index.tsx +1 -1
  115. package/src/components/SideMenuHeader.tsx +29 -29
  116. package/src/components/SideNav.tsx +150 -150
  117. package/src/components/Spinner.tsx +18 -18
  118. package/src/components/StepsHeader/StepsHeader.tsx +115 -115
  119. package/src/components/StepsHeader/index.tsx +1 -1
  120. package/src/components/Styled/OutlinedIconButton.tsx +7 -7
  121. package/src/components/Styled/index.tsx +1 -1
  122. package/src/components/StyledTableContainer.tsx +33 -33
  123. package/src/components/Swiper/Swiper.tsx +39 -39
  124. package/src/components/Swiper/index.tsx +1 -1
  125. package/src/components/SwitchButton/SwitchButton.tsx +41 -41
  126. package/src/components/SwitchButton/index.tsx +1 -1
  127. package/src/components/Table.tsx +42 -42
  128. package/src/components/TableComponent/BatchActionsHeader.tsx +58 -58
  129. package/src/components/TableComponent/Icons/index.tsx +50 -50
  130. package/src/components/TableComponent/ReactTable.tsx +293 -293
  131. package/src/components/TableComponent/RenderTableBody.tsx +64 -64
  132. package/src/components/TableComponent/TableFooter/TableFooter.tsx +102 -102
  133. package/src/components/TableComponent/TableFooter/index.tsx +1 -1
  134. package/src/components/TableComponent/TableFooter/styles.tsx +28 -28
  135. package/src/components/TableComponent/index.tsx +221 -221
  136. package/src/components/TableComponent/react-table-config.d.ts +129 -129
  137. package/src/components/TableComponent/styles.tsx +173 -173
  138. package/src/components/TableComponent/types.ts +57 -57
  139. package/src/components/Tabs/Tabs.tsx +52 -52
  140. package/src/components/Tabs/TabsContainer.tsx +50 -50
  141. package/src/components/Tabs/index.tsx +1 -1
  142. package/src/components/Tabs/styles.tsx +55 -55
  143. package/src/components/ToastContainer/ToastContainer.tsx +42 -42
  144. package/src/components/ToastContainer/index.tsx +1 -1
  145. package/src/components/UploadButton/UploadButton.tsx +98 -98
  146. package/src/components/UploadButton/index.tsx +1 -1
  147. package/src/components/UploadButton/types.ts +14 -14
  148. package/src/components/UploadDocument/UploadDocument.tsx +108 -108
  149. package/src/components/UploadDocument/index.tsx +1 -1
  150. package/src/components/UploadFileDialog/UploadFileDialog.tsx +240 -240
  151. package/src/components/UploadFileDialog/index.tsx +1 -1
  152. package/src/components/index.ts +82 -82
  153. package/src/config/axios.ts +73 -73
  154. package/src/constants/UIConstants.ts +97 -97
  155. package/src/constants/formValidations.ts +6 -6
  156. package/src/constants/index.ts +5 -5
  157. package/src/constants/isDevelopment.ts +3 -3
  158. package/src/constants/permissions.ts +67 -67
  159. package/src/constants/validateMessages.ts +12 -12
  160. package/src/contexts/LoginFormProvider.tsx +39 -39
  161. package/src/contexts/Providers.tsx +57 -57
  162. package/src/contexts/QueryClientProvider.tsx +22 -22
  163. package/src/hooks/index.ts +3 -3
  164. package/src/hooks/useAppInit.ts +33 -33
  165. package/src/hooks/useAuth.ts +90 -90
  166. package/src/hooks/useFetch.ts +53 -53
  167. package/src/hooks/useRouter.ts +31 -31
  168. package/src/layouts/Components/DashBoardMenu.tsx +232 -232
  169. package/src/layouts/Components/icons/index.tsx +403 -403
  170. package/src/layouts/Components/styles.tsx +60 -60
  171. package/src/layouts/ComponentsLayout.tsx +3 -3
  172. package/src/permissions/PageWithPermission.tsx +18 -18
  173. package/src/permissions/PermissionDeniedPage.tsx +16 -16
  174. package/src/permissions/PermissionsStore.ts +352 -295
  175. package/src/permissions/ValidateAccess.tsx +18 -18
  176. package/src/permissions/index.ts +3 -3
  177. package/src/react-app-env.d.ts +1 -1
  178. package/src/shared-state/AssetsStore.ts +15 -15
  179. package/src/shared-state/UserStore.ts +13 -13
  180. package/src/shared-state/index.ts +3 -3
  181. package/src/theme/App.less +3 -3
  182. package/src/theme/MuiThemeProvider.tsx +13 -13
  183. package/src/theme/customCssBaseline.ts +78 -78
  184. package/src/theme/index.css +75 -75
  185. package/src/theme/muiTheme.ts +516 -516
  186. package/src/theme/theme.d.ts +75 -75
  187. package/src/utils/alphabet.ts +23 -23
  188. package/src/utils/arrayPadEnd.ts +3 -3
  189. package/src/utils/formatCurrency.ts +9 -9
  190. package/src/utils/getUrlParams.ts +5 -5
  191. package/src/utils/index.ts +8 -8
  192. package/src/utils/logout.ts +24 -24
  193. package/src/utils/ordinalSuffixOf.ts +14 -14
  194. package/src/utils/romanize.ts +40 -40
  195. package/src/utils/withLocalization.tsx +11 -11
  196. package/src/utils/withRouteWrapper.tsx +25 -25
  197. package/src/utils/withSuspense.tsx +6 -6
  198. package/styled-components.tsx +60 -60
  199. package/todo.md +8 -8
  200. package/tsconfig.json +21 -21
@@ -1,37 +1,37 @@
1
- import { Box, styled, Typography } from '@mui/material'
2
- import { ReactNode } from 'react'
3
-
4
- const StyledStack = styled(Box)(({ theme }) => ({
5
- display: 'flex',
6
- alignItems: 'center',
7
- gap: '8px',
8
- '& .MuiSvgIcon-root': {
9
- fontSize: '1rem',
10
- color: theme.palette.text.secondary,
11
- },
12
- }))
13
-
14
- export default function IconLabel({
15
- label,
16
- icon,
17
- onClick,
18
- }: {
19
- label: string
20
- icon: ReactNode
21
- onClick?: () => void
22
- }) {
23
- return (
24
- <StyledStack
25
- onClick={onClick ?? onClick}
26
- sx={{
27
- ...(onClick && {
28
- cursor: 'pointer',
29
- '&:hover': { borderBottom: '1px solid gray' },
30
- }),
31
- }}
32
- >
33
- {icon}
34
- <Typography variant="subtitle2">{label}</Typography>
35
- </StyledStack>
36
- )
37
- }
1
+ import { Box, styled, Typography } from '@mui/material'
2
+ import { ReactNode } from 'react'
3
+
4
+ const StyledStack = styled(Box)(({ theme }) => ({
5
+ display: 'flex',
6
+ alignItems: 'center',
7
+ gap: '8px',
8
+ '& .MuiSvgIcon-root': {
9
+ fontSize: '1rem',
10
+ color: theme.palette.text.secondary,
11
+ },
12
+ }))
13
+
14
+ export default function IconLabel({
15
+ label,
16
+ icon,
17
+ onClick,
18
+ }: {
19
+ label: string
20
+ icon: ReactNode
21
+ onClick?: () => void
22
+ }) {
23
+ return (
24
+ <StyledStack
25
+ onClick={onClick ?? onClick}
26
+ sx={{
27
+ ...(onClick && {
28
+ cursor: 'pointer',
29
+ '&:hover': { borderBottom: '1px solid gray' },
30
+ }),
31
+ }}
32
+ >
33
+ {icon}
34
+ <Typography variant="subtitle2">{label}</Typography>
35
+ </StyledStack>
36
+ )
37
+ }
@@ -1,43 +1,43 @@
1
- import { Box } from '@mui/material'
2
- const brokenImage = require('./broken-image.png')
3
-
4
- interface ImageProps {
5
- src: string
6
- alt: string
7
- height: string | number
8
- width: string | number
9
- fit?: 'cover' | 'contain' | 'fill'
10
- radius?: string | number
11
- }
12
-
13
- export default function Image({
14
- src,
15
- alt,
16
- height,
17
- width,
18
- fit = 'contain',
19
- radius = '10px',
20
- }: ImageProps) {
21
- return (
22
- <Box
23
- sx={{
24
- height: height,
25
- width: width,
26
- '& > img': {
27
- borderRadius: radius,
28
- width: '100%',
29
- height: '100%',
30
- objectFit: fit,
31
- },
32
- }}
33
- >
34
- <img
35
- src={src}
36
- alt={alt}
37
- onError={(e: any) => {
38
- e.target.src = brokenImage
39
- }}
40
- />
41
- </Box>
42
- )
43
- }
1
+ import { Box } from '@mui/material'
2
+ const brokenImage = require('./broken-image.png')
3
+
4
+ interface ImageProps {
5
+ src: string
6
+ alt: string
7
+ height: string | number
8
+ width: string | number
9
+ fit?: 'cover' | 'contain' | 'fill'
10
+ radius?: string | number
11
+ }
12
+
13
+ export default function Image({
14
+ src,
15
+ alt,
16
+ height,
17
+ width,
18
+ fit = 'contain',
19
+ radius = '10px',
20
+ }: ImageProps) {
21
+ return (
22
+ <Box
23
+ sx={{
24
+ height: height,
25
+ width: width,
26
+ '& > img': {
27
+ borderRadius: radius,
28
+ width: '100%',
29
+ height: '100%',
30
+ objectFit: fit,
31
+ },
32
+ }}
33
+ >
34
+ <img
35
+ src={src}
36
+ alt={alt}
37
+ onError={(e: any) => {
38
+ e.target.src = brokenImage
39
+ }}
40
+ />
41
+ </Box>
42
+ )
43
+ }
@@ -1 +1 @@
1
- export { default } from './Image'
1
+ export { default } from './Image'
@@ -1,98 +1,98 @@
1
- import { InsertPhotoOutlined } from '@mui/icons-material'
2
- import { Box, CircularProgress, styled, Typography } from '@mui/material'
3
- import { ReactNode, useRef, useState } from 'react'
4
- import { toast } from 'react-toastify'
5
- import axios from '../config/axios'
6
-
7
- interface ImageUploadProps {
8
- onFileUploaded: (v) => void
9
- postUrl: string
10
- StyledUpload?: ReactNode
11
- loadingState?: (v) => void
12
- }
13
- export default function ImageUpload({
14
- onFileUploaded,
15
- postUrl,
16
- StyledUpload,
17
- loadingState,
18
- }: ImageUploadProps) {
19
- const [loading, setLoading] = useState(false)
20
- const ref = useRef<HTMLInputElement>(null)
21
-
22
- const handleChange = (e) => {
23
- if (e.target.files[0]) {
24
- const formData = new FormData()
25
- formData.append('file', e.target.files[0])
26
- setLoading(true)
27
- loadingState && setLoading(true)
28
- axios
29
- .post(postUrl, formData)
30
- .then((res) => {
31
- onFileUploaded({
32
- url: res.data.url,
33
- key: res.data.key,
34
- fileName: res.data?.mediaObject?.originalFileName ?? '',
35
- id: res.data?.mediaObject?.id ?? '',
36
- })
37
- setLoading(false)
38
- loadingState && setLoading(false)
39
- })
40
- .catch((err) => {
41
- setLoading(false)
42
- loadingState && setLoading(false)
43
- toast.error('Server Error While Uploading File')
44
- })
45
- }
46
- }
47
-
48
- return (
49
- <>
50
- {StyledUpload ? (
51
- <div
52
- onClick={() => {
53
- ref.current.click()
54
- }}
55
- >
56
- {StyledUpload}
57
- </div>
58
- ) : (
59
- <StyledImageLabel
60
- onClick={() => {
61
- ref.current.click()
62
- }}
63
- >
64
- <InsertPhotoOutlined />
65
- <Typography sx={{ opacity: '0.6' }}>
66
- {loading ? 'Uploading...' : `Upload Photo`}
67
- </Typography>
68
- </StyledImageLabel>
69
- )}
70
-
71
- <input
72
- accept="image/*"
73
- type="file"
74
- hidden
75
- ref={ref}
76
- onChange={handleChange}
77
- />
78
- </>
79
- )
80
- }
81
-
82
- export const StyledImageLabel = styled('div')(({ theme }) => ({
83
- cursor: 'pointer',
84
- borderRadius: '10px',
85
- width: '100%',
86
- height: '150px',
87
- border: '1px dashed #0000001A',
88
- display: 'flex',
89
- flexDirection: 'column',
90
- justifyContent: 'center',
91
- alignItems: 'center',
92
- '&:hover': {
93
- backgroundColor: '#EFEFEF',
94
- },
95
- '& > *': {
96
- color: theme.palette.text.disabled,
97
- },
98
- }))
1
+ import { InsertPhotoOutlined } from '@mui/icons-material'
2
+ import { Box, CircularProgress, styled, Typography } from '@mui/material'
3
+ import { ReactNode, useRef, useState } from 'react'
4
+ import { toast } from 'react-toastify'
5
+ import axios from '../config/axios'
6
+
7
+ interface ImageUploadProps {
8
+ onFileUploaded: (v) => void
9
+ postUrl: string
10
+ StyledUpload?: ReactNode
11
+ loadingState?: (v) => void
12
+ }
13
+ export default function ImageUpload({
14
+ onFileUploaded,
15
+ postUrl,
16
+ StyledUpload,
17
+ loadingState,
18
+ }: ImageUploadProps) {
19
+ const [loading, setLoading] = useState(false)
20
+ const ref = useRef<HTMLInputElement>(null)
21
+
22
+ const handleChange = (e) => {
23
+ if (e.target.files[0]) {
24
+ const formData = new FormData()
25
+ formData.append('file', e.target.files[0])
26
+ setLoading(true)
27
+ loadingState && setLoading(true)
28
+ axios
29
+ .post(postUrl, formData)
30
+ .then((res) => {
31
+ onFileUploaded({
32
+ url: res.data.url,
33
+ key: res.data.key,
34
+ fileName: res.data?.mediaObject?.originalFileName ?? '',
35
+ id: res.data?.mediaObject?.id ?? '',
36
+ })
37
+ setLoading(false)
38
+ loadingState && setLoading(false)
39
+ })
40
+ .catch((err) => {
41
+ setLoading(false)
42
+ loadingState && setLoading(false)
43
+ toast.error('Server Error While Uploading File')
44
+ })
45
+ }
46
+ }
47
+
48
+ return (
49
+ <>
50
+ {StyledUpload ? (
51
+ <div
52
+ onClick={() => {
53
+ ref.current.click()
54
+ }}
55
+ >
56
+ {StyledUpload}
57
+ </div>
58
+ ) : (
59
+ <StyledImageLabel
60
+ onClick={() => {
61
+ ref.current.click()
62
+ }}
63
+ >
64
+ <InsertPhotoOutlined />
65
+ <Typography sx={{ opacity: '0.6' }}>
66
+ {loading ? 'Uploading...' : `Upload Photo`}
67
+ </Typography>
68
+ </StyledImageLabel>
69
+ )}
70
+
71
+ <input
72
+ accept="image/*"
73
+ type="file"
74
+ hidden
75
+ ref={ref}
76
+ onChange={handleChange}
77
+ />
78
+ </>
79
+ )
80
+ }
81
+
82
+ export const StyledImageLabel = styled('div')(({ theme }) => ({
83
+ cursor: 'pointer',
84
+ borderRadius: '10px',
85
+ width: '100%',
86
+ height: '150px',
87
+ border: '1px dashed #0000001A',
88
+ display: 'flex',
89
+ flexDirection: 'column',
90
+ justifyContent: 'center',
91
+ alignItems: 'center',
92
+ '&:hover': {
93
+ backgroundColor: '#EFEFEF',
94
+ },
95
+ '& > *': {
96
+ color: theme.palette.text.disabled,
97
+ },
98
+ }))
@@ -1,143 +1,143 @@
1
- import {
2
- Autocomplete,
3
- Box,
4
- CircularProgress,
5
- TextField,
6
- Typography,
7
- } from '@mui/material'
8
- import { Controller } from 'react-hook-form'
9
- import FormLabel from './FormLabel'
10
-
11
- type Option = {
12
- value: string | any
13
- label: string | any
14
- }
15
-
16
- interface MultiSelectProps {
17
- control?: any
18
- label: string
19
- name: string
20
- options: { value: string | any; label: string | any }[]
21
- placeholder?: string
22
- hookForm?: boolean
23
- loading?: boolean
24
- [key: string]: any
25
- multiple?: boolean
26
- }
27
-
28
- export default function AutoCompleteSearch({
29
- control,
30
- name,
31
- options,
32
- label,
33
- loading, // pass this variable when options are from an async operation
34
- hookForm = true,
35
- multiple = false,
36
- ...props
37
- }: MultiSelectProps) {
38
- if (!hookForm) {
39
- return (
40
- <Autocomplete
41
- multiple={multiple}
42
- value={props.value}
43
- fullWidth
44
- onChange={(e, value) => {
45
- props.onChange(value)
46
- }}
47
- options={options || []}
48
- getOptionLabel={(option: Option) => option?.label || ''}
49
- renderInput={(params) => (
50
- <TextField
51
- variant="outlined"
52
- label={<FormLabel label={label} required={props.required} />}
53
- {...params}
54
- />
55
- )}
56
- {...props}
57
- />
58
- )
59
- }
60
-
61
- return (
62
- <Controller
63
- control={control}
64
- name={name}
65
- render={({ field, fieldState: { error } }) => (
66
- <Box>
67
- <Autocomplete
68
- multiple={multiple}
69
- loading={loading}
70
- value={field.value}
71
- fullWidth
72
- onChange={(e, value) => {
73
- field.onChange(value)
74
- }}
75
- options={options || []}
76
- getOptionLabel={(option: Option) => option?.label || ''}
77
- renderInput={(params) => (
78
- <TextField
79
- error={Boolean(error)}
80
- variant="outlined"
81
- label={<FormLabel label={label} required={props.required} />}
82
- InputProps={{
83
- ...params.InputProps,
84
- endAdornment: (
85
- <>
86
- {loading ? (
87
- <CircularProgress color="inherit" size={20} />
88
- ) : null}
89
- {params.InputProps.endAdornment}
90
- </>
91
- ),
92
- }}
93
- {...params}
94
- />
95
- )}
96
- />
97
- {error && (
98
- <Typography
99
- fontSize={12}
100
- sx={{
101
- paddingLeft: '2px',
102
- marginTop: '2px',
103
- }}
104
- color="error"
105
- >
106
- {error?.message}
107
- </Typography>
108
- )}
109
- </Box>
110
- )}
111
- />
112
- )
113
- }
114
-
115
- export function MyAutoComplete({
116
- value,
117
- onChange,
118
- options,
119
- label,
120
- loading,
121
- ...props
122
- }) {
123
- return (
124
- <Autocomplete
125
- loading={loading}
126
- value={value}
127
- fullWidth
128
- freeSolo
129
- onChange={(e, value) => {
130
- onChange(value.value)
131
- }}
132
- options={options || []}
133
- getOptionLabel={(option: Option) => option?.label || ''}
134
- renderInput={(params) => (
135
- <TextField
136
- {...params}
137
- variant="outlined"
138
- label={<FormLabel label={label} required={props.required} />}
139
- />
140
- )}
141
- />
142
- )
143
- }
1
+ import {
2
+ Autocomplete,
3
+ Box,
4
+ CircularProgress,
5
+ TextField,
6
+ Typography,
7
+ } from '@mui/material'
8
+ import { Controller } from 'react-hook-form'
9
+ import FormLabel from './FormLabel'
10
+
11
+ type Option = {
12
+ value: string | any
13
+ label: string | any
14
+ }
15
+
16
+ interface MultiSelectProps {
17
+ control?: any
18
+ label: string
19
+ name: string
20
+ options: { value: string | any; label: string | any }[]
21
+ placeholder?: string
22
+ hookForm?: boolean
23
+ loading?: boolean
24
+ [key: string]: any
25
+ multiple?: boolean
26
+ }
27
+
28
+ export default function AutoCompleteSearch({
29
+ control,
30
+ name,
31
+ options,
32
+ label,
33
+ loading, // pass this variable when options are from an async operation
34
+ hookForm = true,
35
+ multiple = false,
36
+ ...props
37
+ }: MultiSelectProps) {
38
+ if (!hookForm) {
39
+ return (
40
+ <Autocomplete
41
+ multiple={multiple}
42
+ value={props.value}
43
+ fullWidth
44
+ onChange={(e, value) => {
45
+ props.onChange(value)
46
+ }}
47
+ options={options || []}
48
+ getOptionLabel={(option: Option) => option?.label || ''}
49
+ renderInput={(params) => (
50
+ <TextField
51
+ variant="outlined"
52
+ label={<FormLabel label={label} required={props.required} />}
53
+ {...params}
54
+ />
55
+ )}
56
+ {...props}
57
+ />
58
+ )
59
+ }
60
+
61
+ return (
62
+ <Controller
63
+ control={control}
64
+ name={name}
65
+ render={({ field, fieldState: { error } }) => (
66
+ <Box>
67
+ <Autocomplete
68
+ multiple={multiple}
69
+ loading={loading}
70
+ value={field.value}
71
+ fullWidth
72
+ onChange={(e, value) => {
73
+ field.onChange(value)
74
+ }}
75
+ options={options || []}
76
+ getOptionLabel={(option: Option) => option?.label || ''}
77
+ renderInput={(params) => (
78
+ <TextField
79
+ error={Boolean(error)}
80
+ variant="outlined"
81
+ label={<FormLabel label={label} required={props.required} />}
82
+ InputProps={{
83
+ ...params.InputProps,
84
+ endAdornment: (
85
+ <>
86
+ {loading ? (
87
+ <CircularProgress color="inherit" size={20} />
88
+ ) : null}
89
+ {params.InputProps.endAdornment}
90
+ </>
91
+ ),
92
+ }}
93
+ {...params}
94
+ />
95
+ )}
96
+ />
97
+ {error && (
98
+ <Typography
99
+ fontSize={12}
100
+ sx={{
101
+ paddingLeft: '2px',
102
+ marginTop: '2px',
103
+ }}
104
+ color="error"
105
+ >
106
+ {error?.message}
107
+ </Typography>
108
+ )}
109
+ </Box>
110
+ )}
111
+ />
112
+ )
113
+ }
114
+
115
+ export function MyAutoComplete({
116
+ value,
117
+ onChange,
118
+ options,
119
+ label,
120
+ loading,
121
+ ...props
122
+ }) {
123
+ return (
124
+ <Autocomplete
125
+ loading={loading}
126
+ value={value}
127
+ fullWidth
128
+ freeSolo
129
+ onChange={(e, value) => {
130
+ onChange(value.value)
131
+ }}
132
+ options={options || []}
133
+ getOptionLabel={(option: Option) => option?.label || ''}
134
+ renderInput={(params) => (
135
+ <TextField
136
+ {...params}
137
+ variant="outlined"
138
+ label={<FormLabel label={label} required={props.required} />}
139
+ />
140
+ )}
141
+ />
142
+ )
143
+ }