@campxdev/shared 0.5.20 → 0.5.22

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 (205) hide show
  1. package/.eslintignore +4 -0
  2. package/.eslintrc.js +34 -0
  3. package/.prettierrc +10 -0
  4. package/antd.customize.less +73 -73
  5. package/exports.ts +16 -15
  6. package/package.json +66 -52
  7. package/publish.sh +2 -0
  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 +73 -73
  17. package/src/components/Card.tsx +97 -97
  18. package/src/components/CardsGrid.tsx +28 -28
  19. package/src/components/ChangePassword.tsx +164 -164
  20. package/src/components/Chips.tsx +77 -77
  21. package/src/components/Detail.tsx +15 -15
  22. package/src/components/DetailsGrid.tsx +52 -52
  23. package/src/components/DividerHeading.tsx +40 -40
  24. package/src/components/DrawerWrapper/DialogWrapper.tsx +63 -63
  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 -190
  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 +26 -26
  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 -143
  38. package/src/components/HookForm/DatePicker.tsx +65 -65
  39. package/src/components/HookForm/DateTimePicker.tsx +70 -70
  40. package/src/components/HookForm/FormLabel.tsx +14 -14
  41. package/src/components/HookForm/MultiCheckbox.tsx +82 -82
  42. package/src/components/HookForm/MultiSelect.tsx +100 -100
  43. package/src/components/HookForm/RadioGroup.tsx +113 -113
  44. package/src/components/HookForm/SingleCheckbox.tsx +46 -46
  45. package/src/components/HookForm/SingleSelect.tsx +93 -93
  46. package/src/components/HookForm/TextField.tsx +74 -74
  47. package/src/components/HookForm/TimePicker.tsx +82 -82
  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 -269
  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/AutoCompleteSearch.tsx +113 -143
  60. package/src/components/Input/DatePicker.tsx +60 -60
  61. package/src/components/Input/DateRangePicker.tsx +131 -131
  62. package/src/components/Input/DateTimePicker.tsx +70 -70
  63. package/src/components/Input/FormLabel.tsx +14 -14
  64. package/src/components/Input/MultiCheckbox.tsx +79 -79
  65. package/src/components/Input/MultiSelect.tsx +52 -52
  66. package/src/components/Input/RadioGroup.tsx +55 -55
  67. package/src/components/Input/SingleCheckbox.tsx +23 -23
  68. package/src/components/Input/SingleSelect.tsx +124 -139
  69. package/src/components/Input/TextField.tsx +50 -50
  70. package/src/components/Input/TimePicker.tsx +82 -82
  71. package/src/components/Input/index.ts +26 -26
  72. package/src/components/JsonPreview/JsonPreview.tsx +7 -7
  73. package/src/components/JsonPreview/index.tsx +1 -1
  74. package/src/components/LabelValue/LabelValue.tsx +21 -21
  75. package/src/components/LabelValue/index.tsx +1 -1
  76. package/src/components/Layout/ChangePassword.tsx +49 -49
  77. package/src/components/Layout/Header/AppHeader.tsx +113 -113
  78. package/src/components/Layout/Header/AppsMenu.tsx +92 -92
  79. package/src/components/Layout/Header/CogWheelMenu.tsx +33 -33
  80. package/src/components/Layout/Header/FreshDeskHelpButton.tsx +19 -19
  81. package/src/components/Layout/Header/Notification.tsx +13 -13
  82. package/src/components/Layout/Header/UserBox.tsx +70 -70
  83. package/src/components/Layout/Header/applications.ts +87 -87
  84. package/src/components/Layout/Header/assets/campx.svg +29 -29
  85. package/src/components/Layout/Header/assets/campx_square_small.svg +9 -9
  86. package/src/components/Layout/Header/assets/exams_small.svg +12 -12
  87. package/src/components/Layout/Header/assets/hostel_small.svg +13 -13
  88. package/src/components/Layout/Header/assets/index.ts +23 -23
  89. package/src/components/Layout/Header/assets/pay_small.svg +16 -16
  90. package/src/components/Layout/Header/assets/payxHeader.svg +21 -21
  91. package/src/components/Layout/Header/assets/people_small.svg +9 -9
  92. package/src/components/Layout/Header/assets/peoplexHeader.svg +14 -14
  93. package/src/components/Layout/Header/icons.tsx +57 -57
  94. package/src/components/Layout/Header/index.tsx +1 -1
  95. package/src/components/Layout/Header/styles.tsx +98 -98
  96. package/src/components/LayoutWrapper.tsx +25 -25
  97. package/src/components/LinearProgress.tsx +19 -19
  98. package/src/components/ListItemButton.tsx +94 -94
  99. package/src/components/LoginForm.tsx +103 -103
  100. package/src/components/MediaRow/MediaRow.tsx +69 -69
  101. package/src/components/MediaRow/index.tsx +1 -1
  102. package/src/components/MenuButton.tsx +103 -103
  103. package/src/components/ModalButtons/DialogButton.tsx +85 -85
  104. package/src/components/ModalButtons/DrawerButton.tsx +89 -89
  105. package/src/components/ModalButtons/index.tsx +4 -4
  106. package/src/components/NoDataIllustration/NoDataIllustration.tsx +32 -32
  107. package/src/components/NoDataIllustration/index.tsx +1 -1
  108. package/src/components/PageContent.tsx +17 -17
  109. package/src/components/PageHeader.tsx +52 -52
  110. package/src/components/PageNotFound.tsx +26 -26
  111. package/src/components/PopupConfirm/ConfirmContextProvider.tsx +40 -40
  112. package/src/components/PopupConfirm/PopupConfirm.tsx +34 -34
  113. package/src/components/PopupConfirm/index.tsx +1 -1
  114. package/src/components/PopupConfirm/useConfirm.ts +47 -47
  115. package/src/components/Row/Row.tsx +24 -24
  116. package/src/components/Row/index.tsx +1 -1
  117. package/src/components/SearchBar/SearchBar.tsx +53 -53
  118. package/src/components/SearchBar/index.tsx +1 -1
  119. package/src/components/SideMenuHeader.tsx +29 -29
  120. package/src/components/SideNav.tsx +150 -150
  121. package/src/components/Spinner.tsx +18 -18
  122. package/src/components/StepsHeader/StepsHeader.tsx +115 -115
  123. package/src/components/StepsHeader/index.tsx +1 -1
  124. package/src/components/Styled/OutlinedIconButton.tsx +7 -7
  125. package/src/components/Styled/index.tsx +1 -1
  126. package/src/components/StyledTableContainer.tsx +33 -33
  127. package/src/components/Swiper/Swiper.tsx +39 -39
  128. package/src/components/Swiper/index.tsx +1 -1
  129. package/src/components/SwitchButton/SwitchButton.tsx +41 -41
  130. package/src/components/SwitchButton/index.tsx +1 -1
  131. package/src/components/Table.tsx +42 -42
  132. package/src/components/TableComponent/BatchActionsHeader.tsx +58 -58
  133. package/src/components/TableComponent/Icons/index.tsx +50 -50
  134. package/src/components/TableComponent/ReactTable.tsx +293 -293
  135. package/src/components/TableComponent/RenderTableBody.tsx +64 -64
  136. package/src/components/TableComponent/TableFooter/TableFooter.tsx +102 -102
  137. package/src/components/TableComponent/TableFooter/index.tsx +1 -1
  138. package/src/components/TableComponent/TableFooter/styles.tsx +28 -28
  139. package/src/components/TableComponent/index.tsx +221 -221
  140. package/src/components/TableComponent/react-table-config.d.ts +128 -129
  141. package/src/components/TableComponent/styles.tsx +173 -173
  142. package/src/components/TableComponent/types.ts +57 -57
  143. package/src/components/Tabs/Tabs.tsx +52 -52
  144. package/src/components/Tabs/TabsContainer.tsx +50 -50
  145. package/src/components/Tabs/index.tsx +1 -1
  146. package/src/components/Tabs/styles.tsx +55 -55
  147. package/src/components/ToastContainer/ToastContainer.tsx +42 -42
  148. package/src/components/ToastContainer/index.tsx +1 -1
  149. package/src/components/UploadButton/UploadButton.tsx +98 -98
  150. package/src/components/UploadButton/index.tsx +1 -1
  151. package/src/components/UploadButton/types.ts +14 -14
  152. package/src/components/UploadDocument/UploadDocument.tsx +108 -108
  153. package/src/components/UploadDocument/index.tsx +1 -1
  154. package/src/components/UploadFileDialog/UploadFileDialog.tsx +240 -240
  155. package/src/components/UploadFileDialog/index.tsx +1 -1
  156. package/src/components/index.ts +82 -82
  157. package/src/config/axios.ts +73 -73
  158. package/src/config/axiosXTenant.ts +57 -0
  159. package/src/constants/UIConstants.ts +97 -97
  160. package/src/constants/formValidations.ts +6 -6
  161. package/src/constants/index.ts +5 -5
  162. package/src/constants/isDevelopment.ts +3 -3
  163. package/src/constants/permissions.ts +67 -67
  164. package/src/constants/validateMessages.ts +12 -12
  165. package/src/contexts/LoginFormProvider.tsx +39 -39
  166. package/src/contexts/Providers.tsx +57 -57
  167. package/src/contexts/QueryClientProvider.tsx +22 -22
  168. package/src/hooks/index.ts +3 -3
  169. package/src/hooks/useAppInit.ts +33 -33
  170. package/src/hooks/useAuth.ts +91 -90
  171. package/src/hooks/useFetch.ts +53 -53
  172. package/src/hooks/useRouter.ts +31 -31
  173. package/src/layouts/Components/DashBoardMenu.tsx +232 -232
  174. package/src/layouts/Components/icons/index.tsx +403 -403
  175. package/src/layouts/Components/styles.tsx +60 -60
  176. package/src/layouts/ComponentsLayout.tsx +3 -3
  177. package/src/permissions/PageWithPermission.tsx +18 -18
  178. package/src/permissions/PermissionDeniedPage.tsx +16 -16
  179. package/src/permissions/PermissionsStore.ts +352 -295
  180. package/src/permissions/ValidateAccess.tsx +18 -18
  181. package/src/permissions/index.ts +3 -3
  182. package/src/react-app-env.d.ts +1 -1
  183. package/src/shared-state/AssetsStore.ts +15 -15
  184. package/src/shared-state/UserStore.ts +13 -13
  185. package/src/shared-state/index.ts +3 -3
  186. package/src/theme/App.less +3 -3
  187. package/src/theme/MuiThemeProvider.tsx +13 -13
  188. package/src/theme/customCssBaseline.ts +78 -78
  189. package/src/theme/index.css +75 -75
  190. package/src/theme/muiTheme.ts +516 -516
  191. package/src/theme/theme.d.ts +75 -75
  192. package/src/utils/alphabet.ts +23 -23
  193. package/src/utils/arrayPadEnd.ts +3 -3
  194. package/src/utils/formatCurrency.ts +9 -9
  195. package/src/utils/getUrlParams.ts +5 -5
  196. package/src/utils/index.ts +8 -8
  197. package/src/utils/logout.ts +24 -24
  198. package/src/utils/ordinalSuffixOf.ts +14 -14
  199. package/src/utils/romanize.ts +40 -40
  200. package/src/utils/withLocalization.tsx +11 -11
  201. package/src/utils/withRouteWrapper.tsx +25 -25
  202. package/src/utils/withSuspense.tsx +6 -6
  203. package/styled-components.tsx +60 -60
  204. package/todo.md +8 -8
  205. package/tsconfig.json +21 -21
