@campxdev/shared 1.4.9 → 1.4.11

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 (213) hide show
  1. package/antd.customize.less +73 -73
  2. package/exports.ts +18 -18
  3. package/package.json +86 -86
  4. package/src/assets/fonts/avenir/index.ts +2 -2
  5. package/src/assets/fonts/poppins/index.ts +7 -7
  6. package/src/assets/images/index.ts +17 -17
  7. package/src/assets/images/unauth.svg +92 -92
  8. package/src/components/ActionButton.tsx +20 -20
  9. package/src/components/Attachment.tsx +26 -26
  10. package/src/components/AutocompleteSearch/AutocompleteSearch.tsx +57 -57
  11. package/src/components/AutocompleteSearch/index.tsx +1 -1
  12. package/src/components/Breadcrumbs.tsx +72 -72
  13. package/src/components/Card.tsx +98 -98
  14. package/src/components/CardsGrid.tsx +28 -28
  15. package/src/components/ChangePassword.tsx +123 -123
  16. package/src/components/Chips.tsx +81 -81
  17. package/src/components/Detail.tsx +15 -15
  18. package/src/components/DetailsGrid.tsx +52 -52
  19. package/src/components/DividerHeading.tsx +41 -41
  20. package/src/components/DrawerWrapper/DialogWrapper.tsx +67 -67
  21. package/src/components/DrawerWrapper/DrawerTemplate.tsx +53 -53
  22. package/src/components/DrawerWrapper/DrawerWrapper.tsx +53 -53
  23. package/src/components/DropDownButton/DropDownButton.tsx +177 -177
  24. package/src/components/DropDownButton/index.tsx +1 -1
  25. package/src/components/DropDownButton/styles.tsx +56 -56
  26. package/src/components/ErrorBoundary/ErrorBoundary.tsx +28 -28
  27. package/src/components/ErrorBoundary/ErrorFallback.tsx +236 -236
  28. package/src/components/ErrorBoundary/GlobalNetworkLoadingIndicator.tsx +13 -13
  29. package/src/components/ErrorBoundary/index.tsx +1 -1
  30. package/src/components/ErrorBox.tsx +42 -42
  31. package/src/components/FloatingContainer.tsx +33 -33
  32. package/src/components/Form/Form.tsx +156 -156
  33. package/src/components/Form/RenderForm.tsx +188 -188
  34. package/src/components/FullCalendar/Actions.tsx +162 -162
  35. package/src/components/FullCalendar/FullCalendarWrapper.tsx +54 -54
  36. package/src/components/FullScreenLoader.tsx +19 -19
  37. package/src/components/HookForm/AutoCompleteSearch.tsx +113 -113
  38. package/src/components/HookForm/DatePicker.tsx +40 -40
  39. package/src/components/HookForm/DateTimePicker.tsx +47 -47
  40. package/src/components/HookForm/FormLabel.tsx +14 -14
  41. package/src/components/HookForm/MultiCheckbox.tsx +69 -69
  42. package/src/components/HookForm/MultiSelect.tsx +50 -50
  43. package/src/components/HookForm/RadioGroup.tsx +45 -45
  44. package/src/components/HookForm/SingleCheckbox.tsx +34 -34
  45. package/src/components/HookForm/SingleSelect.tsx +46 -46
  46. package/src/components/HookForm/TextField.tsx +40 -40
  47. package/src/components/HookForm/TimePicker.tsx +40 -40
  48. package/src/components/HookForm/index.ts +23 -23
  49. package/src/components/IconButtons/IconButtons.tsx +137 -137
  50. package/src/components/IconButtons/Icons.tsx +268 -268
  51. package/src/components/IconButtons/assets/edit.svg +4 -4
  52. package/src/components/IconButtons/assets/eye.svg +6 -6
  53. package/src/components/IconButtons/assets/trash.svg +7 -7
  54. package/src/components/IconButtons/index.tsx +8 -8
  55. package/src/components/IconLabel.tsx +37 -37
  56. package/src/components/Image/Image.tsx +43 -43
  57. package/src/components/Image/index.tsx +1 -1
  58. package/src/components/ImageUpload.tsx +98 -98
  59. package/src/components/Input/AsyncSearchSelect/AsyncSearchSelect.tsx +216 -216
  60. package/src/components/Input/AsyncSearchSelect/index.tsx +1 -1
  61. package/src/components/Input/AsyncSearchSelect/styles.tsx +105 -105
  62. package/src/components/Input/AutoCompleteSearch.tsx +121 -121
  63. package/src/components/Input/DatePicker.tsx +69 -69
  64. package/src/components/Input/DateRangePicker.tsx +131 -131
  65. package/src/components/Input/DateTimePicker.tsx +75 -75
  66. package/src/components/Input/FormLabel.tsx +21 -21
  67. package/src/components/Input/MultiCheckbox.tsx +64 -64
  68. package/src/components/Input/MultiSelect.tsx +148 -148
  69. package/src/components/Input/RadioGroup.tsx +104 -104
  70. package/src/components/Input/SingleCheckbox.tsx +78 -78
  71. package/src/components/Input/SingleSelect.tsx +104 -104
  72. package/src/components/Input/TextField.tsx +46 -46
  73. package/src/components/Input/TimePicker.tsx +70 -70
  74. package/src/components/Input/index.ts +26 -26
  75. package/src/components/Input/types.ts +3 -3
  76. package/src/components/JsonPreview.tsx +7 -7
  77. package/src/components/LabelValue.tsx +21 -21
  78. package/src/components/Layout/ChangePassword.tsx +49 -49
  79. package/src/components/Layout/Header/AppHeader.tsx +102 -102
  80. package/src/components/Layout/Header/AppsMenu.tsx +98 -98
  81. package/src/components/Layout/Header/CogWheelMenu.tsx +33 -33
  82. package/src/components/Layout/Header/Notification.tsx +13 -13
  83. package/src/components/Layout/Header/UserBox.tsx +81 -81
  84. package/src/components/Layout/Header/applications.ts +91 -91
  85. package/src/components/Layout/Header/assets/campx_square_small.svg +9 -9
  86. package/src/components/Layout/Header/assets/commutex.svg +14 -14
  87. package/src/components/Layout/Header/assets/commutexSmall.svg +11 -11
  88. package/src/components/Layout/Header/assets/enroll.svg +14 -14
  89. package/src/components/Layout/Header/assets/enrollx.svg +14 -14
  90. package/src/components/Layout/Header/assets/exams_small.svg +12 -12
  91. package/src/components/Layout/Header/assets/examsx.svg +14 -14
  92. package/src/components/Layout/Header/assets/hostel_small.svg +13 -13
  93. package/src/components/Layout/Header/assets/hostelx.svg +13 -13
  94. package/src/components/Layout/Header/assets/index.ts +33 -33
  95. package/src/components/Layout/Header/assets/libraryx.svg +12 -12
  96. package/src/components/Layout/Header/assets/pay_small.svg +16 -16
  97. package/src/components/Layout/Header/assets/payx.svg +19 -19
  98. package/src/components/Layout/Header/assets/people_small.svg +9 -9
  99. package/src/components/Layout/Header/assets/peoplex.svg +12 -12
  100. package/src/components/Layout/Header/assets/squarex.svg +12 -12
  101. package/src/components/Layout/Header/icons.tsx +57 -57
  102. package/src/components/Layout/Header/index.tsx +1 -1
  103. package/src/components/Layout/Header/styles.tsx +124 -124
  104. package/src/components/Layout/{Header → Tickets}/HelpWidget/HelpWidget.tsx +273 -273
  105. package/src/components/Layout/{Header → Tickets}/HelpWidget/styles.tsx +94 -94
  106. package/src/components/Layout/Tickets/MyTickets.tsx +72 -72
  107. package/src/components/Layout/Tickets/TicketDetails.tsx +65 -65
  108. package/src/components/Layout/Tickets/TimeLine.tsx +64 -64
  109. package/src/components/Layout/Tickets/index.tsx +1 -1
  110. package/src/components/Layout/Tickets/services.ts +11 -11
  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 +80 -80
  116. package/src/components/MediaRow/MediaRow.tsx +69 -69
  117. package/src/components/MediaRow/index.tsx +1 -1
  118. package/src/components/ModalButtons/DialogButton.tsx +93 -93
  119. package/src/components/ModalButtons/DrawerButton.tsx +85 -85
  120. package/src/components/ModalButtons/index.tsx +4 -4
  121. package/src/components/NoDataIllustration.tsx +32 -32
  122. package/src/components/PageContent.tsx +17 -17
  123. package/src/components/PageHeader.tsx +55 -55
  124. package/src/components/PageNotFound.tsx +26 -26
  125. package/src/components/PopupConfirm/ConfirmContextProvider.tsx +40 -40
  126. package/src/components/PopupConfirm/PopupConfirm.tsx +34 -34
  127. package/src/components/PopupConfirm/index.tsx +1 -1
  128. package/src/components/PopupConfirm/useConfirm.ts +47 -47
  129. package/src/components/Row.tsx +24 -24
  130. package/src/components/SearchBar.tsx +60 -60
  131. package/src/components/SideMenuHeader.tsx +29 -29
  132. package/src/components/SideNav.tsx +168 -168
  133. package/src/components/Spinner.tsx +18 -18
  134. package/src/components/StepsHeader/StepsHeader.tsx +115 -115
  135. package/src/components/StepsHeader/index.tsx +1 -1
  136. package/src/components/StyledTableContainer.tsx +33 -33
  137. package/src/components/SwitchButton.tsx +41 -41
  138. package/src/components/Table.tsx +42 -42
  139. package/src/components/TableComponent/BatchActionsHeader.tsx +58 -58
  140. package/src/components/TableComponent/Icons/index.tsx +50 -50
  141. package/src/components/TableComponent/ReactTable.tsx +293 -293
  142. package/src/components/TableComponent/RenderTableBody.tsx +66 -66
  143. package/src/components/TableComponent/Table.tsx +200 -200
  144. package/src/components/TableComponent/TableFooter/TableFooter.tsx +104 -104
  145. package/src/components/TableComponent/TableFooter/index.tsx +1 -1
  146. package/src/components/TableComponent/TableFooter/styles.tsx +28 -28
  147. package/src/components/TableComponent/index.tsx +1 -1
  148. package/src/components/TableComponent/react-table-config.d.ts +128 -128
  149. package/src/components/TableComponent/styles.tsx +170 -170
  150. package/src/components/TableComponent/types.ts +57 -57
  151. package/src/components/Tabs/Tabs.tsx +52 -52
  152. package/src/components/Tabs/TabsContainer.tsx +50 -50
  153. package/src/components/Tabs/index.tsx +1 -1
  154. package/src/components/Tabs/styles.tsx +55 -55
  155. package/src/components/ToastContainer/ToastContainer.tsx +42 -42
  156. package/src/components/ToastContainer/index.tsx +1 -1
  157. package/src/components/UploadButton/UploadButton.tsx +126 -126
  158. package/src/components/UploadButton/index.tsx +1 -1
  159. package/src/components/UploadButton/types.ts +19 -19
  160. package/src/components/UploadDocument.tsx +108 -108
  161. package/src/components/UploadFileDialog/UploadFileDialog.tsx +238 -238
  162. package/src/components/UploadFileDialog/index.tsx +1 -1
  163. package/src/components/index.ts +87 -84
  164. package/src/config/axios.ts +73 -73
  165. package/src/config/axiosEvaluator.ts +53 -53
  166. package/src/config/axiosXTenant.ts +57 -57
  167. package/src/constants/UIConstants.ts +97 -97
  168. package/src/constants/formValidations.ts +6 -6
  169. package/src/constants/index.ts +5 -5
  170. package/src/constants/isDevelopment.ts +3 -3
  171. package/src/constants/permissions.ts +67 -67
  172. package/src/constants/validateMessages.ts +12 -12
  173. package/src/contexts/LoginFormProvider.tsx +39 -39
  174. package/src/contexts/Providers.tsx +71 -71
  175. package/src/contexts/PublicProviders.tsx +30 -30
  176. package/src/contexts/QueryClientProvider.tsx +22 -22
  177. package/src/hooks/index.ts +3 -3
  178. package/src/hooks/useAuth.ts +96 -96
  179. package/src/hooks/useFetch.ts +53 -53
  180. package/src/hooks/useRouter.ts +31 -31
  181. package/src/layouts/Components/DashBoardMenu.tsx +232 -232
  182. package/src/layouts/Components/icons/index.tsx +403 -403
  183. package/src/layouts/Components/styles.tsx +60 -60
  184. package/src/layouts/ComponentsLayout.tsx +3 -3
  185. package/src/permissions/PageWithPermission.tsx +18 -18
  186. package/src/permissions/PermissionDeniedPage.tsx +16 -16
  187. package/src/permissions/ValidateAccess.tsx +18 -18
  188. package/src/permissions/index.ts +2 -2
  189. package/src/react-app-env.d.ts +1 -1
  190. package/src/shared-state/AssetsStore.ts +15 -15
  191. package/src/shared-state/PermissionsStore.ts +352 -352
  192. package/src/shared-state/UserStore.ts +13 -13
  193. package/src/shared-state/index.ts +4 -4
  194. package/src/theme/App.less +3 -3
  195. package/src/theme/MuiThemeProvider.tsx +13 -13
  196. package/src/theme/customCssBaseline.ts +78 -78
  197. package/src/theme/index.css +75 -75
  198. package/src/theme/muiTheme.ts +560 -560
  199. package/src/theme/theme.d.ts +75 -75
  200. package/src/utils/alphabet.ts +23 -23
  201. package/src/utils/arrayPadEnd.ts +3 -3
  202. package/src/utils/formatCurrency.ts +9 -9
  203. package/src/utils/getUrlParams.ts +5 -5
  204. package/src/utils/index.ts +8 -8
  205. package/src/utils/logout.ts +24 -24
  206. package/src/utils/ordinalSuffixOf.ts +14 -14
  207. package/src/utils/romanize.ts +40 -40
  208. package/src/utils/withLocalization.tsx +11 -11
  209. package/src/utils/withRouteWrapper.tsx +25 -25
  210. package/src/utils/withSuspense.tsx +6 -6
  211. package/styled-components.tsx +60 -60
  212. package/tsconfig.json +21 -21
  213. package/src/components/Layout/Header/assets/commuteX.png +0 -0
