@campxdev/shared 1.8.4 → 1.8.5-0.alpha-1

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 (233) hide show
  1. package/antd.customize.less +73 -73
  2. package/exports.ts +19 -19
  3. package/package.json +86 -86
  4. package/src/assets/fonts/avenir/index.ts +13 -13
  5. package/src/assets/fonts/poppins/index.ts +18 -18
  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/ApplicationProfile/ApplicationProfile.tsx +342 -0
  10. package/src/components/ApplicationProfile/Service.ts +68 -0
  11. package/src/components/ApplicationProfile/UserProfileRelation.tsx +174 -0
  12. package/src/components/ApplicationProfile/index.tsx +1 -0
  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 +123 -123
  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/AnchorElement.tsx +44 -44
  28. package/src/components/DropDownButton/DropDownButton.tsx +184 -184
  29. package/src/components/DropDownButton/DropdownMenuItem.tsx +122 -110
  30. package/src/components/DropDownButton/index.tsx +1 -1
  31. package/src/components/DropDownButton/styles.tsx +59 -59
  32. package/src/components/ErrorBoundary/ErrorBoundary.tsx +33 -28
  33. package/src/components/ErrorBoundary/ErrorFallback.tsx +241 -236
  34. package/src/components/ErrorBoundary/GlobalNetworkLoadingIndicator.tsx +13 -13
  35. package/src/components/ErrorBoundary/index.tsx +1 -1
  36. package/src/components/ErrorBox.tsx +42 -42
  37. package/src/components/ExcelToJsonInput/ExcelJsonUpload.tsx +50 -50
  38. package/src/components/ExcelToJsonInput/ExcelToJsonInput.tsx +57 -57
  39. package/src/components/ExcelToJsonInput/index.tsx +1 -1
  40. package/src/components/FilterComponents/FilterButton.tsx +56 -56
  41. package/src/components/FilterComponents/SearchBar.tsx +45 -45
  42. package/src/components/FloatingContainer.tsx +33 -33
  43. package/src/components/Form/Form.tsx +147 -147
  44. package/src/components/Form/RenderForm.tsx +189 -189
  45. package/src/components/FullScreenLoader.tsx +19 -19
  46. package/src/components/HookForm/AutoCompleteSearch.tsx +113 -113
  47. package/src/components/HookForm/DatePicker.tsx +40 -40
  48. package/src/components/HookForm/DateTimePicker.tsx +47 -47
  49. package/src/components/HookForm/FormLabel.tsx +14 -14
  50. package/src/components/HookForm/MultiCheckbox.tsx +69 -69
  51. package/src/components/HookForm/MultiSelect.tsx +61 -53
  52. package/src/components/HookForm/RadioGroup.tsx +47 -47
  53. package/src/components/HookForm/SingleCheckbox.tsx +34 -34
  54. package/src/components/HookForm/SingleSelect.tsx +46 -46
  55. package/src/components/HookForm/TextField.tsx +40 -40
  56. package/src/components/HookForm/TimePicker.tsx +40 -40
  57. package/src/components/HookForm/index.ts +23 -23
  58. package/src/components/IconButtons/IconButtons.tsx +137 -137
  59. package/src/components/IconButtons/Icons.tsx +268 -268
  60. package/src/components/IconButtons/assets/edit.svg +4 -4
  61. package/src/components/IconButtons/assets/eye.svg +6 -6
  62. package/src/components/IconButtons/assets/trash.svg +7 -7
  63. package/src/components/IconButtons/index.tsx +8 -8
  64. package/src/components/IconLabel.tsx +37 -37
  65. package/src/components/Image/Image.tsx +45 -45
  66. package/src/components/Image/index.tsx +1 -1
  67. package/src/components/ImageUpload.tsx +98 -98
  68. package/src/components/Input/AsyncSearchSelect/AsyncSearchSelect.tsx +216 -216
  69. package/src/components/Input/AsyncSearchSelect/index.tsx +1 -1
  70. package/src/components/Input/AsyncSearchSelect/styles.tsx +105 -105
  71. package/src/components/Input/AutoCompleteSearch.tsx +121 -121
  72. package/src/components/Input/DatePicker.tsx +87 -76
  73. package/src/components/Input/DateRangePicker.tsx +105 -105
  74. package/src/components/Input/DateTimePicker.tsx +84 -84
  75. package/src/components/Input/FormLabel.tsx +21 -21
  76. package/src/components/Input/MultiCheckbox.tsx +64 -64
  77. package/src/components/Input/MultiSelect.tsx +161 -150
  78. package/src/components/Input/RadioGroup.tsx +104 -104
  79. package/src/components/Input/SingleCheckbox.tsx +78 -78
  80. package/src/components/Input/SingleSelect.tsx +104 -104
  81. package/src/components/Input/TextField.tsx +46 -46
  82. package/src/components/Input/TimePicker.tsx +77 -77
  83. package/src/components/Input/index.ts +26 -26
  84. package/src/components/Input/types.ts +3 -3
  85. package/src/components/JsonPreview.tsx +7 -7
  86. package/src/components/LabelValue.tsx +21 -21
  87. package/src/components/Layout/ChangePassword.tsx +49 -49
  88. package/src/components/Layout/Header/AppHeader.tsx +113 -112
  89. package/src/components/Layout/Header/AppsMenu.tsx +133 -105
  90. package/src/components/Layout/Header/HeaderActions/CogWheelMenu.tsx +33 -33
  91. package/src/components/Layout/Header/HeaderActions/FreshChatButton.tsx +61 -0
  92. package/src/components/Layout/Header/HeaderActions/FreshDeskHelpButton.tsx +53 -24
  93. package/src/components/Layout/Header/HeaderActions/HeaderActions.tsx +20 -18
  94. package/src/components/Layout/Header/HeaderActions/UserBox.tsx +56 -56
  95. package/src/components/Layout/Header/Notification.tsx +13 -13
  96. package/src/components/Layout/Header/SchoolSwitch/SchoolSwitch.tsx +33 -0
  97. package/src/components/Layout/Header/applications.ts +102 -103
  98. package/src/components/Layout/Header/assets/campx_square_small.svg +8 -8
  99. package/src/components/Layout/Header/assets/chat_with_us.png +0 -0
  100. package/src/components/Layout/Header/assets/commutex.svg +14 -14
  101. package/src/components/Layout/Header/assets/commutexSmall.svg +11 -11
  102. package/src/components/Layout/Header/assets/enroll.svg +14 -14
  103. package/src/components/Layout/Header/assets/enrollx.svg +14 -14
  104. package/src/components/Layout/Header/assets/exams_small.svg +11 -11
  105. package/src/components/Layout/Header/assets/examsx.svg +14 -14
  106. package/src/components/Layout/Header/assets/hostel_small.svg +13 -13
  107. package/src/components/Layout/Header/assets/hostelx.svg +13 -13
  108. package/src/components/Layout/Header/assets/index.ts +37 -35
  109. package/src/components/Layout/Header/assets/libraryx.svg +12 -12
  110. package/src/components/Layout/Header/assets/pay_small.svg +15 -15
  111. package/src/components/Layout/Header/assets/payx.svg +19 -19
  112. package/src/components/Layout/Header/assets/people_small.svg +9 -9
  113. package/src/components/Layout/Header/assets/peoplex.svg +12 -12
  114. package/src/components/Layout/Header/assets/squarex.svg +12 -12
  115. package/src/components/Layout/Header/icons.tsx +57 -57
  116. package/src/components/Layout/Header/index.tsx +1 -1
  117. package/src/components/Layout/Header/styles.tsx +133 -133
  118. package/src/components/Layout/Helmet.tsx +108 -49
  119. package/src/components/Layout/LayoutWrapper.tsx +28 -28
  120. package/src/components/Layout/SideMenuHeader.tsx +29 -29
  121. package/src/components/Layout/SideNav.tsx +168 -168
  122. package/src/components/Layout/Tickets/HelpWidget/HelpWidget.tsx +273 -273
  123. package/src/components/Layout/Tickets/HelpWidget/styles.tsx +94 -94
  124. package/src/components/Layout/Tickets/MyTickets.tsx +72 -72
  125. package/src/components/Layout/Tickets/TicketDetails.tsx +65 -65
  126. package/src/components/Layout/Tickets/TimeLine.tsx +64 -64
  127. package/src/components/Layout/Tickets/index.tsx +1 -1
  128. package/src/components/Layout/Tickets/services.ts +11 -11
  129. package/src/components/Layout/Tickets/styles.tsx +136 -136
  130. package/src/components/LinearProgress.tsx +19 -19
  131. package/src/components/ListItemButton.tsx +95 -95
  132. package/src/components/LoginForm.tsx +279 -279
  133. package/src/components/MediaRow/MediaRow.tsx +67 -67
  134. package/src/components/MediaRow/index.tsx +1 -1
  135. package/src/components/ModalButtons/DialogButton.tsx +126 -126
  136. package/src/components/ModalButtons/DrawerButton.tsx +115 -115
  137. package/src/components/ModalButtons/PopoverButton.tsx +99 -0
  138. package/src/components/ModalButtons/index.tsx +4 -4
  139. package/src/components/NoDataIllustration.tsx +32 -32
  140. package/src/components/PageContent.tsx +12 -12
  141. package/src/components/PageHeader.tsx +55 -55
  142. package/src/components/PageNotFound.tsx +26 -26
  143. package/src/components/PopupConfirm/ConfirmContextProvider.tsx +40 -40
  144. package/src/components/PopupConfirm/PopupConfirm.tsx +67 -67
  145. package/src/components/PopupConfirm/index.tsx +1 -1
  146. package/src/components/PopupConfirm/useConfirm.ts +47 -47
  147. package/src/components/ResetPassword.tsx +107 -107
  148. package/src/components/Row.tsx +24 -24
  149. package/src/components/Spinner.tsx +18 -18
  150. package/src/components/StepsHeader/StepsHeader.tsx +115 -115
  151. package/src/components/StepsHeader/index.tsx +1 -1
  152. package/src/components/StyledTableContainer.tsx +33 -33
  153. package/src/components/SwitchButton.tsx +41 -41
  154. package/src/components/Table.tsx +42 -42
  155. package/src/components/Tables/BasicTable/Table.tsx +198 -198
  156. package/src/components/Tables/BasicTable/TableFooter.tsx +86 -86
  157. package/src/components/Tables/BasicTable/index.tsx +1 -1
  158. package/src/components/Tables/ReactTable/BatchActionsHeader.tsx +58 -58
  159. package/src/components/Tables/ReactTable/ReactTable.tsx +295 -295
  160. package/src/components/Tables/ReactTable/RenderTableBody.tsx +49 -49
  161. package/src/components/Tables/ReactTable/index.tsx +1 -1
  162. package/src/components/Tables/ReactTable/react-table-config.d.ts +128 -128
  163. package/src/components/Tables/common/NoRecordsFound.tsx +27 -27
  164. package/src/components/Tables/common/TableStats.tsx +22 -22
  165. package/src/components/Tables/common/icons.tsx +50 -50
  166. package/src/components/Tables/common/styles.tsx +170 -170
  167. package/src/components/Tables/common/types.ts +57 -57
  168. package/src/components/Tabs/NavigationTabs.tsx +80 -80
  169. package/src/components/Tabs/Tabs.tsx +53 -53
  170. package/src/components/Tabs/TabsContainer.tsx +53 -50
  171. package/src/components/Tabs/index.tsx +1 -1
  172. package/src/components/Tabs/styles.tsx +55 -55
  173. package/src/components/ToastContainer/ToastContainer.tsx +57 -57
  174. package/src/components/ToastContainer/index.tsx +1 -1
  175. package/src/components/UploadButton/UploadButton.tsx +126 -126
  176. package/src/components/UploadButton/index.tsx +1 -1
  177. package/src/components/UploadButton/types.ts +19 -19
  178. package/src/components/UploadDocument.tsx +108 -108
  179. package/src/components/UploadFileDialog/UploadFileDialog.tsx +238 -238
  180. package/src/components/UploadFileDialog/index.tsx +1 -1
  181. package/src/components/index.ts +110 -106
  182. package/src/config/axios.ts +79 -73
  183. package/src/config/axiosEvaluator.ts +53 -53
  184. package/src/config/axiosXTenant.ts +57 -57
  185. package/src/constants/UIConstants.ts +124 -97
  186. package/src/constants/formValidations.ts +6 -6
  187. package/src/constants/index.ts +5 -5
  188. package/src/constants/isDevelopment.ts +4 -4
  189. package/src/constants/permissions.ts +67 -67
  190. package/src/constants/validateMessages.ts +12 -12
  191. package/src/contexts/LoginFormProvider.tsx +39 -44
  192. package/src/contexts/Providers.tsx +52 -50
  193. package/src/contexts/PublicProviders.tsx +30 -30
  194. package/src/contexts/QueryClientProvider.tsx +22 -22
  195. package/src/hooks/index.ts +5 -4
  196. package/src/hooks/useAuth.ts +152 -96
  197. package/src/hooks/useExternalScript.ts +38 -0
  198. package/src/hooks/useFetch.ts +53 -53
  199. package/src/hooks/useFilters.ts +83 -80
  200. package/src/hooks/useRouter.ts +31 -31
  201. package/src/layouts/Components/DashBoardMenu.tsx +232 -232
  202. package/src/layouts/Components/icons/index.tsx +403 -403
  203. package/src/layouts/Components/styles.tsx +74 -74
  204. package/src/layouts/ComponentsLayout.tsx +3 -3
  205. package/src/permissions/PageWithPermission.tsx +18 -18
  206. package/src/permissions/PermissionDeniedPage.tsx +16 -16
  207. package/src/permissions/ValidateAccess.tsx +18 -18
  208. package/src/permissions/index.ts +2 -2
  209. package/src/react-app-env.d.ts +1 -1
  210. package/src/shared-state/AssetsStore.ts +15 -15
  211. package/src/shared-state/PermissionsStore.ts +1159 -356
  212. package/src/shared-state/UserStore.ts +13 -13
  213. package/src/shared-state/index.ts +4 -4
  214. package/src/theme/App.less +3 -3
  215. package/src/theme/MuiThemeProvider.tsx +18 -18
  216. package/src/theme/customCssBaseline.ts +135 -135
  217. package/src/theme/index.css +28 -28
  218. package/src/theme/muiTheme.ts +597 -595
  219. package/src/theme/theme.d.ts +77 -75
  220. package/src/utils/adminAxios.ts +15 -15
  221. package/src/utils/alphabet.ts +23 -23
  222. package/src/utils/arrayPadEnd.ts +3 -3
  223. package/src/utils/formatCurrency.ts +9 -9
  224. package/src/utils/getUrlParams.ts +5 -5
  225. package/src/utils/index.ts +7 -7
  226. package/src/utils/logout.ts +25 -25
  227. package/src/utils/ordinalSuffixOf.ts +14 -14
  228. package/src/utils/romanize.ts +40 -40
  229. package/src/utils/withRouteWrapper.tsx +25 -25
  230. package/src/utils/withSuspense.tsx +6 -6
  231. package/styled-components.tsx +60 -60
  232. package/tsconfig.json +21 -21
  233. package/src/components/Layout/Header/assets/commuteX.png +0 -0