@@ -1,150 +1,150 @@
1
- import {
2
- Box,
3
- Collapse,
4
- List,
5
- ListItemIcon,
6
- ListItemText,
7
- styled,
8
- } from '@mui/material'
9
- import {Store} from 'pullstate'
10
- import {memo, ReactNode} from 'react'
11
- import {Link, useMatch, useResolvedPath} from 'react-router-dom'
12
- import {PermissionsStore} from '../permissions'
13
- import {
14
- ListItemButton,
15
- StyledChevronIcon,
16
- StyledListItemButton,
17
- } from './ListItemButton'
18
-
19
- const accessIfNoKey = process.env.NODE_ENV === 'development' ? true : false
20
-
21
- const sideNavStore = new Store({
22
- activeKey: '',
23
- })
24
-
25
- const StyledLink = styled(Link)({
26
- textDecoration: 'none',
27
- })
28
-
29
- const SideNav = ({
30
- menuItems,
31
- header,
32
- }: {
33
- menuItems: any[]
34
- header?: ReactNode
35
- }) => {
36
- return (
37
- <Box
38
- sx={{
39
- background: (theme) => theme.palette.secondary.main,
40
- }}
41
- >
42
- {header ? header : null}
43
- <Box>
44
- {menuItems.map((item, index) => (
45
- <RenderMenuItem key={index} menuItem={item} />
46
- ))}
47
- </Box>
48
- </Box>
49
- )
50
- }
51
-
52
- export default memo(SideNav)
53
-
54
- const RenderMenuItem = ({menuItem}) => {
55
- const {path, children, title, icon, permissionKey} = menuItem
56
- let resolved = useResolvedPath(path)
57
- let match = useMatch({path: resolved.pathname, end: false})
58
-
59
- const permissions = PermissionsStore.useState((s) => s).permissions
60
- const hasAccess = permissionKey ? permissions[permissionKey] : accessIfNoKey
61
-
62
- if (children?.length)
63
- return (
64
- <Box sx={{position: 'relative'}}>
65
- <DropDownMenu
66
- icon={icon}
67
- menuItems={children}
68
- path={path}
69
- title={title}
70
- />
71
- </Box>
72
- )
73
-
74
- return (
75
- <>
76
- {hasAccess ? (
77
- <StyledLink to={path}>
78
- <ListItemButton
79
- hasChildren={false}
80
- label={title}
81
- isActive={!!match}
82
- icon={icon}
83
- />
84
- </StyledLink>
85
- ) : null}
86
- </>
87
- )
88
- }
89
-
90
- const DropDownMenu = ({path, title, icon, menuItems}) => {
91
- const {activeKey} = sideNavStore.useState((s) => s)
92
- const permissions = PermissionsStore.useState((s) => s).permissions
93
-
94
- const validateDropdownAccess = () => {
95
- if (process.env.NODE_ENV === 'development' && !permissions) return true
96
-
97
- return menuItems?.every((item) =>
98
- item?.permissionKey ? permissions[item.permissionKey] : accessIfNoKey
99
- )
100
- }
101
-
102
- if (!validateDropdownAccess()) return null
103
- return (
104
- <Box sx={{position: 'relative'}}>
105
- <MenuDropDownButton
106
- isActive={activeKey === path}
107
- onClick={() => {
108
- sideNavStore.update((s) => {
109
- s.activeKey = activeKey === path ? '' : path
110
- })
111
- }}
112
- label={title}
113
- icon={icon}
114
- />
115
- <Collapse timeout={200} in={activeKey === path}>
116
- <List>
117
- {menuItems?.map((child) => (
118
- <RenderMenuItem
119
- key={child.path}
120
- menuItem={{
121
- ...child,
122
- path: path + child.path,
123
- }}
124
- />
125
- ))}
126
- </List>
127
- </Collapse>
128
- </Box>
129
- )
130
- }
131
-
132
- const MenuDropDownButton = ({icon: Icon, label, onClick, isActive}) => {
133
- return (
134
- <>
135
- <StyledListItemButton
136
- dropDown={true}
137
- onClick={onClick}
138
- isActive={isActive}
139
- >
140
- {Icon ? (
141
- <ListItemIcon>{<Icon />}</ListItemIcon>
142
- ) : (
143
- <Box minWidth={16}></Box>
144
- )}
145
- <ListItemText primary={label} />
146
- <StyledChevronIcon open={isActive} />
147
- </StyledListItemButton>
148
- </>
149
- )
150
- }
1
+ import {
2
+ Box,
3
+ Collapse,
4
+ List,
5
+ ListItemIcon,
6
+ ListItemText,
7
+ styled,
8
+ } from '@mui/material'
9
+ import { Store } from 'pullstate'
10
+ import { memo, ReactNode } from 'react'
11
+ import { Link, useMatch, useResolvedPath } from 'react-router-dom'
12
+ import { PermissionsStore } from '../permissions'
13
+ import {
14
+ ListItemButton,
15
+ StyledChevronIcon,
16
+ StyledListItemButton,
17
+ } from './ListItemButton'
18
+
19
+ const accessIfNoKey = process.env.NODE_ENV === 'development' ? true : false
20
+
21
+ const sideNavStore = new Store({
22
+ activeKey: '',
23
+ })
24
+
25
+ const StyledLink = styled(Link)({
26
+ textDecoration: 'none',
27
+ })
28
+
29
+ const SideNav = ({
30
+ menuItems,
31
+ header,
32
+ }: {
33
+ menuItems: any[]
34
+ header?: ReactNode
35
+ }) => {
36
+ return (
37
+ <Box
38
+ sx={{
39
+ background: (theme) => theme.palette.secondary.main,
40
+ }}
41
+ >
42
+ {header ? header : null}
43
+ <Box>
44
+ {menuItems.map((item, index) => (
45
+ <RenderMenuItem key={index} menuItem={item} />
46
+ ))}
47
+ </Box>
48
+ </Box>
49
+ )
50
+ }
51
+
52
+ export default memo(SideNav)
53
+
54
+ const RenderMenuItem = ({ menuItem }) => {
55
+ const { path, children, title, icon, permissionKey } = menuItem
56
+ let resolved = useResolvedPath(path)
57
+ let match = useMatch({ path: resolved.pathname, end: false })
58
+
59
+ const permissions = PermissionsStore.useState((s) => s).permissions
60
+ const hasAccess = permissionKey ? permissions[permissionKey] : accessIfNoKey
61
+
62
+ if (children?.length)
63
+ return (
64
+ <Box sx={{ position: 'relative' }}>
65
+ <DropDownMenu
66
+ icon={icon}
67
+ menuItems={children}
68
+ path={path}
69
+ title={title}
70
+ />
71
+ </Box>
72
+ )
73
+
74
+ return (
75
+ <>
76
+ {hasAccess ? (
77
+ <StyledLink to={path}>
78
+ <ListItemButton
79
+ hasChildren={false}
80
+ label={title}
81
+ isActive={!!match}
82
+ icon={icon}
83
+ />
84
+ </StyledLink>
85
+ ) : null}
86
+ </>
87
+ )
88
+ }
89
+
90
+ const DropDownMenu = ({ path, title, icon, menuItems }) => {
91
+ const { activeKey } = sideNavStore.useState((s) => s)
92
+ const permissions = PermissionsStore.useState((s) => s).permissions
93
+
94
+ const validateDropdownAccess = () => {
95
+ if (process.env.NODE_ENV === 'development' && !permissions) return true
96
+
97
+ return menuItems?.every((item) =>
98
+ item?.permissionKey ? permissions[item.permissionKey] : accessIfNoKey,
99
+ )
100
+ }
101
+
102
+ if (!validateDropdownAccess()) return null
103
+ return (
104
+ <Box sx={{ position: 'relative' }}>
105
+ <MenuDropDownButton
106
+ isActive={activeKey === path}
107
+ onClick={() => {
108
+ sideNavStore.update((s) => {
109
+ s.activeKey = activeKey === path ? '' : path
110
+ })
111
+ }}
112
+ label={title}
113
+ icon={icon}
114
+ />
115
+ <Collapse timeout={200} in={activeKey === path}>
116
+ <List>
117
+ {menuItems?.map((child) => (
118
+ <RenderMenuItem
119
+ key={child.path}
120
+ menuItem={{
121
+ ...child,
122
+ path: path + child.path,
123
+ }}
124
+ />
125
+ ))}
126
+ </List>
127
+ </Collapse>
128
+ </Box>
129
+ )
130
+ }
131
+
132
+ const MenuDropDownButton = ({ icon: Icon, label, onClick, isActive }) => {
133
+ return (
134
+ <>
135
+ <StyledListItemButton
136
+ dropDown={true}
137
+ onClick={onClick}
138
+ isActive={isActive}
139
+ >
140
+ {Icon ? (
141
+ <ListItemIcon>{<Icon />}</ListItemIcon>
142
+ ) : (
143
+ <Box minWidth={16}></Box>
144
+ )}
145
+ <ListItemText primary={label} />
146
+ <StyledChevronIcon open={isActive} />
147
+ </StyledListItemButton>
148
+ </>
149
+ )
150
+ }
@@ -1,18 +1,18 @@
1
- import {CircularProgress} from '@mui/material'
2
-
3
- function Spinner({height = '200px'}: {height?: string | number}) {
4
- return (
5
- <div
6
- style={{
7
- justifyContent: 'center',
8
- alignItems: 'center',
9
- height,
10
- display: 'flex',
11
- }}
12
- >
13
- <CircularProgress />
14
- </div>
15
- )
16
- }
17
-
18
- export default Spinner
1
+ import { CircularProgress } from '@mui/material'
2
+
3
+ function Spinner({ height = '200px' }: { height?: string | number }) {
4
+ return (
5
+ <div
6
+ style={{
7
+ justifyContent: 'center',
8
+ alignItems: 'center',
9
+ height,
10
+ display: 'flex',
11
+ }}
12
+ >
13
+ <CircularProgress />
14
+ </div>
15
+ )
16
+ }
17
+
18
+ export default Spinner
@@ -1,115 +1,115 @@
1
- import { Done } from '@mui/icons-material'
2
- import { alpha, Box, styled, Typography } from '@mui/material'
3
- import { useEffect, useState } from 'react'
4
-
5
- export const StyledStepsContainer = styled(Box)(({ theme }) => ({
6
- padding: '10px 0',
7
- display: 'flex',
8
- justifyContent: 'center',
9
- gap: '10px',
10
- }))
11
-
12
- export const StyledStep = styled(Box, {
13
- shouldForwardProp: (prop) =>
14
- !['active', 'disableHover'].includes(prop as string),
15
- })<{ active: boolean; disableHover: boolean }>(
16
- ({ theme, active, disableHover }) => ({
17
- maxWidth: '130px',
18
- position: 'relative',
19
- display: 'grid',
20
- gridTemplateRows: '50px 1fr',
21
- placeItems: 'center',
22
- gap: '10px',
23
- cursor: disableHover ? 'default' : 'pointer',
24
- padding: '6px',
25
- borderRadius: '10px',
26
- transition: 'background 0.3s ease',
27
- '&:hover': {
28
- background: disableHover ? 'none' : theme.palette.secondary.light,
29
- },
30
- '& .MuiTypography-root': {
31
- color: alpha(theme.palette.secondary.main, active ? 1 : 0.6),
32
- fontWeight: 'bold',
33
- textAlign: 'center',
34
- },
35
- '& .connector': {
36
- position: 'absolute',
37
- top: '30%',
38
- left: '50%',
39
- width: '100%',
40
- borderBottom: `1px dashed #1212128A`,
41
- },
42
- '&:last-of-type': {
43
- '& .connector': {
44
- display: 'none',
45
- },
46
- },
47
- }),
48
- )
49
-
50
- export const StyledCircle = styled(Box, {
51
- shouldForwardProp: (prop) => prop !== 'active',
52
- })<{ active: boolean }>(({ theme, active }) => ({
53
- height: '50px',
54
- width: '50px',
55
- borderRadius: '50%',
56
- background: 'white',
57
- zIndex: 30,
58
- backgroundImage: `url("data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='100' ry='100' stroke='gray' stroke-width='1.2' stroke-dasharray='8' stroke-dashoffset='0' stroke-linecap='square'/%3e%3c/svg%3e")`,
59
- display: 'flex',
60
- justifyContent: 'center',
61
- alignItems: 'center',
62
- ...(active && {
63
- border: `1px solid ${theme.palette.primary.main}`,
64
- backgroundImage: 'none',
65
- }),
66
- }))
67
-
68
- interface StepsHeaderProps {
69
- steps: { step: number; label: string }[]
70
- onChange: (step: number) => void
71
- activeStep?: number
72
- disableClick?: boolean
73
- }
74
-
75
- export default function StepsHeader({
76
- steps,
77
- onChange,
78
- activeStep: _activeStep = 0,
79
- disableClick = false,
80
- }: StepsHeaderProps) {
81
- const [activeStep, setActiveStep] = useState(0)
82
-
83
- const handleClick = (step) => {
84
- setActiveStep(step)
85
- onChange(step)
86
- }
87
-
88
- useEffect(() => {
89
- setActiveStep(_activeStep)
90
- }, [_activeStep])
91
-
92
- return (
93
- <StyledStepsContainer>
94
- {steps?.map((item) => (
95
- <StyledStep
96
- active={activeStep > item?.step - 1}
97
- disableHover={disableClick}
98
- onClick={() => {
99
- if (disableClick) return
100
- handleClick(item.step)
101
- }}
102
- key={item?.step}
103
- >
104
- <StyledCircle active={activeStep > item?.step - 1}>
105
- {activeStep > item?.step - 1 && <Done color="success" />}
106
- </StyledCircle>
107
- <Typography variant="body1" sx={{ fontSize: '13px' }}>
108
- {item?.label}
109
- </Typography>
110
- <Box className="connector"></Box>
111
- </StyledStep>
112
- ))}
113
- </StyledStepsContainer>
114
- )
115
- }
1
+ import { Done } from '@mui/icons-material'
2
+ import { alpha, Box, styled, Typography } from '@mui/material'
3
+ import { useEffect, useState } from 'react'
4
+
5
+ export const StyledStepsContainer = styled(Box)(({ theme }) => ({
6
+ padding: '10px 0',
7
+ display: 'flex',
8
+ justifyContent: 'center',
9
+ gap: '10px',
10
+ }))
11
+
12
+ export const StyledStep = styled(Box, {
13
+ shouldForwardProp: (prop) =>
14
+ !['active', 'disableHover'].includes(prop as string),
15
+ })<{ active: boolean; disableHover: boolean }>(
16
+ ({ theme, active, disableHover }) => ({
17
+ maxWidth: '130px',
18
+ position: 'relative',
19
+ display: 'grid',
20
+ gridTemplateRows: '50px 1fr',
21
+ placeItems: 'center',
22
+ gap: '10px',
23
+ cursor: disableHover ? 'default' : 'pointer',
24
+ padding: '6px',
25
+ borderRadius: '10px',
26
+ transition: 'background 0.3s ease',
27
+ '&:hover': {
28
+ background: disableHover ? 'none' : theme.palette.secondary.light,
29
+ },
30
+ '& .MuiTypography-root': {
31
+ color: alpha(theme.palette.secondary.main, active ? 1 : 0.6),
32
+ fontWeight: 'bold',
33
+ textAlign: 'center',
34
+ },
35
+ '& .connector': {
36
+ position: 'absolute',
37
+ top: '30%',
38
+ left: '50%',
39
+ width: '100%',
40
+ borderBottom: `1px dashed #1212128A`,
41
+ },
42
+ '&:last-of-type': {
43
+ '& .connector': {
44
+ display: 'none',
45
+ },
46
+ },
47
+ }),
48
+ )
49
+
50
+ export const StyledCircle = styled(Box, {
51
+ shouldForwardProp: (prop) => prop !== 'active',
52
+ })<{ active: boolean }>(({ theme, active }) => ({
53
+ height: '50px',
54
+ width: '50px',
55
+ borderRadius: '50%',
56
+ background: 'white',
57
+ zIndex: 30,
58
+ backgroundImage: `url("data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='100' ry='100' stroke='gray' stroke-width='1.2' stroke-dasharray='8' stroke-dashoffset='0' stroke-linecap='square'/%3e%3c/svg%3e")`,
59
+ display: 'flex',
60
+ justifyContent: 'center',
61
+ alignItems: 'center',
62
+ ...(active && {
63
+ border: `1px solid ${theme.palette.primary.main}`,
64
+ backgroundImage: 'none',
65
+ }),
66
+ }))
67
+
68
+ interface StepsHeaderProps {
69
+ steps: { step: number; label: string }[]
70
+ onChange: (step: number) => void
71
+ activeStep?: number
72
+ disableClick?: boolean
73
+ }
74
+
75
+ export default function StepsHeader({
76
+ steps,
77
+ onChange,
78
+ activeStep: _activeStep = 0,
79
+ disableClick = false,
80
+ }: StepsHeaderProps) {
81
+ const [activeStep, setActiveStep] = useState(0)
82
+
83
+ const handleClick = (step) => {
84
+ setActiveStep(step)
85
+ onChange(step)
86
+ }
87
+
88
+ useEffect(() => {
89
+ setActiveStep(_activeStep)
90
+ }, [_activeStep])
91
+
92
+ return (
93
+ <StyledStepsContainer>
94
+ {steps?.map((item) => (
95
+ <StyledStep
96
+ active={activeStep > item?.step - 1}
97
+ disableHover={disableClick}
98
+ onClick={() => {
99
+ if (disableClick) return
100
+ handleClick(item.step)
101
+ }}
102
+ key={item?.step}
103
+ >
104
+ <StyledCircle active={activeStep > item?.step - 1}>
105
+ {activeStep > item?.step - 1 && <Done color="success" />}
106
+ </StyledCircle>
107
+ <Typography variant="body1" sx={{ fontSize: '13px' }}>
108
+ {item?.label}
109
+ </Typography>
110
+ <Box className="connector"></Box>
111
+ </StyledStep>
112
+ ))}
113
+ </StyledStepsContainer>
114
+ )
115
+ }
@@ -1 +1 @@
1
- export { default } from './StepsHeader'
1
+ export { default } from './StepsHeader'
@@ -1,7 +1,7 @@
1
- import { IconButton, styled } from '@mui/material'
2
-
3
- const OutlinedIconButton = styled(IconButton)(({ theme }) => ({
4
- border: theme.borders.grayLight,
5
- minWidth: '50px',
6
- }))
7
- export default OutlinedIconButton
1
+ import { IconButton, styled } from '@mui/material'
2
+
3
+ const OutlinedIconButton = styled(IconButton)(({ theme }) => ({
4
+ border: theme.borders.grayLight,
5
+ minWidth: '50px',
6
+ }))
7
+ export default OutlinedIconButton
@@ -1 +1 @@
1
- export { default as OutlinedIconButton } from './OutlinedIconButton'
1
+ export { default as OutlinedIconButton } from './OutlinedIconButton'
@@ -1,33 +1,33 @@
1
- import styled from 'styled-components'
2
-
3
- export const StyledTableContainer = styled.div`
4
- /* background: white; */
5
- margin-top: 10px;
6
- border-radius: 16px;
7
-
8
- table thead tr {
9
- background-color: #efefef;
10
- }
11
-
12
- table,
13
- td,
14
- th {
15
- border: 1px solid #bebebe;
16
- padding: 8px;
17
- }
18
-
19
- table {
20
- background: white;
21
- width: 100%;
22
- border-collapse: collapse;
23
- }
24
-
25
- @media print {
26
- table,
27
- td,
28
- th {
29
- border: 1px solid black;
30
- padding: 8px;
31
- }
32
- }
33
- `
1
+ import styled from 'styled-components'
2
+
3
+ export const StyledTableContainer = styled.div`
4
+ /* background: white; */
5
+ margin-top: 10px;
6
+ border-radius: 16px;
7
+
8
+ table thead tr {
9
+ background-color: #efefef;
10
+ }
11
+
12
+ table,
13
+ td,
14
+ th {
15
+ border: 1px solid #bebebe;
16
+ padding: 8px;
17
+ }
18
+
19
+ table {
20
+ background: white;
21
+ width: 100%;
22
+ border-collapse: collapse;
23
+ }
24
+
25
+ @media print {
26
+ table,
27
+ td,
28
+ th {
29
+ border: 1px solid black;
30
+ padding: 8px;
31
+ }
32
+ }
33
+ `