@@ -1,53 +1,53 @@
1
- import { createContext, useContext, useState } from 'react'
2
- import { DrawerTemplate } from './DrawerTemplate'
3
-
4
- interface IProps {
5
- title: string
6
- modalType?: 'dialog' | 'drawer'
7
- content: ({ close }: { close: () => void }) => any
8
- }
9
-
10
- type ContextType = (props: IProps) => void
11
-
12
- const DialogContext = createContext<ContextType>(null)
13
-
14
- export default function DialogProvider({ children }) {
15
- const [modal, setModal] = useState({
16
- title: '',
17
- open: false,
18
- content: ({ close }) => null,
19
- modalType: 'drawer',
20
- })
21
-
22
- const handleClose = () => {
23
- setModal({
24
- ...modal,
25
- open: false,
26
- })
27
- }
28
-
29
- const showModal = (props) => {
30
- setModal({
31
- ...modal,
32
- open: true,
33
- title: props.title,
34
- content: props.content,
35
- // modalType: props.modalType ?? 'drawer',
36
- })
37
- }
38
-
39
- return (
40
- <DialogContext.Provider value={showModal}>
41
- {children}
42
- <>
43
- <DrawerTemplate
44
- handleClose={handleClose}
45
- modal={modal}
46
- setModal={setModal}
47
- />
48
- </>
49
- </DialogContext.Provider>
50
- )
51
- }
52
-
53
- export const useModal = () => useContext(DialogContext)
1
+ import { createContext, useContext, useState } from 'react'
2
+ import { DrawerTemplate } from './DrawerTemplate'
3
+
4
+ interface IProps {
5
+ title: string
6
+ modalType?: 'dialog' | 'drawer'
7
+ content: ({ close }: { close: () => void }) => any
8
+ }
9
+
10
+ type ContextType = (props: IProps) => void
11
+
12
+ const DialogContext = createContext<ContextType>(null)
13
+
14
+ export default function DialogProvider({ children }) {
15
+ const [modal, setModal] = useState({
16
+ title: '',
17
+ open: false,
18
+ content: ({ close }) => null,
19
+ modalType: 'drawer',
20
+ })
21
+
22
+ const handleClose = () => {
23
+ setModal({
24
+ ...modal,
25
+ open: false,
26
+ })
27
+ }
28
+
29
+ const showModal = (props) => {
30
+ setModal({
31
+ ...modal,
32
+ open: true,
33
+ title: props.title,
34
+ content: props.content,
35
+ // modalType: props.modalType ?? 'drawer',
36
+ })
37
+ }
38
+
39
+ return (
40
+ <DialogContext.Provider value={showModal}>
41
+ {children}
42
+ <>
43
+ <DrawerTemplate
44
+ handleClose={handleClose}
45
+ modal={modal}
46
+ setModal={setModal}
47
+ />
48
+ </>
49
+ </DialogContext.Provider>
50
+ )
51
+ }
52
+
53
+ export const useModal = () => useContext(DialogContext)
@@ -1,177 +1,177 @@
1
- import { KeyboardArrowDown, MoreVert } from '@mui/icons-material'
2
- import {
3
- ButtonProps,
4
- CircularProgress,
5
- IconButtonProps,
6
- ListItemIcon,
7
- ListItemText,
8
- Menu,
9
- MenuItem,
10
- MenuListProps,
11
- MenuProps,
12
- } from '@mui/material'
13
- import { ReactNode, useState } from 'react'
14
- import {
15
- StyledDropDownButton,
16
- StyledIconButton,
17
- StyledMenu,
18
- StyledMenuItem,
19
- } from './styles'
20
-
21
- type MenuItem =
22
- | {
23
- label: string | ReactNode
24
- icon?: ReactNode
25
- onClick: (props?: any) => any
26
- }
27
- | { customButton?: ReactNode }
28
-
29
- interface DropDownButtonProps {
30
- icon?: {
31
- icon: ReactNode
32
- iconProps?: IconButtonProps
33
- outlined?: boolean
34
- }
35
- button?: {
36
- label?: string
37
- buttonProps?: ButtonProps
38
- }
39
- anchor?: (props: { open: () => void }) => ReactNode
40
- loading?: boolean
41
- menu: MenuItem[]
42
- menuProps?: Omit<MenuProps, 'open'>
43
- menuListProps?: MenuListProps
44
- }
45
- const defaultIcon = {
46
- icon: <MoreVert color="primary" />,
47
- outlined: true,
48
- }
49
-
50
- const RenderAnchor = ({ button, icon, handleClick, loading, anchor }) => {
51
- if (anchor) return <>{anchor({ open: handleClick })}</>
52
-
53
- if (button)
54
- return (
55
- <StyledDropDownButton
56
- onClick={handleClick}
57
- variant="outlined"
58
- disabled={loading}
59
- endIcon={
60
- loading ? (
61
- <CircularProgress size="20px" thickness={1.7} />
62
- ) : (
63
- <KeyboardArrowDown />
64
- )
65
- }
66
- {...button?.buttonProps}
67
- >
68
- {button?.label}
69
- </StyledDropDownButton>
70
- )
71
-
72
- if (!button && !anchor) {
73
- return (
74
- <StyledIconButton
75
- outlined={icon?.outlined ?? false}
76
- onClick={handleClick}
77
- {...icon.iconProps}
78
- >
79
- {icon.icon}
80
- </StyledIconButton>
81
- )
82
- }
83
- }
84
-
85
- const DropDownButton = ({
86
- button,
87
- icon = defaultIcon,
88
- menu = [],
89
- menuProps,
90
- menuListProps,
91
- loading = false,
92
- anchor,
93
- }: DropDownButtonProps) => {
94
- const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)
95
- const open = Boolean(anchorEl)
96
-
97
- const handleClick = (event: any) => {
98
- setAnchorEl(event.currentTarget)
99
- }
100
-
101
- const handleClose = () => {
102
- setAnchorEl(null)
103
- }
104
-
105
- return (
106
- <>
107
- <RenderAnchor
108
- anchor={anchor}
109
- loading={loading}
110
- button={button}
111
- icon={icon}
112
- handleClick={handleClick}
113
- />
114
- <StyledMenu
115
- elevation={0}
116
- id="basic-menu"
117
- anchorEl={anchorEl}
118
- open={open}
119
- onClose={handleClose}
120
- PaperProps={{
121
- elevation: 0,
122
- }}
123
- MenuListProps={{ ...menuListProps }}
124
- anchorOrigin={{
125
- vertical: 'bottom',
126
- horizontal: 'right',
127
- }}
128
- transitionDuration={150}
129
- transformOrigin={{
130
- vertical: 'top',
131
- horizontal: 'right',
132
- }}
133
- {...menuProps}
134
- >
135
- <RenderMenuItems menu={menu} handleClose={handleClose} />
136
- </StyledMenu>
137
- </>
138
- )
139
- }
140
-
141
- DropDownButton.MenuItem = ({ icon, label, ...props }) => {
142
- return (
143
- <StyledMenuItem
144
- sx={{ minWidth: '120px', width: '100%', ...props?.sx }}
145
- {...props}
146
- >
147
- {icon && <ListItemIcon>{icon}</ListItemIcon>}
148
- <ListItemText>{label}</ListItemText>
149
- </StyledMenuItem>
150
- )
151
- }
152
-
153
- export default DropDownButton
154
-
155
- const RenderMenuItems = ({ menu, handleClose }) => {
156
- return (
157
- <>
158
- {menu.map((item, index) => (
159
- <>
160
- {item?.customButton ? (
161
- item.customButton
162
- ) : (
163
- <DropDownButton.MenuItem
164
- icon={item?.icon}
165
- label={item?.label}
166
- key={index}
167
- onClick={() => {
168
- handleClose()
169
- item.onClick()
170
- }}
171
- />
172
- )}
173
- </>
174
- ))}
175
- </>
176
- )
177
- }
1
+ import { KeyboardArrowDown, MoreVert } from '@mui/icons-material'
2
+ import {
3
+ ButtonProps,
4
+ CircularProgress,
5
+ IconButtonProps,
6
+ ListItemIcon,
7
+ ListItemText,
8
+ Menu,
9
+ MenuItem,
10
+ MenuListProps,
11
+ MenuProps,
12
+ } from '@mui/material'
13
+ import { ReactNode, useState } from 'react'
14
+ import {
15
+ StyledDropDownButton,
16
+ StyledIconButton,
17
+ StyledMenu,
18
+ StyledMenuItem,
19
+ } from './styles'
20
+
21
+ type MenuItem =
22
+ | {
23
+ label: string | ReactNode
24
+ icon?: ReactNode
25
+ onClick: (props?: any) => any
26
+ }
27
+ | { customButton?: ReactNode }
28
+
29
+ interface DropDownButtonProps {
30
+ icon?: {
31
+ icon: ReactNode
32
+ iconProps?: IconButtonProps
33
+ outlined?: boolean
34
+ }
35
+ button?: {
36
+ label?: string
37
+ buttonProps?: ButtonProps
38
+ }
39
+ anchor?: (props: { open: () => void }) => ReactNode
40
+ loading?: boolean
41
+ menu: MenuItem[]
42
+ menuProps?: Omit<MenuProps, 'open'>
43
+ menuListProps?: MenuListProps
44
+ }
45
+ const defaultIcon = {
46
+ icon: <MoreVert color="primary" />,
47
+ outlined: true,
48
+ }
49
+
50
+ const RenderAnchor = ({ button, icon, handleClick, loading, anchor }) => {
51
+ if (anchor) return <>{anchor({ open: handleClick })}</>
52
+
53
+ if (button)
54
+ return (
55
+ <StyledDropDownButton
56
+ onClick={handleClick}
57
+ variant="outlined"
58
+ disabled={loading}
59
+ endIcon={
60
+ loading ? (
61
+ <CircularProgress size="20px" thickness={1.7} />
62
+ ) : (
63
+ <KeyboardArrowDown />
64
+ )
65
+ }
66
+ {...button?.buttonProps}
67
+ >
68
+ {button?.label}
69
+ </StyledDropDownButton>
70
+ )
71
+
72
+ if (!button && !anchor) {
73
+ return (
74
+ <StyledIconButton
75
+ outlined={icon?.outlined ?? false}
76
+ onClick={handleClick}
77
+ {...icon.iconProps}
78
+ >
79
+ {icon.icon}
80
+ </StyledIconButton>
81
+ )
82
+ }
83
+ }
84
+
85
+ const DropDownButton = ({
86
+ button,
87
+ icon = defaultIcon,
88
+ menu = [],
89
+ menuProps,
90
+ menuListProps,
91
+ loading = false,
92
+ anchor,
93
+ }: DropDownButtonProps) => {
94
+ const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)
95
+ const open = Boolean(anchorEl)
96
+
97
+ const handleClick = (event: any) => {
98
+ setAnchorEl(event.currentTarget)
99
+ }
100
+
101
+ const handleClose = () => {
102
+ setAnchorEl(null)
103
+ }
104
+
105
+ return (
106
+ <>
107
+ <RenderAnchor
108
+ anchor={anchor}
109
+ loading={loading}
110
+ button={button}
111
+ icon={icon}
112
+ handleClick={handleClick}
113
+ />
114
+ <StyledMenu
115
+ elevation={0}
116
+ id="basic-menu"
117
+ anchorEl={anchorEl}
118
+ open={open}
119
+ onClose={handleClose}
120
+ PaperProps={{
121
+ elevation: 0,
122
+ }}
123
+ MenuListProps={{ ...menuListProps }}
124
+ anchorOrigin={{
125
+ vertical: 'bottom',
126
+ horizontal: 'right',
127
+ }}
128
+ transitionDuration={150}
129
+ transformOrigin={{
130
+ vertical: 'top',
131
+ horizontal: 'right',
132
+ }}
133
+ {...menuProps}
134
+ >
135
+ <RenderMenuItems menu={menu} handleClose={handleClose} />
136
+ </StyledMenu>
137
+ </>
138
+ )
139
+ }
140
+
141
+ DropDownButton.MenuItem = ({ icon, label, ...props }) => {
142
+ return (
143
+ <StyledMenuItem
144
+ sx={{ minWidth: '120px', width: '100%', ...props?.sx }}
145
+ {...props}
146
+ >
147
+ {icon && <ListItemIcon>{icon}</ListItemIcon>}
148
+ <ListItemText>{label}</ListItemText>
149
+ </StyledMenuItem>
150
+ )
151
+ }
152
+
153
+ export default DropDownButton
154
+
155
+ const RenderMenuItems = ({ menu, handleClose }) => {
156
+ return (
157
+ <>
158
+ {menu.map((item, index) => (
159
+ <>
160
+ {item?.customButton ? (
161
+ item.customButton
162
+ ) : (
163
+ <DropDownButton.MenuItem
164
+ icon={item?.icon}
165
+ label={item?.label}
166
+ key={index}
167
+ onClick={() => {
168
+ handleClose()
169
+ item.onClick()
170
+ }}
171
+ />
172
+ )}
173
+ </>
174
+ ))}
175
+ </>
176
+ )
177
+ }
@@ -1 +1 @@
1
- export { default } from './DropDownButton'
1
+ export { default } from './DropDownButton'
@@ -1,56 +1,56 @@
1
- import { Button, IconButton, Menu, MenuItem, styled } from '@mui/material'
2
-
3
- export const StyledIconButton = styled(IconButton, {
4
- shouldForwardProp: (prop) => prop !== 'outlined',
5
- })<{ outlined?: boolean; size: 'small' | 'regular' }>(
6
- ({ theme, outlined, size }) => ({
7
- ...(outlined && {
8
- border: `1px solid ${theme.palette.primary.main}`,
9
- borderRadius: '5px',
10
- height: '40px',
11
- width: '40px',
12
- ...(size === 'small' && {}),
13
- }),
14
- }),
15
- )
16
-
17
- export const StyledMenuItem = styled(MenuItem)(({}) => ({
18
- display: 'flex',
19
- alignItems: 'center',
20
- height: '60px',
21
- '& .MuiListItemIcon-root': {
22
- minWidth: '24px',
23
- },
24
- '& .MuiSvgIcon-root': {
25
- height: '18px',
26
- width: '18px',
27
- },
28
- }))
29
-
30
- export const StyledDropDownButton = styled(Button)(({}) => ({
31
- padding: '0 15px',
32
- minWidth: '180px',
33
- justifyContent: 'space-between',
34
- }))
35
-
36
- export const StyledMenu = styled(Menu)(({ theme }) => ({
37
- '& .MuiPaper-root': {
38
- borderRadius: '10px',
39
- border: '1px solid #1212121A',
40
- marginTop: '10px',
41
- boxShadow: '0px 4px 16px #0000000F',
42
- },
43
- '& .MuiList-root': {
44
- minWidth: '240px',
45
- padding: 0,
46
- '& li': {
47
- borderBottom: theme.borders.grayLight,
48
- ':hover': {
49
- backgroundColor: 'rgba(0, 0, 0, 0.025)',
50
- },
51
- },
52
- '& > :last-child': {
53
- borderBottom: 'none',
54
- },
55
- },
56
- }))
1
+ import { Button, IconButton, Menu, MenuItem, styled } from '@mui/material'
2
+
3
+ export const StyledIconButton = styled(IconButton, {
4
+ shouldForwardProp: (prop) => prop !== 'outlined',
5
+ })<{ outlined?: boolean; size: 'small' | 'regular' }>(
6
+ ({ theme, outlined, size }) => ({
7
+ ...(outlined && {
8
+ border: `1px solid ${theme.palette.primary.main}`,
9
+ borderRadius: '5px',
10
+ height: '40px',
11
+ width: '40px',
12
+ ...(size === 'small' && {}),
13
+ }),
14
+ }),
15
+ )
16
+
17
+ export const StyledMenuItem = styled(MenuItem)(({}) => ({
18
+ display: 'flex',
19
+ alignItems: 'center',
20
+ height: '60px',
21
+ '& .MuiListItemIcon-root': {
22
+ minWidth: '24px',
23
+ },
24
+ '& .MuiSvgIcon-root': {
25
+ height: '18px',
26
+ width: '18px',
27
+ },
28
+ }))
29
+
30
+ export const StyledDropDownButton = styled(Button)(({}) => ({
31
+ padding: '0 15px',
32
+ minWidth: '180px',
33
+ justifyContent: 'space-between',
34
+ }))
35
+
36
+ export const StyledMenu = styled(Menu)(({ theme }) => ({
37
+ '& .MuiPaper-root': {
38
+ borderRadius: '10px',
39
+ border: '1px solid #1212121A',
40
+ marginTop: '10px',
41
+ boxShadow: '0px 4px 16px #0000000F',
42
+ },
43
+ '& .MuiList-root': {
44
+ minWidth: '240px',
45
+ padding: 0,
46
+ '& li': {
47
+ borderBottom: theme.borders.grayLight,
48
+ ':hover': {
49
+ backgroundColor: 'rgba(0, 0, 0, 0.025)',
50
+ },
51
+ },
52
+ '& > :last-child': {
53
+ borderBottom: 'none',
54
+ },
55
+ },
56
+ }))
@@ -1,28 +1,28 @@
1
- import { ReactNode } from 'react'
2
- import { ErrorBoundary as ReactErrorBoundary } from 'react-error-boundary'
3
- import { QueryErrorResetBoundary } from 'react-query'
4
- import { useLocation } from 'react-router-dom'
5
- import ErrorFallback from './ErrorFallback'
6
-
7
- export default function ErrorBoundary({
8
- children,
9
- resetKey,
10
- }: {
11
- children: ReactNode
12
- resetKey?: string
13
- }) {
14
- const location = useLocation()
15
- return (
16
- <QueryErrorResetBoundary>
17
- {({ reset }) => (
18
- <ReactErrorBoundary
19
- key={resetKey ?? location?.pathname}
20
- fallbackRender={ErrorFallback}
21
- onReset={reset}
22
- >
23
- {children}
24
- </ReactErrorBoundary>
25
- )}
26
- </QueryErrorResetBoundary>
27
- )
28
- }
1
+ import { ReactNode } from 'react'
2
+ import { ErrorBoundary as ReactErrorBoundary } from 'react-error-boundary'
3
+ import { QueryErrorResetBoundary } from 'react-query'
4
+ import { useLocation } from 'react-router-dom'
5
+ import ErrorFallback from './ErrorFallback'
6
+
7
+ export default function ErrorBoundary({
8
+ children,
9
+ resetKey,
10
+ }: {
11
+ children: ReactNode
12
+ resetKey?: string
13
+ }) {
14
+ const location = useLocation()
15
+ return (
16
+ <QueryErrorResetBoundary>
17
+ {({ reset }) => (
18
+ <ReactErrorBoundary
19
+ key={resetKey ?? location?.pathname}
20
+ fallbackRender={ErrorFallback}
21
+ onReset={reset}
22
+ >
23
+ {children}
24
+ </ReactErrorBoundary>
25
+ )}
26
+ </QueryErrorResetBoundary>
27
+ )
28
+ }