@campxdev/shared 1.0.5 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/.eslintignore +3 -3
  2. package/.eslintrc.js +33 -33
  3. package/.prettierrc +10 -10
  4. package/antd.customize.less +73 -73
  5. package/exports.ts +17 -17
  6. package/package.json +82 -82
  7. package/publish.sh +1 -1
  8. package/src/assets/fonts/avenir/index.ts +2 -2
  9. package/src/assets/fonts/poppins/index.ts +7 -7
  10. package/src/assets/images/index.ts +17 -17
  11. package/src/assets/images/unauth.svg +92 -92
  12. package/src/components/ActionButton.tsx +28 -28
  13. package/src/components/Attachment.tsx +26 -26
  14. package/src/components/AutocompleteSearch/AutocompleteSearch.tsx +57 -57
  15. package/src/components/AutocompleteSearch/index.tsx +1 -1
  16. package/src/components/Breadcrumbs.tsx +72 -72
  17. package/src/components/Card.tsx +98 -98
  18. package/src/components/CardsGrid.tsx +28 -28
  19. package/src/components/ChangePassword.tsx +164 -164
  20. package/src/components/Chips.tsx +81 -81
  21. package/src/components/Detail.tsx +15 -15
  22. package/src/components/DetailsGrid.tsx +52 -52
  23. package/src/components/DividerHeading.tsx +41 -41
  24. package/src/components/DrawerWrapper/DialogWrapper.tsx +67 -67
  25. package/src/components/DrawerWrapper/DrawerTemplate.tsx +53 -53
  26. package/src/components/DrawerWrapper/DrawerWrapper.tsx +53 -53
  27. package/src/components/DropDownButton.tsx +194 -194
  28. package/src/components/ErrorBoundary/ErrorBoundary.tsx +28 -28
  29. package/src/components/ErrorBoundary/ErrorFallback.tsx +236 -236
  30. package/src/components/ErrorBoundary/GlobalNetworkLoadingIndicator.tsx +13 -13
  31. package/src/components/ErrorBoundary/index.tsx +1 -1
  32. package/src/components/ErrorBox.tsx +42 -42
  33. package/src/components/FloatingContainer.tsx +33 -33
  34. package/src/components/Form/Form.tsx +156 -156
  35. package/src/components/Form/RenderForm.tsx +188 -188
  36. package/src/components/FullCalendar/Actions.tsx +162 -162
  37. package/src/components/FullCalendar/FullCalendarWrapper.tsx +54 -54
  38. package/src/components/FullScreenLoader.tsx +19 -19
  39. package/src/components/HookForm/AutoCompleteSearch.tsx +113 -113
  40. package/src/components/HookForm/DatePicker.tsx +65 -65
  41. package/src/components/HookForm/DateTimePicker.tsx +70 -70
  42. package/src/components/HookForm/FormLabel.tsx +14 -14
  43. package/src/components/HookForm/MultiCheckbox.tsx +82 -82
  44. package/src/components/HookForm/MultiSelect.tsx +100 -100
  45. package/src/components/HookForm/RadioGroup.tsx +106 -106
  46. package/src/components/HookForm/SingleCheckbox.tsx +46 -46
  47. package/src/components/HookForm/SingleSelect.tsx +94 -94
  48. package/src/components/HookForm/TextField.tsx +74 -74
  49. package/src/components/HookForm/TimePicker.tsx +82 -82
  50. package/src/components/HookForm/index.ts +23 -23
  51. package/src/components/IconButtons/IconButtons.tsx +137 -137
  52. package/src/components/IconButtons/Icons.tsx +268 -268
  53. package/src/components/IconButtons/assets/edit.svg +4 -4
  54. package/src/components/IconButtons/assets/eye.svg +6 -6
  55. package/src/components/IconButtons/assets/trash.svg +7 -7
  56. package/src/components/IconButtons/index.tsx +8 -8
  57. package/src/components/IconLabel.tsx +37 -37
  58. package/src/components/Image/Image.tsx +43 -43
  59. package/src/components/Image/index.tsx +1 -1
  60. package/src/components/ImageUpload.tsx +98 -98
  61. package/src/components/Input/AutoCompleteSearch.tsx +113 -113
  62. package/src/components/Input/DatePicker.tsx +60 -60
  63. package/src/components/Input/DateRangePicker.tsx +131 -131
  64. package/src/components/Input/DateTimePicker.tsx +70 -70
  65. package/src/components/Input/FormLabel.tsx +14 -14
  66. package/src/components/Input/MultiCheckbox.tsx +79 -79
  67. package/src/components/Input/MultiSelect.tsx +52 -52
  68. package/src/components/Input/RadioGroup.tsx +61 -61
  69. package/src/components/Input/SingleCheckbox.tsx +23 -23
  70. package/src/components/Input/SingleSelect.tsx +126 -126
  71. package/src/components/Input/TextField.tsx +50 -50
  72. package/src/components/Input/TimePicker.tsx +82 -82
  73. package/src/components/Input/index.ts +26 -26
  74. package/src/components/JsonPreview/JsonPreview.tsx +7 -7
  75. package/src/components/JsonPreview/index.tsx +1 -1
  76. package/src/components/LabelValue/LabelValue.tsx +21 -21
  77. package/src/components/LabelValue/index.tsx +1 -1
  78. package/src/components/Layout/ChangePassword.tsx +49 -49
  79. package/src/components/Layout/Header/AppHeader.tsx +124 -124
  80. package/src/components/Layout/Header/AppsMenu.tsx +92 -92
  81. package/src/components/Layout/Header/CogWheelMenu.tsx +33 -33
  82. package/src/components/Layout/Header/HelpWidget/HelpWidget.tsx +298 -298
  83. package/src/components/Layout/Header/HelpWidget/styles.tsx +94 -94
  84. package/src/components/Layout/Header/Notification.tsx +13 -13
  85. package/src/components/Layout/Header/UserBox.tsx +90 -90
  86. package/src/components/Layout/Header/applications.ts +90 -90
  87. package/src/components/Layout/Header/assets/campx_square_small.svg +9 -9
  88. package/src/components/Layout/Header/assets/commutex.svg +14 -14
  89. package/src/components/Layout/Header/assets/commutexSmall.svg +11 -11
  90. package/src/components/Layout/Header/assets/enroll.svg +14 -14
  91. package/src/components/Layout/Header/assets/enrollx.svg +14 -14
  92. package/src/components/Layout/Header/assets/exams_small.svg +12 -12
  93. package/src/components/Layout/Header/assets/examsx.svg +14 -14
  94. package/src/components/Layout/Header/assets/hostel_small.svg +13 -13
  95. package/src/components/Layout/Header/assets/hostelx.svg +13 -13
  96. package/src/components/Layout/Header/assets/index.ts +33 -33
  97. package/src/components/Layout/Header/assets/libraryx.svg +12 -12
  98. package/src/components/Layout/Header/assets/pay_small.svg +16 -16
  99. package/src/components/Layout/Header/assets/payx.svg +19 -19
  100. package/src/components/Layout/Header/assets/people_small.svg +9 -9
  101. package/src/components/Layout/Header/assets/peoplex.svg +12 -12
  102. package/src/components/Layout/Header/assets/squarex.svg +12 -12
  103. package/src/components/Layout/Header/icons.tsx +57 -57
  104. package/src/components/Layout/Header/index.tsx +1 -1
  105. package/src/components/Layout/Header/styles.tsx +98 -98
  106. package/src/components/Layout/Tickets/MyTickets.tsx +74 -74
  107. package/src/components/Layout/Tickets/Services.tsx +6 -6
  108. package/src/components/Layout/Tickets/TicketDetails.tsx +66 -66
  109. package/src/components/Layout/Tickets/TimeLine.tsx +64 -64
  110. package/src/components/Layout/Tickets/index.tsx +1 -1
  111. package/src/components/Layout/Tickets/styles.tsx +136 -136
  112. package/src/components/LayoutWrapper.tsx +25 -25
  113. package/src/components/LinearProgress.tsx +19 -19
  114. package/src/components/ListItemButton.tsx +95 -95
  115. package/src/components/LoginForm.tsx +105 -103
  116. package/src/components/MediaRow/MediaRow.tsx +69 -69
  117. package/src/components/MediaRow/index.tsx +1 -1
  118. package/src/components/MenuButton.tsx +103 -103
  119. package/src/components/ModalButtons/DialogButton.tsx +88 -88
  120. package/src/components/ModalButtons/DrawerButton.tsx +89 -89
  121. package/src/components/ModalButtons/index.tsx +4 -4
  122. package/src/components/NoDataIllustration/NoDataIllustration.tsx +32 -32
  123. package/src/components/NoDataIllustration/index.tsx +1 -1
  124. package/src/components/PageContent.tsx +17 -17
  125. package/src/components/PageHeader.tsx +52 -52
  126. package/src/components/PageNotFound.tsx +26 -26
  127. package/src/components/PopupConfirm/ConfirmContextProvider.tsx +40 -40
  128. package/src/components/PopupConfirm/PopupConfirm.tsx +34 -34
  129. package/src/components/PopupConfirm/index.tsx +1 -1
  130. package/src/components/PopupConfirm/useConfirm.ts +47 -47
  131. package/src/components/Router.tsx +7 -7
  132. package/src/components/Row/Row.tsx +24 -24
  133. package/src/components/Row/index.tsx +1 -1
  134. package/src/components/SearchBar/SearchBar.tsx +53 -53
  135. package/src/components/SearchBar/index.tsx +1 -1
  136. package/src/components/SideMenuHeader.tsx +29 -29
  137. package/src/components/SideNav.tsx +168 -168
  138. package/src/components/Spinner.tsx +18 -18
  139. package/src/components/StepsHeader/StepsHeader.tsx +115 -115
  140. package/src/components/StepsHeader/index.tsx +1 -1
  141. package/src/components/StyledTableContainer.tsx +33 -33
  142. package/src/components/SwitchButton/SwitchButton.tsx +41 -41
  143. package/src/components/SwitchButton/index.tsx +1 -1
  144. package/src/components/Table.tsx +42 -42
  145. package/src/components/TableComponent/BatchActionsHeader.tsx +58 -58
  146. package/src/components/TableComponent/Icons/index.tsx +50 -50
  147. package/src/components/TableComponent/ReactTable.tsx +293 -293
  148. package/src/components/TableComponent/RenderTableBody.tsx +64 -64
  149. package/src/components/TableComponent/TableFooter/TableFooter.tsx +102 -102
  150. package/src/components/TableComponent/TableFooter/index.tsx +1 -1
  151. package/src/components/TableComponent/TableFooter/styles.tsx +28 -28
  152. package/src/components/TableComponent/index.tsx +226 -226
  153. package/src/components/TableComponent/react-table-config.d.ts +128 -128
  154. package/src/components/TableComponent/styles.tsx +173 -173
  155. package/src/components/TableComponent/types.ts +57 -57
  156. package/src/components/Tabs/Tabs.tsx +52 -52
  157. package/src/components/Tabs/TabsContainer.tsx +50 -50
  158. package/src/components/Tabs/index.tsx +1 -1
  159. package/src/components/Tabs/styles.tsx +55 -55
  160. package/src/components/ToastContainer/ToastContainer.tsx +42 -42
  161. package/src/components/ToastContainer/index.tsx +1 -1
  162. package/src/components/UploadButton/UploadButton.tsx +126 -126
  163. package/src/components/UploadButton/index.tsx +1 -1
  164. package/src/components/UploadButton/types.ts +19 -19
  165. package/src/components/UploadDocument/UploadDocument.tsx +108 -108
  166. package/src/components/UploadDocument/index.tsx +1 -1
  167. package/src/components/UploadFileDialog/UploadFileDialog.tsx +238 -238
  168. package/src/components/UploadFileDialog/index.tsx +1 -1
  169. package/src/components/index.ts +86 -86
  170. package/src/config/axios.ts +74 -74
  171. package/src/config/axiosXTenant.ts +57 -57
  172. package/src/constants/UIConstants.ts +97 -97
  173. package/src/constants/formValidations.ts +6 -6
  174. package/src/constants/index.ts +5 -5
  175. package/src/constants/isDevelopment.ts +3 -3
  176. package/src/constants/permissions.ts +67 -67
  177. package/src/constants/validateMessages.ts +12 -12
  178. package/src/contexts/LoginFormProvider.tsx +39 -39
  179. package/src/contexts/Providers.tsx +60 -59
  180. package/src/contexts/PublicProviders.tsx +30 -30
  181. package/src/contexts/QueryClientProvider.tsx +22 -22
  182. package/src/hooks/index.ts +3 -3
  183. package/src/hooks/useAppInit.ts +33 -33
  184. package/src/hooks/useAuth.ts +96 -92
  185. package/src/hooks/useFetch.ts +53 -53
  186. package/src/hooks/useRouter.ts +31 -31
  187. package/src/layouts/Components/DashBoardMenu.tsx +232 -232
  188. package/src/layouts/Components/icons/index.tsx +403 -403
  189. package/src/layouts/Components/styles.tsx +60 -60
  190. package/src/layouts/ComponentsLayout.tsx +3 -3
  191. package/src/permissions/PageWithPermission.tsx +18 -18
  192. package/src/permissions/PermissionDeniedPage.tsx +16 -16
  193. package/src/permissions/ValidateAccess.tsx +18 -18
  194. package/src/permissions/index.ts +2 -3
  195. package/src/react-app-env.d.ts +1 -1
  196. package/src/shared-state/AssetsStore.ts +15 -15
  197. package/src/{permissions → shared-state}/PermissionsStore.ts +352 -352
  198. package/src/shared-state/UserStore.ts +13 -13
  199. package/src/shared-state/index.ts +4 -3
  200. package/src/theme/App.less +3 -3
  201. package/src/theme/MuiThemeProvider.tsx +13 -13
  202. package/src/theme/customCssBaseline.ts +78 -78
  203. package/src/theme/index.css +75 -75
  204. package/src/theme/muiTheme.ts +490 -490
  205. package/src/theme/theme.d.ts +75 -75
  206. package/src/utils/alphabet.ts +23 -23
  207. package/src/utils/arrayPadEnd.ts +3 -3
  208. package/src/utils/formatCurrency.ts +9 -9
  209. package/src/utils/getUrlParams.ts +5 -5
  210. package/src/utils/index.ts +8 -8
  211. package/src/utils/logout.ts +24 -24
  212. package/src/utils/ordinalSuffixOf.ts +14 -14
  213. package/src/utils/romanize.ts +40 -40
  214. package/src/utils/withLocalization.tsx +11 -11
  215. package/src/utils/withRouteWrapper.tsx +25 -25
  216. package/src/utils/withSuspense.tsx +6 -6
  217. package/styled-components.tsx +60 -60
  218. package/todo.md +20 -20
  219. package/tsconfig.json +21 -21
  220. package/src/components/Layout/Header/assets/commuteX.png +0 -0
@@ -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