@@ -1,184 +1,184 @@
1
- import { MoreVert } from '@mui/icons-material'
2
- import {
3
- ButtonProps,
4
- DialogProps,
5
- DrawerProps,
6
- IconButtonProps,
7
- MenuListProps,
8
- MenuProps,
9
- } from '@mui/material'
10
- import { ReactNode, useState } from 'react'
11
- import { useImmer } from 'use-immer'
12
- import { CustomDialog } from '../ModalButtons/DialogButton'
13
- import { CustomDrawer } from '../ModalButtons/DrawerButton'
14
- import AnchorElement from './AnchorElement'
15
- import {
16
- IMenuItemProps,
17
- MenuItemType,
18
- RenderMenuItem,
19
- } from './DropdownMenuItem'
20
- import { StyledMenu } from './styles'
21
-
22
- interface DropDownButtonProps {
23
- icon?: {
24
- icon: ReactNode
25
- iconProps?: IconButtonProps
26
- outlined?: boolean
27
- }
28
- button?: {
29
- label?: string
30
- buttonProps?: ButtonProps
31
- }
32
- anchor?: (props: { open: () => void }) => ReactNode
33
- loading?: boolean
34
- menu: IMenuItemProps[]
35
- menuProps?: Omit<MenuProps, 'open'>
36
- menuListProps?: MenuListProps
37
- }
38
-
39
- const defaultIcon = {
40
- icon: <MoreVert color="primary" />,
41
- outlined: true,
42
- }
43
-
44
- interface IModalState {
45
- open: boolean
46
- content: any
47
- contentTitle: ReactNode
48
- type: MenuItemType
49
- props: Omit<DialogProps, 'open'> | Omit<DrawerProps, 'open'>
50
- }
51
-
52
- const DropDownButton = ({
53
- button,
54
- icon = defaultIcon,
55
- menu = [],
56
- menuProps,
57
- menuListProps,
58
- loading = false,
59
- anchor,
60
- }: DropDownButtonProps) => {
61
- const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)
62
- const [open, setOpen] = useState(false)
63
-
64
- const [modalState, setModalState] = useImmer<IModalState>({
65
- open: false,
66
- content: null,
67
- contentTitle: '',
68
- type: 'drawer',
69
- props: null,
70
- })
71
-
72
- const handleClick = (event: any) => {
73
- setAnchorEl(event.currentTarget)
74
- setOpen(true)
75
- }
76
-
77
- const handleClose = () => {
78
- setAnchorEl(null)
79
- setOpen(false)
80
- }
81
-
82
- const onModalClose = () => {
83
- setModalState((s) => {
84
- s.open = false
85
- s.content = null
86
- })
87
- }
88
- const onModalOpen = (item, props) => {
89
- setModalState((s) => {
90
- s.content = item.content
91
- s.open = true
92
- s.type = item.actionType
93
- s.props = props
94
- s.contentTitle = item?.contentTitle ?? ''
95
- })
96
- }
97
-
98
- return (
99
- <>
100
- <AnchorElement
101
- anchor={anchor}
102
- loading={loading}
103
- button={button}
104
- icon={icon}
105
- handleClick={handleClick}
106
- />
107
- <StyledMenu
108
- elevation={0}
109
- id="basic-menu"
110
- anchorEl={anchorEl}
111
- keepMounted
112
- open={open}
113
- onClose={handleClose}
114
- PaperProps={{
115
- elevation: 0,
116
- }}
117
- MenuListProps={{ ...menuListProps }}
118
- anchorOrigin={{
119
- vertical: 'bottom',
120
- horizontal: 'right',
121
- }}
122
- transitionDuration={150}
123
- transformOrigin={{
124
- vertical: 'top',
125
- horizontal: 'right',
126
- }}
127
- {...menuProps}
128
- >
129
- {menu.map((item, index) => (
130
- <RenderMenuItem
131
- key={index}
132
- onModalOpen={(props) => onModalOpen(item, props)}
133
- modalState={modalState}
134
- handleClose={handleClose}
135
- actionType={item?.actionType}
136
- {...item}
137
- />
138
- ))}
139
- </StyledMenu>
140
- {modalState?.open && (
141
- <RenderContent
142
- onClose={onModalClose}
143
- modalState={modalState}
144
- contentType={modalState.type}
145
- />
146
- )}
147
- </>
148
- )
149
- }
150
-
151
- export default DropDownButton
152
-
153
- const RenderContent = ({
154
- contentType,
155
- modalState,
156
- onClose,
157
- }: {
158
- contentType: MenuItemType
159
- modalState: any
160
- onClose: () => void
161
- }) => {
162
- if (contentType === 'dialog')
163
- return (
164
- <CustomDialog
165
- onClose={onClose}
166
- open={modalState.open}
167
- content={modalState.content}
168
- title={modalState?.contentTitle}
169
- dialogProps={modalState?.props}
170
- />
171
- )
172
-
173
- if (contentType === 'drawer')
174
- return (
175
- <CustomDrawer
176
- onClose={onClose}
177
- open={modalState.open}
178
- content={modalState.content}
179
- title={modalState?.contentTitle}
180
- drawerProps={modalState?.props}
181
- />
182
- )
183
- return <></>
184
- }
1
+ import { MoreVert } from '@mui/icons-material'
2
+ import {
3
+ ButtonProps,
4
+ DialogProps,
5
+ DrawerProps,
6
+ IconButtonProps,
7
+ MenuListProps,
8
+ MenuProps,
9
+ } from '@mui/material'
10
+ import { ReactNode, useState } from 'react'
11
+ import { useImmer } from 'use-immer'
12
+ import { CustomDialog } from '../ModalButtons/DialogButton'
13
+ import { CustomDrawer } from '../ModalButtons/DrawerButton'
14
+ import AnchorElement from './AnchorElement'
15
+ import {
16
+ IMenuItemProps,
17
+ MenuItemType,
18
+ RenderMenuItem,
19
+ } from './DropdownMenuItem'
20
+ import { StyledMenu } from './styles'
21
+
22
+ interface DropDownButtonProps {
23
+ icon?: {
24
+ icon: ReactNode
25
+ iconProps?: IconButtonProps
26
+ outlined?: boolean
27
+ }
28
+ button?: {
29
+ label?: string
30
+ buttonProps?: ButtonProps
31
+ }
32
+ anchor?: (props: { open: () => void }) => ReactNode
33
+ loading?: boolean
34
+ menu: IMenuItemProps[]
35
+ menuProps?: Omit<MenuProps, 'open'>
36
+ menuListProps?: MenuListProps
37
+ }
38
+
39
+ const defaultIcon = {
40
+ icon: <MoreVert color="primary" />,
41
+ outlined: true,
42
+ }
43
+
44
+ interface IModalState {
45
+ open: boolean
46
+ content: any
47
+ contentTitle: ReactNode
48
+ type: MenuItemType
49
+ props: Omit<DialogProps, 'open'> | Omit<DrawerProps, 'open'>
50
+ }
51
+
52
+ const DropDownButton = ({
53
+ button,
54
+ icon = defaultIcon,
55
+ menu = [],
56
+ menuProps,
57
+ menuListProps,
58
+ loading = false,
59
+ anchor,
60
+ }: DropDownButtonProps) => {
61
+ const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)
62
+ const [open, setOpen] = useState(false)
63
+
64
+ const [modalState, setModalState] = useImmer<IModalState>({
65
+ open: false,
66
+ content: null,
67
+ contentTitle: '',
68
+ type: 'drawer',
69
+ props: null,
70
+ })
71
+
72
+ const handleClick = (event: any) => {
73
+ setAnchorEl(event.currentTarget)
74
+ setOpen(true)
75
+ }
76
+
77
+ const handleClose = () => {
78
+ setAnchorEl(null)
79
+ setOpen(false)
80
+ }
81
+
82
+ const onModalClose = () => {
83
+ setModalState((s) => {
84
+ s.open = false
85
+ s.content = null
86
+ })
87
+ }
88
+ const onModalOpen = (item, props) => {
89
+ setModalState((s) => {
90
+ s.content = item.content
91
+ s.open = true
92
+ s.type = item.actionType
93
+ s.props = props
94
+ s.contentTitle = item?.contentTitle ?? ''
95
+ })
96
+ }
97
+
98
+ return (
99
+ <>
100
+ <AnchorElement
101
+ anchor={anchor}
102
+ loading={loading}
103
+ button={button}
104
+ icon={icon}
105
+ handleClick={handleClick}
106
+ />
107
+ <StyledMenu
108
+ elevation={0}
109
+ id="basic-menu"
110
+ anchorEl={anchorEl}
111
+ keepMounted
112
+ open={open}
113
+ onClose={handleClose}
114
+ PaperProps={{
115
+ elevation: 0,
116
+ }}
117
+ MenuListProps={{ ...menuListProps }}
118
+ anchorOrigin={{
119
+ vertical: 'bottom',
120
+ horizontal: 'right',
121
+ }}
122
+ transitionDuration={150}
123
+ transformOrigin={{
124
+ vertical: 'top',
125
+ horizontal: 'right',
126
+ }}
127
+ {...menuProps}
128
+ >
129
+ {menu.map((item, index) => (
130
+ <RenderMenuItem
131
+ key={index}
132
+ onModalOpen={(props) => onModalOpen(item, props)}
133
+ modalState={modalState}
134
+ handleClose={handleClose}
135
+ actionType={item?.actionType}
136
+ {...item}
137
+ />
138
+ ))}
139
+ </StyledMenu>
140
+ {modalState?.open && (
141
+ <RenderContent
142
+ onClose={onModalClose}
143
+ modalState={modalState}
144
+ contentType={modalState.type}
145
+ />
146
+ )}
147
+ </>
148
+ )
149
+ }
150
+
151
+ export default DropDownButton
152
+
153
+ const RenderContent = ({
154
+ contentType,
155
+ modalState,
156
+ onClose,
157
+ }: {
158
+ contentType: MenuItemType
159
+ modalState: any
160
+ onClose: () => void
161
+ }) => {
162
+ if (contentType === 'dialog')
163
+ return (
164
+ <CustomDialog
165
+ onClose={onClose}
166
+ open={modalState.open}
167
+ content={modalState.content}
168
+ title={modalState?.contentTitle}
169
+ dialogProps={modalState?.props}
170
+ />
171
+ )
172
+
173
+ if (contentType === 'drawer')
174
+ return (
175
+ <CustomDrawer
176
+ onClose={onClose}
177
+ open={modalState.open}
178
+ content={modalState.content}
179
+ title={modalState?.contentTitle}
180
+ drawerProps={modalState?.props}
181
+ />
182
+ )
183
+ return <></>
184
+ }
@@ -1,110 +1,122 @@
1
- import {
2
- DialogProps,
3
- DrawerProps,
4
- ListItemIcon,
5
- ListItemText,
6
- styled,
7
- } from '@mui/material'
8
- import { ReactNode } from 'react'
9
- import { Link } from 'react-router-dom'
10
- import { DrawerButtonProps } from '../ModalButtons/DrawerButton'
11
- import { StyledMenuItem } from './styles'
12
-
13
- const StyledLink = styled(Link)(({ theme }) => ({
14
- display: 'block',
15
- textTransform: 'none',
16
- textDecoration: 'none',
17
- }))
18
-
19
- export type MenuItemType = 'normal' | 'dialog' | 'drawer' | 'link'
20
-
21
- export type MenuItemButtonProps = {
22
- icon?: ReactNode
23
- label: ReactNode
24
- onClick: () => void
25
- link?: {
26
- to: string
27
- target?: '_self' | '_blank'
28
- }
29
- }
30
-
31
- const MenuItemButton = ({
32
- icon,
33
- label,
34
- onClick,
35
- ...props
36
- }: MenuItemButtonProps) => {
37
- return (
38
- <StyledMenuItem
39
- sx={{ minWidth: '180px', width: '100%' }}
40
- onClick={onClick}
41
- {...props}
42
- >
43
- {icon && <ListItemIcon>{icon}</ListItemIcon>}
44
- <ListItemText>{label}</ListItemText>
45
- </StyledMenuItem>
46
- )
47
- }
48
-
49
- export type IMenuItemProps = Omit<MenuItemButtonProps, 'onClick'> & {
50
- content?: DrawerButtonProps['content']
51
- contentTitle?: ReactNode
52
- actionType?: MenuItemType
53
- onClick?: () => void
54
- dialogProps?: Omit<DialogProps, 'open'>
55
- drawerProps?: Omit<DrawerProps, 'open'>
56
- }
57
-
58
- export interface IRenderMenuItemProps extends IMenuItemProps {
59
- handleClose: () => void
60
- modalState: any
61
- onModalOpen: (props: any) => void
62
- }
63
-
64
- export const RenderMenuItem = ({
65
- onClick,
66
- actionType = 'normal',
67
- handleClose,
68
- modalState,
69
- onModalOpen,
70
- link,
71
- drawerProps,
72
- dialogProps,
73
- ...props
74
- }: IRenderMenuItemProps) => {
75
- const renderMenuItem: Record<MenuItemType, ReactNode> = {
76
- normal: (
77
- <MenuItemButton
78
- {...props}
79
- onClick={() => {
80
- onClick()
81
- handleClose()
82
- }}
83
- />
84
- ),
85
- dialog: (
86
- <MenuItemButton
87
- {...props}
88
- onClick={() => {
89
- onModalOpen(dialogProps)
90
- handleClose()
91
- }}
92
- />
93
- ),
94
- drawer: (
95
- <MenuItemButton
96
- {...props}
97
- onClick={() => {
98
- onModalOpen(drawerProps)
99
- handleClose()
100
- }}
101
- />
102
- ),
103
- link: (
104
- <StyledLink to={link?.to ?? ''} target={link?.target ?? '_blank'}>
105
- <MenuItemButton {...props} onClick={() => {}} />
106
- </StyledLink>
107
- ),
108
- }
109
- return <>{renderMenuItem[actionType]}</>
110
- }
1
+ import {
2
+ DialogProps,
3
+ DrawerProps,
4
+ ListItemIcon,
5
+ ListItemText,
6
+ styled,
7
+ } from '@mui/material'
8
+ import { ReactNode } from 'react'
9
+ import { Link } from 'react-router-dom'
10
+ import { DrawerButtonProps } from '../ModalButtons/DrawerButton'
11
+ import { StyledMenuItem } from './styles'
12
+ import { ValidateAccess } from '../../permissions'
13
+ import { Permission } from '../../shared-state'
14
+
15
+ const StyledLink = styled(Link)(({ theme }) => ({
16
+ display: 'block',
17
+ textTransform: 'none',
18
+ textDecoration: 'none',
19
+ }))
20
+
21
+ export type MenuItemType = 'normal' | 'dialog' | 'drawer' | 'link'
22
+
23
+ export type MenuItemButtonProps = {
24
+ icon?: ReactNode
25
+ label: ReactNode
26
+ onClick: () => void
27
+ link?: {
28
+ to: string
29
+ target?: '_self' | '_blank'
30
+ }
31
+ }
32
+
33
+ const MenuItemButton = ({
34
+ icon,
35
+ label,
36
+ onClick,
37
+ ...props
38
+ }: MenuItemButtonProps) => {
39
+ return (
40
+ <StyledMenuItem
41
+ sx={{ minWidth: '180px', width: '100%' }}
42
+ onClick={onClick}
43
+ {...props}
44
+ >
45
+ {icon && <ListItemIcon>{icon}</ListItemIcon>}
46
+ <ListItemText>{label}</ListItemText>
47
+ </StyledMenuItem>
48
+ )
49
+ }
50
+
51
+ export type IMenuItemProps = Omit<MenuItemButtonProps, 'onClick'> & {
52
+ content?: DrawerButtonProps['content']
53
+ contentTitle?: ReactNode
54
+ actionType?: MenuItemType
55
+ onClick?: () => void
56
+ dialogProps?: Omit<DialogProps, 'open'>
57
+ drawerProps?: Omit<DrawerProps, 'open'>
58
+ permissionKey?: Permission
59
+ }
60
+
61
+ export interface IRenderMenuItemProps extends IMenuItemProps {
62
+ handleClose: () => void
63
+ modalState: any
64
+ onModalOpen: (props: any) => void
65
+ }
66
+
67
+ export const RenderMenuItem = ({
68
+ onClick,
69
+ actionType = 'normal',
70
+ handleClose,
71
+ modalState,
72
+ onModalOpen,
73
+ link,
74
+ drawerProps,
75
+ dialogProps,
76
+ permissionKey,
77
+ ...props
78
+ }: IRenderMenuItemProps) => {
79
+ const renderMenuItem: Record<MenuItemType, ReactNode> = {
80
+ normal: (
81
+ <MenuItemButton
82
+ {...props}
83
+ onClick={() => {
84
+ onClick()
85
+ handleClose()
86
+ }}
87
+ />
88
+ ),
89
+ dialog: (
90
+ <MenuItemButton
91
+ {...props}
92
+ onClick={() => {
93
+ onModalOpen(dialogProps)
94
+ handleClose()
95
+ }}
96
+ />
97
+ ),
98
+ drawer: (
99
+ <MenuItemButton
100
+ {...props}
101
+ onClick={() => {
102
+ onModalOpen(drawerProps)
103
+ handleClose()
104
+ }}
105
+ />
106
+ ),
107
+ link: (
108
+ <StyledLink to={link?.to ?? ''} target={link?.target ?? '_blank'}>
109
+ <MenuItemButton {...props} onClick={() => {}} />
110
+ </StyledLink>
111
+ ),
112
+ }
113
+
114
+ if (permissionKey)
115
+ return (
116
+ <ValidateAccess accessKey={permissionKey}>
117
+ {renderMenuItem[actionType]}
118
+ </ValidateAccess>
119
+ )
120
+
121
+ return <>{renderMenuItem[actionType]}</>
122
+ }
@@ -1 +1 @@
1
- export { default } from './DropDownButton'
1
+ export { default } from './DropDownButton'