@campxdev/shared 1.1.3 → 1.1.5

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 (215) hide show
  1. package/antd.customize.less +73 -73
  2. package/exports.ts +17 -17
  3. package/package.json +82 -82
  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 +72 -72
  13. package/src/components/Card.tsx +98 -98
  14. package/src/components/CardsGrid.tsx +28 -28
  15. package/src/components/ChangePassword.tsx +164 -164
  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.tsx +194 -194
  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 +33 -33
  30. package/src/components/Form/Form.tsx +156 -156
  31. package/src/components/Form/RenderForm.tsx +188 -188
  32. package/src/components/FullCalendar/Actions.tsx +162 -162
  33. package/src/components/FullCalendar/FullCalendarWrapper.tsx +54 -54
  34. package/src/components/FullScreenLoader.tsx +19 -19
  35. package/src/components/HookForm/AutoCompleteSearch.tsx +113 -113
  36. package/src/components/HookForm/DatePicker.tsx +65 -65
  37. package/src/components/HookForm/DateTimePicker.tsx +70 -70
  38. package/src/components/HookForm/FormLabel.tsx +14 -14
  39. package/src/components/HookForm/MultiCheckbox.tsx +82 -82
  40. package/src/components/HookForm/MultiSelect.tsx +100 -100
  41. package/src/components/HookForm/RadioGroup.tsx +106 -106
  42. package/src/components/HookForm/SingleCheckbox.tsx +46 -46
  43. package/src/components/HookForm/SingleSelect.tsx +94 -94
  44. package/src/components/HookForm/TextField.tsx +74 -74
  45. package/src/components/HookForm/TimePicker.tsx +82 -82
  46. package/src/components/HookForm/index.ts +23 -23
  47. package/src/components/IconButtons/IconButtons.tsx +137 -137
  48. package/src/components/IconButtons/Icons.tsx +268 -268
  49. package/src/components/IconButtons/assets/edit.svg +4 -4
  50. package/src/components/IconButtons/assets/eye.svg +6 -6
  51. package/src/components/IconButtons/assets/trash.svg +7 -7
  52. package/src/components/IconButtons/index.tsx +8 -8
  53. package/src/components/IconLabel.tsx +37 -37
  54. package/src/components/Image/Image.tsx +43 -43
  55. package/src/components/Image/index.tsx +1 -1
  56. package/src/components/ImageUpload.tsx +98 -98
  57. package/src/components/Input/AutoCompleteSearch.tsx +113 -113
  58. package/src/components/Input/DatePicker.tsx +60 -60
  59. package/src/components/Input/DateRangePicker.tsx +131 -131
  60. package/src/components/Input/DateTimePicker.tsx +70 -70
  61. package/src/components/Input/FormLabel.tsx +14 -14
  62. package/src/components/Input/MultiCheckbox.tsx +79 -79
  63. package/src/components/Input/MultiSelect.tsx +52 -52
  64. package/src/components/Input/RadioGroup.tsx +61 -61
  65. package/src/components/Input/SingleCheckbox.tsx +23 -23
  66. package/src/components/Input/SingleSelect.tsx +126 -126
  67. package/src/components/Input/TextField.tsx +50 -50
  68. package/src/components/Input/TimePicker.tsx +82 -82
  69. package/src/components/Input/index.ts +26 -26
  70. package/src/components/JsonPreview/JsonPreview.tsx +7 -7
  71. package/src/components/JsonPreview/index.tsx +1 -1
  72. package/src/components/LabelValue/LabelValue.tsx +21 -21
  73. package/src/components/LabelValue/index.tsx +1 -1
  74. package/src/components/Layout/ChangePassword.tsx +49 -49
  75. package/src/components/Layout/Header/AppHeader.tsx +124 -124
  76. package/src/components/Layout/Header/AppsMenu.tsx +92 -92
  77. package/src/components/Layout/Header/CogWheelMenu.tsx +33 -33
  78. package/src/components/Layout/Header/HelpWidget/HelpWidget.tsx +298 -298
  79. package/src/components/Layout/Header/HelpWidget/styles.tsx +94 -94
  80. package/src/components/Layout/Header/Notification.tsx +13 -13
  81. package/src/components/Layout/Header/UserBox.tsx +91 -91
  82. package/src/components/Layout/Header/applications.ts +90 -90
  83. package/src/components/Layout/Header/assets/campx_square_small.svg +9 -9
  84. package/src/components/Layout/Header/assets/commuteX.png +0 -0
  85. package/src/components/Layout/Header/assets/commutex.svg +14 -14
  86. package/src/components/Layout/Header/assets/commutexSmall.svg +11 -11
  87. package/src/components/Layout/Header/assets/enroll.svg +14 -14
  88. package/src/components/Layout/Header/assets/enrollx.svg +14 -14
  89. package/src/components/Layout/Header/assets/exams_small.svg +12 -12
  90. package/src/components/Layout/Header/assets/examsx.svg +14 -14
  91. package/src/components/Layout/Header/assets/hostel_small.svg +13 -13
  92. package/src/components/Layout/Header/assets/hostelx.svg +13 -13
  93. package/src/components/Layout/Header/assets/index.ts +33 -33
  94. package/src/components/Layout/Header/assets/libraryx.svg +12 -12
  95. package/src/components/Layout/Header/assets/pay_small.svg +16 -16
  96. package/src/components/Layout/Header/assets/payx.svg +19 -19
  97. package/src/components/Layout/Header/assets/people_small.svg +9 -9
  98. package/src/components/Layout/Header/assets/peoplex.svg +12 -12
  99. package/src/components/Layout/Header/assets/squarex.svg +12 -12
  100. package/src/components/Layout/Header/icons.tsx +57 -57
  101. package/src/components/Layout/Header/index.tsx +1 -1
  102. package/src/components/Layout/Header/styles.tsx +98 -98
  103. package/src/components/Layout/Tickets/MyTickets.tsx +74 -74
  104. package/src/components/Layout/Tickets/Services.tsx +6 -6
  105. package/src/components/Layout/Tickets/TicketDetails.tsx +66 -66
  106. package/src/components/Layout/Tickets/TimeLine.tsx +64 -64
  107. package/src/components/Layout/Tickets/index.tsx +1 -1
  108. package/src/components/Layout/Tickets/styles.tsx +136 -136
  109. package/src/components/LayoutWrapper.tsx +25 -25
  110. package/src/components/LinearProgress.tsx +19 -19
  111. package/src/components/ListItemButton.tsx +95 -95
  112. package/src/components/LoginForm.tsx +105 -105
  113. package/src/components/MediaRow/MediaRow.tsx +69 -69
  114. package/src/components/MediaRow/index.tsx +1 -1
  115. package/src/components/MenuButton.tsx +103 -103
  116. package/src/components/ModalButtons/DialogButton.tsx +88 -88
  117. package/src/components/ModalButtons/DrawerButton.tsx +89 -89
  118. package/src/components/ModalButtons/index.tsx +4 -4
  119. package/src/components/NoDataIllustration/NoDataIllustration.tsx +32 -32
  120. package/src/components/NoDataIllustration/index.tsx +1 -1
  121. package/src/components/PageContent.tsx +17 -17
  122. package/src/components/PageHeader.tsx +52 -52
  123. package/src/components/PageNotFound.tsx +26 -26
  124. package/src/components/PopupConfirm/ConfirmContextProvider.tsx +40 -40
  125. package/src/components/PopupConfirm/PopupConfirm.tsx +34 -34
  126. package/src/components/PopupConfirm/index.tsx +1 -1
  127. package/src/components/PopupConfirm/useConfirm.ts +47 -47
  128. package/src/components/Router.tsx +7 -7
  129. package/src/components/Row/Row.tsx +24 -24
  130. package/src/components/Row/index.tsx +1 -1
  131. package/src/components/SearchBar/SearchBar.tsx +53 -53
  132. package/src/components/SearchBar/index.tsx +1 -1
  133. package/src/components/SideMenuHeader.tsx +29 -29
  134. package/src/components/SideNav.tsx +168 -168
  135. package/src/components/Spinner.tsx +18 -18
  136. package/src/components/StepsHeader/StepsHeader.tsx +115 -115
  137. package/src/components/StepsHeader/index.tsx +1 -1
  138. package/src/components/StyledTableContainer.tsx +33 -33
  139. package/src/components/SwitchButton/SwitchButton.tsx +41 -41
  140. package/src/components/SwitchButton/index.tsx +1 -1
  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 +293 -293
  145. package/src/components/TableComponent/RenderTableBody.tsx +64 -64
  146. package/src/components/TableComponent/TableFooter/TableFooter.tsx +102 -102
  147. package/src/components/TableComponent/TableFooter/index.tsx +1 -1
  148. package/src/components/TableComponent/TableFooter/styles.tsx +28 -28
  149. package/src/components/TableComponent/index.tsx +226 -226
  150. package/src/components/TableComponent/react-table-config.d.ts +128 -128
  151. package/src/components/TableComponent/styles.tsx +173 -173
  152. package/src/components/TableComponent/types.ts +57 -57
  153. package/src/components/Tabs/Tabs.tsx +52 -52
  154. package/src/components/Tabs/TabsContainer.tsx +50 -50
  155. package/src/components/Tabs/index.tsx +1 -1
  156. package/src/components/Tabs/styles.tsx +55 -55
  157. package/src/components/ToastContainer/ToastContainer.tsx +42 -42
  158. package/src/components/ToastContainer/index.tsx +1 -1
  159. package/src/components/UploadButton/UploadButton.tsx +126 -126
  160. package/src/components/UploadButton/index.tsx +1 -1
  161. package/src/components/UploadButton/types.ts +19 -19
  162. package/src/components/UploadDocument/UploadDocument.tsx +108 -108
  163. package/src/components/UploadDocument/index.tsx +1 -1
  164. package/src/components/UploadFileDialog/UploadFileDialog.tsx +238 -238
  165. package/src/components/UploadFileDialog/index.tsx +1 -1
  166. package/src/components/index.ts +86 -86
  167. package/src/config/axios.ts +74 -74
  168. package/src/config/axiosXTenant.ts +57 -57
  169. package/src/constants/UIConstants.ts +97 -97
  170. package/src/constants/formValidations.ts +6 -6
  171. package/src/constants/index.ts +5 -5
  172. package/src/constants/isDevelopment.ts +3 -3
  173. package/src/constants/permissions.ts +67 -67
  174. package/src/constants/validateMessages.ts +12 -12
  175. package/src/contexts/LoginFormProvider.tsx +39 -39
  176. package/src/contexts/Providers.tsx +60 -60
  177. package/src/contexts/PublicProviders.tsx +30 -30
  178. package/src/contexts/QueryClientProvider.tsx +22 -22
  179. package/src/hooks/index.ts +3 -3
  180. package/src/hooks/useAppInit.ts +33 -33
  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 +60 -60
  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 +490 -490
  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 +8 -8
  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/withLocalization.tsx +11 -11
  212. package/src/utils/withRouteWrapper.tsx +25 -25
  213. package/src/utils/withSuspense.tsx +6 -6
  214. package/styled-components.tsx +60 -60
  215. package/tsconfig.json +21 -21
@@ -1,298 +1,298 @@
1
- import { yupResolver } from '@hookform/resolvers/yup'
2
- import {
3
- ArrowBackIosNew,
4
- ArrowForwardIos,
5
- Close,
6
- HelpOutline,
7
- NotesSharp,
8
- } from '@mui/icons-material'
9
- import {
10
- Box,
11
- Button,
12
- Card,
13
- DialogContent,
14
- IconButton,
15
- Stack,
16
- Typography,
17
- } from '@mui/material'
18
- import { AxiosRequestConfig } from 'axios'
19
- import { useState } from 'react'
20
- import { useForm } from 'react-hook-form'
21
- import { useQuery } from 'react-query'
22
- import { toast } from 'react-toastify'
23
- import axios, { axiosErrorToast } from '../../../../config/axios'
24
- import { queryClient } from '../../../../contexts/QueryClientProvider'
25
- import { FormSingleSelect, FormTextField } from '../../../HookForm'
26
- import ImageUpload from '../../../ImageUpload'
27
- import MediaRow from '../../../MediaRow'
28
- import * as yup from 'yup'
29
- import Spinner from '../../../Spinner'
30
- import { Media } from '../../../UploadButton/types'
31
- import {
32
- StyledCard,
33
- StyledContactBoxHeader,
34
- StyledContactHeader,
35
- StyledDialog,
36
- StyledDialogCard,
37
- StyledDialogHeader,
38
- } from './styles'
39
- const schema = yup.object().shape({
40
- name: yup.string().required('Name is required'),
41
- subject: yup.string().required('Subject is required'),
42
- description: yup.string().required('Description is required'),
43
- categoryId: yup.string().required('Category is required'),
44
- serviceId: yup.string().required('Service is required'),
45
- })
46
- const HelpWidget = () => {
47
- const [open, setOpen] = useState(false)
48
- const { control, handleSubmit, watch, reset } = useForm({
49
- resolver: yupResolver(schema),
50
- })
51
- const [state, setState] = useState(0)
52
- const { data: ticketCategories, isLoading } = useQuery(
53
- 'ticketCategories',
54
- () => axios.get(`/service-tickets/categories`).then((res) => res.data),
55
- )
56
- // console.log(ticketCategories)
57
- const [uploadMedia, setUploadMedia] = useState<Media[]>([])
58
-
59
- const handleClickOpen = () => {
60
- setOpen(true)
61
- setState(0)
62
- }
63
- const handleClose = () => {
64
- setOpen(false)
65
- reset()
66
- }
67
- const handleUploadImageChange = (v) => {
68
- setUploadMedia([
69
- ...uploadMedia,
70
- { type: 'image', url: v.url, key: v.key, id: v.id },
71
- ])
72
- }
73
-
74
- const handleUploadDeleteImage = (key) => {
75
- setUploadMedia((prev) => prev.filter((m) => m.key !== key))
76
- }
77
-
78
- const onSubmit = async (formData) => {
79
- const config: AxiosRequestConfig = {
80
- method: 'POST',
81
- url: '/service-tickets',
82
- data: {
83
- issueFiles: [uploadMedia[0]?.key],
84
- ...formData,
85
- },
86
- }
87
-
88
- try {
89
- await axios(config)
90
- queryClient.invalidateQueries('ticketCategories')
91
- toast.success('Ticket Created Successfully')
92
- handleClose()
93
- reset()
94
- setUploadMedia([])
95
- } catch (error) {
96
- axiosErrorToast(error)
97
- }
98
- }
99
- if (isLoading) return <Spinner />
100
-
101
- return (
102
- <div>
103
- <StyledDialog
104
- fullWidth
105
- onClose={handleClose}
106
- open={open}
107
- PaperProps={{
108
- sx: {
109
- borderRadius: '10px',
110
- },
111
- }}
112
- >
113
- {state == 0 ? (
114
- <>
115
- <StyledDialogHeader>
116
- <IconButton onClick={handleClose}>
117
- <Close sx={{ position: 'absolute', color: 'white', top: 5 }} />
118
- </IconButton>
119
- </StyledDialogHeader>
120
- <DialogContent sx={{ padding: '0' }}>
121
- <Box>
122
- <StyledCard>
123
- <Box
124
- sx={{ display: 'flex', gap: '10px', alignItems: 'center' }}
125
- >
126
- <NotesSharp />
127
- <Typography variant="h5" sx={{ fontSize: '14px' }}>
128
- Knowledge Base
129
- </Typography>
130
- </Box>
131
- <ArrowForwardIos sx={{ width: '15px', color: 'blue' }} />
132
- </StyledCard>
133
- </Box>
134
- <Box
135
- sx={{
136
- padding: '15px 20px 20px 20px',
137
- }}
138
- >
139
- <Card
140
- sx={{
141
- boxShadow: '0px 3px 15px #0000001A',
142
- padding: '20px 15px',
143
- marginTop: '30px',
144
- }}
145
- >
146
- <Stack gap={1}>
147
- <Typography variant="h3">Want to get in touch?</Typography>
148
- <Typography variant="subtitle2" sx={{ maxWidth: '290px' }}>
149
- We’re standing by to answer all of your questions right
150
- now.
151
- </Typography>
152
- </Stack>
153
- <Button
154
- fullWidth
155
- sx={{
156
- borderRadius: '8px',
157
- marginTop: '15px',
158
- height: '50px',
159
- }}
160
- onClick={() => setState(1)}
161
- >
162
- Contact Us
163
- </Button>
164
- </Card>
165
- </Box>
166
- </DialogContent>
167
- </>
168
- ) : (
169
- <>
170
- <Box>
171
- <StyledContactHeader>
172
- <StyledContactBoxHeader onClick={() => setState(0)}>
173
- <ArrowBackIosNew sx={{ fontSize: 'small', color: 'white' }} />
174
- <Typography sx={{ color: 'white' }} variant="h3">
175
- Contact Us
176
- </Typography>
177
- </StyledContactBoxHeader>
178
- <IconButton onClick={handleClose}>
179
- <Close
180
- sx={{
181
- position: 'absolute',
182
- color: 'white',
183
- top: 5,
184
- right: 2,
185
- }}
186
- />
187
- </IconButton>
188
- </StyledContactHeader>
189
- <DialogContent sx={{ height: '500px' }}>
190
- <StyledDialogCard>
191
- <form onSubmit={handleSubmit(onSubmit)}>
192
- <Stack gap={'20px'}>
193
- <FormTextField
194
- label={'Your Name'}
195
- name={'name'}
196
- control={control}
197
- />
198
- <FormTextField
199
- label={'Subject'}
200
- name={'subject'}
201
- control={control}
202
- />
203
- <FormTextField
204
- label={'Description'}
205
- name={'description'}
206
- control={control}
207
- multiline
208
- rows={5}
209
- required
210
- />
211
- <FormSingleSelect
212
- label={'Category'}
213
- name={'categoryId'}
214
- control={control}
215
- options={ticketCategories?.map((item) => {
216
- return { label: item.name, value: item._id }
217
- })}
218
- // onChange={(value) => {
219
- // mutate({ id: value })
220
- // }}
221
- required
222
- />
223
- <FormSingleSelect
224
- label={'Service'}
225
- name={'serviceId'}
226
- control={control}
227
- options={
228
- ticketCategories
229
- ?.find((item) => item?._id === watch('categoryId'))
230
- ?.services?.map((item) => ({
231
- label: item.name,
232
- value: item._id,
233
- })) ?? []
234
- }
235
- required
236
- />
237
-
238
- {/* <StyledContactCard>
239
- <Screenshot />
240
- <Typography sx={{ fontSize: '12px' }} variant="h5">
241
- Take screenshot
242
- </Typography>
243
- </StyledContactCard> */}
244
- {/* <StyledContactCard
245
- sx={{
246
- minHeight: '120px',
247
- flexDirection: 'column',
248
- border: '2px dashed #0000001A',
249
- }}
250
- > */}
251
- {/* <Upload />
252
- <Typography sx={{ fontSize: '12px' }} variant="h5">
253
- Upload files (max 5)
254
- </Typography>
255
- <Typography variant="h4" sx={{ fontSize: '10px' }}>
256
- Click to add or drag & drop files
257
- </Typography> */}
258
- {/* category id , service id and priority is required */}
259
- {!uploadMedia?.length ? (
260
- <ImageUpload
261
- onFileUploaded={handleUploadImageChange}
262
- postUrl="/tickets/upload-issue-file"
263
- // postUrl="/"
264
- />
265
- ) : (
266
- <MediaRow
267
- list={uploadMedia}
268
- onDelete={handleUploadDeleteImage}
269
- />
270
- )}
271
- {/* </StyledContactCard> */}
272
- <Button
273
- type="submit"
274
- fullWidth
275
- sx={{
276
- height: '60px',
277
- borderRadius: '10px',
278
- fontSize: '18px',
279
- }}
280
- >
281
- Send
282
- </Button>
283
- </Stack>
284
- </form>
285
- </StyledDialogCard>
286
- </DialogContent>
287
- </Box>
288
- </>
289
- )}
290
- </StyledDialog>
291
-
292
- <IconButton color="secondary">
293
- <HelpOutline onClick={handleClickOpen} />
294
- </IconButton>
295
- </div>
296
- )
297
- }
298
- export default HelpWidget
1
+ import { yupResolver } from '@hookform/resolvers/yup'
2
+ import {
3
+ ArrowBackIosNew,
4
+ ArrowForwardIos,
5
+ Close,
6
+ HelpOutline,
7
+ NotesSharp,
8
+ } from '@mui/icons-material'
9
+ import {
10
+ Box,
11
+ Button,
12
+ Card,
13
+ DialogContent,
14
+ IconButton,
15
+ Stack,
16
+ Typography,
17
+ } from '@mui/material'
18
+ import { AxiosRequestConfig } from 'axios'
19
+ import { useState } from 'react'
20
+ import { useForm } from 'react-hook-form'
21
+ import { useQuery } from 'react-query'
22
+ import { toast } from 'react-toastify'
23
+ import axios, { axiosErrorToast } from '../../../../config/axios'
24
+ import { queryClient } from '../../../../contexts/QueryClientProvider'
25
+ import { FormSingleSelect, FormTextField } from '../../../HookForm'
26
+ import ImageUpload from '../../../ImageUpload'
27
+ import MediaRow from '../../../MediaRow'
28
+ import * as yup from 'yup'
29
+ import Spinner from '../../../Spinner'
30
+ import { Media } from '../../../UploadButton/types'
31
+ import {
32
+ StyledCard,
33
+ StyledContactBoxHeader,
34
+ StyledContactHeader,
35
+ StyledDialog,
36
+ StyledDialogCard,
37
+ StyledDialogHeader,
38
+ } from './styles'
39
+ const schema = yup.object().shape({
40
+ name: yup.string().required('Name is required'),
41
+ subject: yup.string().required('Subject is required'),
42
+ description: yup.string().required('Description is required'),
43
+ categoryId: yup.string().required('Category is required'),
44
+ serviceId: yup.string().required('Service is required'),
45
+ })
46
+ const HelpWidget = () => {
47
+ const [open, setOpen] = useState(false)
48
+ const { control, handleSubmit, watch, reset } = useForm({
49
+ resolver: yupResolver(schema),
50
+ })
51
+ const [state, setState] = useState(0)
52
+ const { data: ticketCategories, isLoading } = useQuery(
53
+ 'ticketCategories',
54
+ () => axios.get(`/service-tickets/categories`).then((res) => res.data),
55
+ )
56
+ // console.log(ticketCategories)
57
+ const [uploadMedia, setUploadMedia] = useState<Media[]>([])
58
+
59
+ const handleClickOpen = () => {
60
+ setOpen(true)
61
+ setState(0)
62
+ }
63
+ const handleClose = () => {
64
+ setOpen(false)
65
+ reset()
66
+ }
67
+ const handleUploadImageChange = (v) => {
68
+ setUploadMedia([
69
+ ...uploadMedia,
70
+ { type: 'image', url: v.url, key: v.key, id: v.id },
71
+ ])
72
+ }
73
+
74
+ const handleUploadDeleteImage = (key) => {
75
+ setUploadMedia((prev) => prev.filter((m) => m.key !== key))
76
+ }
77
+
78
+ const onSubmit = async (formData) => {
79
+ const config: AxiosRequestConfig = {
80
+ method: 'POST',
81
+ url: '/service-tickets',
82
+ data: {
83
+ issueFiles: [uploadMedia[0]?.key],
84
+ ...formData,
85
+ },
86
+ }
87
+
88
+ try {
89
+ await axios(config)
90
+ queryClient.invalidateQueries('ticketCategories')
91
+ toast.success('Ticket Created Successfully')
92
+ handleClose()
93
+ reset()
94
+ setUploadMedia([])
95
+ } catch (error) {
96
+ axiosErrorToast(error)
97
+ }
98
+ }
99
+ if (isLoading) return <Spinner />
100
+
101
+ return (
102
+ <div>
103
+ <StyledDialog
104
+ fullWidth
105
+ onClose={handleClose}
106
+ open={open}
107
+ PaperProps={{
108
+ sx: {
109
+ borderRadius: '10px',
110
+ },
111
+ }}
112
+ >
113
+ {state == 0 ? (
114
+ <>
115
+ <StyledDialogHeader>
116
+ <IconButton onClick={handleClose}>
117
+ <Close sx={{ position: 'absolute', color: 'white', top: 5 }} />
118
+ </IconButton>
119
+ </StyledDialogHeader>
120
+ <DialogContent sx={{ padding: '0' }}>
121
+ <Box>
122
+ <StyledCard>
123
+ <Box
124
+ sx={{ display: 'flex', gap: '10px', alignItems: 'center' }}
125
+ >
126
+ <NotesSharp />
127
+ <Typography variant="h5" sx={{ fontSize: '14px' }}>
128
+ Knowledge Base
129
+ </Typography>
130
+ </Box>
131
+ <ArrowForwardIos sx={{ width: '15px', color: 'blue' }} />
132
+ </StyledCard>
133
+ </Box>
134
+ <Box
135
+ sx={{
136
+ padding: '15px 20px 20px 20px',
137
+ }}
138
+ >
139
+ <Card
140
+ sx={{
141
+ boxShadow: '0px 3px 15px #0000001A',
142
+ padding: '20px 15px',
143
+ marginTop: '30px',
144
+ }}
145
+ >
146
+ <Stack gap={1}>
147
+ <Typography variant="h3">Want to get in touch?</Typography>
148
+ <Typography variant="subtitle2" sx={{ maxWidth: '290px' }}>
149
+ We’re standing by to answer all of your questions right
150
+ now.
151
+ </Typography>
152
+ </Stack>
153
+ <Button
154
+ fullWidth
155
+ sx={{
156
+ borderRadius: '8px',
157
+ marginTop: '15px',
158
+ height: '50px',
159
+ }}
160
+ onClick={() => setState(1)}
161
+ >
162
+ Contact Us
163
+ </Button>
164
+ </Card>
165
+ </Box>
166
+ </DialogContent>
167
+ </>
168
+ ) : (
169
+ <>
170
+ <Box>
171
+ <StyledContactHeader>
172
+ <StyledContactBoxHeader onClick={() => setState(0)}>
173
+ <ArrowBackIosNew sx={{ fontSize: 'small', color: 'white' }} />
174
+ <Typography sx={{ color: 'white' }} variant="h3">
175
+ Contact Us
176
+ </Typography>
177
+ </StyledContactBoxHeader>
178
+ <IconButton onClick={handleClose}>
179
+ <Close
180
+ sx={{
181
+ position: 'absolute',
182
+ color: 'white',
183
+ top: 5,
184
+ right: 2,
185
+ }}
186
+ />
187
+ </IconButton>
188
+ </StyledContactHeader>
189
+ <DialogContent sx={{ height: '500px' }}>
190
+ <StyledDialogCard>
191
+ <form onSubmit={handleSubmit(onSubmit)}>
192
+ <Stack gap={'20px'}>
193
+ <FormTextField
194
+ label={'Your Name'}
195
+ name={'name'}
196
+ control={control}
197
+ />
198
+ <FormTextField
199
+ label={'Subject'}
200
+ name={'subject'}
201
+ control={control}
202
+ />
203
+ <FormTextField
204
+ label={'Description'}
205
+ name={'description'}
206
+ control={control}
207
+ multiline
208
+ rows={5}
209
+ required
210
+ />
211
+ <FormSingleSelect
212
+ label={'Category'}
213
+ name={'categoryId'}
214
+ control={control}
215
+ options={ticketCategories?.map((item) => {
216
+ return { label: item.name, value: item._id }
217
+ })}
218
+ // onChange={(value) => {
219
+ // mutate({ id: value })
220
+ // }}
221
+ required
222
+ />
223
+ <FormSingleSelect
224
+ label={'Service'}
225
+ name={'serviceId'}
226
+ control={control}
227
+ options={
228
+ ticketCategories
229
+ ?.find((item) => item?._id === watch('categoryId'))
230
+ ?.services?.map((item) => ({
231
+ label: item.name,
232
+ value: item._id,
233
+ })) ?? []
234
+ }
235
+ required
236
+ />
237
+
238
+ {/* <StyledContactCard>
239
+ <Screenshot />
240
+ <Typography sx={{ fontSize: '12px' }} variant="h5">
241
+ Take screenshot
242
+ </Typography>
243
+ </StyledContactCard> */}
244
+ {/* <StyledContactCard
245
+ sx={{
246
+ minHeight: '120px',
247
+ flexDirection: 'column',
248
+ border: '2px dashed #0000001A',
249
+ }}
250
+ > */}
251
+ {/* <Upload />
252
+ <Typography sx={{ fontSize: '12px' }} variant="h5">
253
+ Upload files (max 5)
254
+ </Typography>
255
+ <Typography variant="h4" sx={{ fontSize: '10px' }}>
256
+ Click to add or drag & drop files
257
+ </Typography> */}
258
+ {/* category id , service id and priority is required */}
259
+ {!uploadMedia?.length ? (
260
+ <ImageUpload
261
+ onFileUploaded={handleUploadImageChange}
262
+ postUrl="/tickets/upload-issue-file"
263
+ // postUrl="/"
264
+ />
265
+ ) : (
266
+ <MediaRow
267
+ list={uploadMedia}
268
+ onDelete={handleUploadDeleteImage}
269
+ />
270
+ )}
271
+ {/* </StyledContactCard> */}
272
+ <Button
273
+ type="submit"
274
+ fullWidth
275
+ sx={{
276
+ height: '60px',
277
+ borderRadius: '10px',
278
+ fontSize: '18px',
279
+ }}
280
+ >
281
+ Send
282
+ </Button>
283
+ </Stack>
284
+ </form>
285
+ </StyledDialogCard>
286
+ </DialogContent>
287
+ </Box>
288
+ </>
289
+ )}
290
+ </StyledDialog>
291
+
292
+ <IconButton color="secondary">
293
+ <HelpOutline onClick={handleClickOpen} />
294
+ </IconButton>
295
+ </div>
296
+ )
297
+ }
298
+ export default HelpWidget