@campxdev/shared 0.3.12 → 0.3.14

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 (181) hide show
  1. package/antd.customize.less +73 -73
  2. package/exports.ts +15 -15
  3. package/package.json +51 -51
  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 +16 -16
  7. package/src/components/ActionButton.tsx +28 -28
  8. package/src/components/Attachment.tsx +26 -26
  9. package/src/components/AutocompleteSearch/AutocompleteSearch.tsx +57 -57
  10. package/src/components/AutocompleteSearch/index.tsx +1 -1
  11. package/src/components/Breadcrumbs.tsx +73 -73
  12. package/src/components/Card.tsx +97 -97
  13. package/src/components/CardsGrid.tsx +28 -28
  14. package/src/components/Chips.tsx +77 -77
  15. package/src/components/Detail.tsx +15 -15
  16. package/src/components/DetailsGrid.tsx +52 -52
  17. package/src/components/DividerHeading.tsx +40 -40
  18. package/src/components/DrawerWrapper/DialogWrapper.tsx +63 -63
  19. package/src/components/DrawerWrapper/DrawerTemplate.tsx +53 -53
  20. package/src/components/DrawerWrapper/DrawerWrapper.tsx +53 -53
  21. package/src/components/DropDownButton.tsx +184 -184
  22. package/src/components/ErrorBoundary/ErrorBoundary.tsx +28 -28
  23. package/src/components/ErrorBoundary/ErrorFallback.tsx +180 -180
  24. package/src/components/ErrorBoundary/GlobalNetworkLoadingIndicator.tsx +13 -13
  25. package/src/components/ErrorBoundary/index.tsx +1 -1
  26. package/src/components/ErrorBox.tsx +42 -42
  27. package/src/components/FloatingContainer.tsx +26 -26
  28. package/src/components/FullCalendar/Actions.tsx +162 -162
  29. package/src/components/FullCalendar/FullCalendarWrapper.tsx +54 -54
  30. package/src/components/FullScreenLoader.tsx +19 -19
  31. package/src/components/HookForm/AutoCompleteSearch.tsx +143 -143
  32. package/src/components/HookForm/DatePicker.tsx +65 -65
  33. package/src/components/HookForm/DateTimePicker.tsx +70 -70
  34. package/src/components/HookForm/FormLabel.tsx +14 -14
  35. package/src/components/HookForm/MultiCheckbox.tsx +82 -82
  36. package/src/components/HookForm/MultiSelect.tsx +100 -100
  37. package/src/components/HookForm/RadioGroup.tsx +112 -112
  38. package/src/components/HookForm/SingleCheckbox.tsx +46 -46
  39. package/src/components/HookForm/SingleSelect.tsx +93 -93
  40. package/src/components/HookForm/TextField.tsx +74 -74
  41. package/src/components/HookForm/TimePicker.tsx +82 -82
  42. package/src/components/HookForm/index.ts +23 -23
  43. package/src/components/IconButtons/IconButtons.tsx +137 -137
  44. package/src/components/IconButtons/Icons.tsx +268 -268
  45. package/src/components/IconButtons/assets/edit.svg +4 -4
  46. package/src/components/IconButtons/assets/eye.svg +6 -6
  47. package/src/components/IconButtons/assets/trash.svg +7 -7
  48. package/src/components/IconButtons/index.tsx +8 -8
  49. package/src/components/IconLabel.tsx +37 -37
  50. package/src/components/Image/Image.tsx +43 -43
  51. package/src/components/Image/index.tsx +1 -1
  52. package/src/components/ImageUpload.tsx +98 -98
  53. package/src/components/Input/AutoCompleteSearch.tsx +143 -143
  54. package/src/components/Input/DatePicker.tsx +60 -60
  55. package/src/components/Input/DateRangePicker.tsx +131 -131
  56. package/src/components/Input/DateTimePicker.tsx +70 -70
  57. package/src/components/Input/FormLabel.tsx +14 -14
  58. package/src/components/Input/MultiCheckbox.tsx +79 -79
  59. package/src/components/Input/MultiSelect.tsx +52 -52
  60. package/src/components/Input/RadioGroup.tsx +55 -55
  61. package/src/components/Input/SingleCheckbox.tsx +23 -23
  62. package/src/components/Input/SingleSelect.tsx +139 -139
  63. package/src/components/Input/TextField.tsx +50 -50
  64. package/src/components/Input/TimePicker.tsx +82 -82
  65. package/src/components/Input/index.ts +26 -26
  66. package/src/components/JsonPreview/JsonPreview.tsx +7 -7
  67. package/src/components/JsonPreview/index.tsx +1 -1
  68. package/src/components/LabelValue/LabelValue.tsx +21 -21
  69. package/src/components/LabelValue/index.tsx +1 -1
  70. package/src/components/Layout/ChangePassword.tsx +49 -49
  71. package/src/components/Layout/Header/AppHeader.tsx +120 -120
  72. package/src/components/Layout/Header/AppsMenu.tsx +85 -85
  73. package/src/components/Layout/Header/CogWheelMenu.tsx +33 -33
  74. package/src/components/Layout/Header/FreshDeskHelpButton.tsx +19 -19
  75. package/src/components/Layout/Header/Notification.tsx +13 -13
  76. package/src/components/Layout/Header/UserBox.tsx +42 -42
  77. package/src/components/Layout/Header/applications.tsx +60 -60
  78. package/src/components/Layout/Header/assets/index.ts +7 -7
  79. package/src/components/Layout/Header/icons.tsx +57 -57
  80. package/src/components/Layout/Header/index.tsx +1 -1
  81. package/src/components/Layout/Header/styles.tsx +91 -91
  82. package/src/components/LinearProgress.tsx +19 -19
  83. package/src/components/LoginForm.tsx +101 -103
  84. package/src/components/MediaRow/MediaRow.tsx +69 -69
  85. package/src/components/MediaRow/index.tsx +1 -1
  86. package/src/components/MenuButton.tsx +103 -103
  87. package/src/components/ModalButtons/DialogButton.tsx +85 -85
  88. package/src/components/ModalButtons/DrawerButton.tsx +89 -89
  89. package/src/components/ModalButtons/index.tsx +4 -4
  90. package/src/components/NoDataIllustration/NoDataIllustration.tsx +32 -32
  91. package/src/components/NoDataIllustration/index.tsx +1 -1
  92. package/src/components/PageContent.tsx +17 -17
  93. package/src/components/PageHeader.tsx +52 -52
  94. package/src/components/PageNotFound.tsx +25 -25
  95. package/src/components/PopupConfirm/ConfirmContextProvider.tsx +40 -40
  96. package/src/components/PopupConfirm/PopupConfirm.tsx +34 -34
  97. package/src/components/PopupConfirm/index.tsx +1 -1
  98. package/src/components/PopupConfirm/useConfirm.ts +47 -47
  99. package/src/components/Row/Row.tsx +24 -24
  100. package/src/components/Row/index.tsx +1 -1
  101. package/src/components/SearchBar/SearchBar.tsx +53 -53
  102. package/src/components/SearchBar/index.tsx +1 -1
  103. package/src/components/Spinner.tsx +18 -18
  104. package/src/components/StepsHeader/StepsHeader.tsx +115 -115
  105. package/src/components/StepsHeader/index.tsx +1 -1
  106. package/src/components/Styled/OutlinedIconButton.tsx +7 -7
  107. package/src/components/Styled/index.tsx +1 -1
  108. package/src/components/StyledTableContainer.tsx +33 -33
  109. package/src/components/Swiper/Swiper.tsx +39 -39
  110. package/src/components/Swiper/index.tsx +1 -1
  111. package/src/components/SwitchButton/SwitchButton.tsx +41 -41
  112. package/src/components/SwitchButton/index.tsx +1 -1
  113. package/src/components/Table.tsx +42 -42
  114. package/src/components/TableComponent/BatchActionsHeader.tsx +58 -58
  115. package/src/components/TableComponent/Icons/index.tsx +50 -50
  116. package/src/components/TableComponent/ReactTable.tsx +293 -293
  117. package/src/components/TableComponent/RenderTableBody.tsx +64 -64
  118. package/src/components/TableComponent/TableFooter/TableFooter.tsx +102 -102
  119. package/src/components/TableComponent/TableFooter/index.tsx +1 -1
  120. package/src/components/TableComponent/TableFooter/styles.tsx +28 -28
  121. package/src/components/TableComponent/index.tsx +221 -221
  122. package/src/components/TableComponent/react-table-config.d.ts +129 -129
  123. package/src/components/TableComponent/styles.tsx +173 -173
  124. package/src/components/TableComponent/types.ts +57 -57
  125. package/src/components/Tabs/Tabs.tsx +52 -52
  126. package/src/components/Tabs/TabsContainer.tsx +50 -50
  127. package/src/components/Tabs/index.tsx +1 -1
  128. package/src/components/Tabs/styles.tsx +55 -55
  129. package/src/components/ToastContainer/ToastContainer.tsx +42 -42
  130. package/src/components/ToastContainer/index.tsx +1 -1
  131. package/src/components/UploadButton/UploadButton.tsx +98 -98
  132. package/src/components/UploadButton/index.tsx +1 -1
  133. package/src/components/UploadButton/types.ts +14 -14
  134. package/src/components/UploadDocument/UploadDocument.tsx +108 -108
  135. package/src/components/UploadDocument/index.tsx +1 -1
  136. package/src/components/UploadFileDialog/UploadFileDialog.tsx +240 -240
  137. package/src/components/UploadFileDialog/index.tsx +1 -1
  138. package/src/components/index.ts +67 -67
  139. package/src/config/axios.ts +73 -72
  140. package/src/constants/UIConstants.ts +97 -97
  141. package/src/constants/formValidations.ts +6 -6
  142. package/src/constants/index.ts +5 -5
  143. package/src/constants/isDevelopment.ts +3 -3
  144. package/src/constants/permissions.ts +67 -67
  145. package/src/constants/validateMessages.ts +12 -12
  146. package/src/contexts/LoginFormProvider.tsx +39 -39
  147. package/src/contexts/Providers.tsx +27 -27
  148. package/src/contexts/QueryClientProvider.tsx +22 -22
  149. package/src/hooks/index.ts +3 -3
  150. package/src/hooks/useAuth.ts +77 -77
  151. package/src/hooks/useFetch.ts +53 -53
  152. package/src/hooks/useRouter.ts +31 -31
  153. package/src/layouts/ComponentsLayout.tsx +3 -3
  154. package/src/permissions/PageWithPermission.tsx +18 -18
  155. package/src/permissions/PermissionDeniedPage.tsx +16 -16
  156. package/src/permissions/PermissionsStore.ts +291 -291
  157. package/src/permissions/ValidateAccess.tsx +18 -18
  158. package/src/permissions/index.ts +3 -3
  159. package/src/react-app-env.d.ts +1 -1
  160. package/src/shared-state/AssetsStore.ts +15 -15
  161. package/src/shared-state/UserStore.ts +13 -13
  162. package/src/shared-state/index.ts +3 -3
  163. package/src/theme/App.less +3 -3
  164. package/src/theme/MuiThemeProvider.tsx +13 -13
  165. package/src/theme/customCssBaseline.ts +78 -78
  166. package/src/theme/index.css +75 -75
  167. package/src/theme/muiTheme.ts +516 -516
  168. package/src/theme/theme.d.ts +75 -75
  169. package/src/utils/alphabet.ts +23 -23
  170. package/src/utils/arrayPadEnd.ts +3 -3
  171. package/src/utils/formatCurrency.ts +9 -9
  172. package/src/utils/getUrlParams.ts +5 -5
  173. package/src/utils/index.ts +8 -8
  174. package/src/utils/logout.ts +23 -23
  175. package/src/utils/ordinalSuffixOf.ts +14 -14
  176. package/src/utils/romanize.ts +40 -40
  177. package/src/utils/withLocalization.tsx +11 -11
  178. package/src/utils/withRouteWrapper.tsx +26 -26
  179. package/src/utils/withSuspense.tsx +6 -6
  180. package/styled-components.tsx +60 -60
  181. package/tsconfig.json +21 -21
@@ -1,22 +1,22 @@
1
- import {
2
- QueryClient,
3
- QueryClientProvider as ReactQueryClientProvider,
4
- } from 'react-query'
5
-
6
- export const queryClient = new QueryClient({
7
- defaultOptions: {
8
- queries: {
9
- refetchOnWindowFocus: false,
10
- retry: false,
11
- useErrorBoundary: true,
12
- },
13
- },
14
- })
15
-
16
- export default function QueryClientProvider({children}) {
17
- return (
18
- <ReactQueryClientProvider client={queryClient}>
19
- {children}
20
- </ReactQueryClientProvider>
21
- )
22
- }
1
+ import {
2
+ QueryClient,
3
+ QueryClientProvider as ReactQueryClientProvider,
4
+ } from 'react-query'
5
+
6
+ export const queryClient = new QueryClient({
7
+ defaultOptions: {
8
+ queries: {
9
+ refetchOnWindowFocus: false,
10
+ retry: false,
11
+ useErrorBoundary: true,
12
+ },
13
+ },
14
+ })
15
+
16
+ export default function QueryClientProvider({children}) {
17
+ return (
18
+ <ReactQueryClientProvider client={queryClient}>
19
+ {children}
20
+ </ReactQueryClientProvider>
21
+ )
22
+ }
@@ -1,3 +1,3 @@
1
- export {default as useFetch} from './useFetch'
2
- export * from './useRouter'
3
- export {default as useAuth} from './useAuth'
1
+ export {default as useFetch} from './useFetch'
2
+ export * from './useRouter'
3
+ export {default as useAuth} from './useAuth'
@@ -1,77 +1,77 @@
1
- import {useEffect, useState} from 'react'
2
- import {toast} from 'react-toastify'
3
- import axios from '../config/axios'
4
- import {isDevelopment} from '../constants'
5
- import {useLoginForm} from '../contexts/LoginFormProvider'
6
- import {PermissionsStore} from '../permissions'
7
- import {AssetsStore, UserStore} from '../shared-state'
8
-
9
- const url = window.location.origin
10
-
11
- function useAuth(): {
12
- loading: boolean
13
- data: {
14
- user?: any
15
- roles?: any
16
- username?: any
17
- permissions?: any
18
- assets?: {
19
- logo: string
20
- logo_square: string
21
- }
22
- }
23
- } {
24
- const {openLoginForm} = useLoginForm()
25
- const [loading, setLoading] = useState<boolean>(false)
26
- const [data, setData] = useState(null)
27
-
28
- const appInit = async () => {
29
- setLoading(true)
30
- axios
31
- .get('/auth/my-permissions')
32
- .then((res) => {
33
- setLoading(false)
34
- setData(res.data)
35
- UserStore.update((s) => {
36
- s.username = res.data?.username
37
- s.user = res.data?.user
38
- s.roles = res.data?.roles
39
- })
40
-
41
- PermissionsStore.update((s) => {
42
- s.permissions = {
43
- ...res.data?.permissions,
44
- can_settings_view: 1,
45
- can_dashboard_view: 1,
46
- can_individual_pages_view: 1,
47
- } as any
48
- })
49
- AssetsStore.update((s) => {
50
- s.logo = res.data?.assets.logo
51
- s.logo_square = res.data?.assets.logo_square
52
- })
53
- })
54
- .catch((err) => {
55
- setLoading(false)
56
- if (err.response.status !== 401) {
57
- toast.error('Server Error')
58
- }
59
- if (isDevelopment) {
60
- openLoginForm()
61
- } else {
62
- window.location.replace(`https://www.id.campx.in/?redirect_to=${url}`)
63
- }
64
- })
65
- }
66
-
67
- useEffect(() => {
68
- appInit()
69
- }, [])
70
-
71
- return {
72
- loading: loading || !data?.permissions,
73
- data,
74
- }
75
- }
76
-
77
- export default useAuth
1
+ import {useEffect, useState} from 'react'
2
+ import {toast} from 'react-toastify'
3
+ import axios from '../config/axios'
4
+ import {isDevelopment} from '../constants'
5
+ import {useLoginForm} from '../contexts/LoginFormProvider'
6
+ import {PermissionsStore} from '../permissions'
7
+ import {AssetsStore, UserStore} from '../shared-state'
8
+
9
+ const url = window.location.origin
10
+
11
+ function useAuth(): {
12
+ loading: boolean
13
+ data: {
14
+ user?: any
15
+ roles?: any
16
+ username?: any
17
+ permissions?: any
18
+ assets?: {
19
+ logo: string
20
+ logo_square: string
21
+ }
22
+ }
23
+ } {
24
+ const {openLoginForm} = useLoginForm()
25
+ const [loading, setLoading] = useState<boolean>(false)
26
+ const [data, setData] = useState(null)
27
+
28
+ const appInit = async () => {
29
+ setLoading(true)
30
+ axios
31
+ .get('/auth/my-permissions')
32
+ .then((res) => {
33
+ setLoading(false)
34
+ setData(res.data)
35
+ UserStore.update((s) => {
36
+ s.username = res.data?.username
37
+ s.user = res.data?.user
38
+ s.roles = res.data?.roles
39
+ })
40
+
41
+ PermissionsStore.update((s) => {
42
+ s.permissions = {
43
+ ...res.data?.permissions,
44
+ can_settings_view: 1,
45
+ can_dashboard_view: 1,
46
+ can_individual_pages_view: 1,
47
+ } as any
48
+ })
49
+ AssetsStore.update((s) => {
50
+ s.logo = res.data?.assets.logo
51
+ s.logo_square = res.data?.assets.logo_square
52
+ })
53
+ })
54
+ .catch((err) => {
55
+ setLoading(false)
56
+ if (err.response.status !== 401) {
57
+ toast.error('Server Error')
58
+ }
59
+ if (isDevelopment) {
60
+ openLoginForm()
61
+ } else {
62
+ window.location.replace(`https://www.id.campx.in/?redirect_to=${url}`)
63
+ }
64
+ })
65
+ }
66
+
67
+ useEffect(() => {
68
+ appInit()
69
+ }, [])
70
+
71
+ return {
72
+ loading: loading || !data?.permissions,
73
+ data,
74
+ }
75
+ }
76
+
77
+ export default useAuth
@@ -1,53 +1,53 @@
1
- import { useEffect, useState } from 'react'
2
- import axios from '../config/axios'
3
-
4
- export function useMockFetch(promiseFn: Function) {
5
- const [data, setData] = useState<any>()
6
- const [error, setError] = useState<any>(null)
7
- const [loading, setLoading] = useState(true)
8
-
9
- useEffect(() => {
10
- setLoading(true)
11
- promiseFn()
12
- .then((res) => {
13
- setData(res.data)
14
- setLoading(false)
15
- })
16
- .catch((err) => {
17
- setLoading(false)
18
- setError(null)
19
- })
20
- }, [])
21
-
22
- return {
23
- data,
24
- loading,
25
- }
26
- }
27
-
28
- export default function useFetch(url: string, skip?: boolean) {
29
- const [data, setData] = useState<any>()
30
- const [error, setError] = useState<any>(null)
31
- const [loading, setLoading] = useState(true)
32
-
33
- useEffect(() => {
34
- if (skip) return
35
- setLoading(true)
36
- axios
37
- .get(url)
38
- .then((res) => {
39
- setData(res.data)
40
- setLoading(false)
41
- })
42
- .catch((err) => {
43
- setError(err)
44
- setLoading(false)
45
- })
46
- }, [])
47
-
48
- return {
49
- data,
50
- loading,
51
- error,
52
- }
53
- }
1
+ import { useEffect, useState } from 'react'
2
+ import axios from '../config/axios'
3
+
4
+ export function useMockFetch(promiseFn: Function) {
5
+ const [data, setData] = useState<any>()
6
+ const [error, setError] = useState<any>(null)
7
+ const [loading, setLoading] = useState(true)
8
+
9
+ useEffect(() => {
10
+ setLoading(true)
11
+ promiseFn()
12
+ .then((res) => {
13
+ setData(res.data)
14
+ setLoading(false)
15
+ })
16
+ .catch((err) => {
17
+ setLoading(false)
18
+ setError(null)
19
+ })
20
+ }, [])
21
+
22
+ return {
23
+ data,
24
+ loading,
25
+ }
26
+ }
27
+
28
+ export default function useFetch(url: string, skip?: boolean) {
29
+ const [data, setData] = useState<any>()
30
+ const [error, setError] = useState<any>(null)
31
+ const [loading, setLoading] = useState(true)
32
+
33
+ useEffect(() => {
34
+ if (skip) return
35
+ setLoading(true)
36
+ axios
37
+ .get(url)
38
+ .then((res) => {
39
+ setData(res.data)
40
+ setLoading(false)
41
+ })
42
+ .catch((err) => {
43
+ setError(err)
44
+ setLoading(false)
45
+ })
46
+ }, [])
47
+
48
+ return {
49
+ data,
50
+ loading,
51
+ error,
52
+ }
53
+ }
@@ -1,31 +1,31 @@
1
- import { useLocation, useMatch, useNavigate, useParams } from 'react-router-dom'
2
-
3
- const useHistory = () => {
4
- const navigate = useNavigate()
5
- const { pathname, search } = useLocation()
6
-
7
- return {
8
- push: navigate,
9
- location: {
10
- pathname: pathname,
11
- search: search,
12
- },
13
- }
14
- }
15
- const useRouteMatch = (path?) => {
16
- const { pathname } = useLocation()
17
- const params = useParams()
18
- const match = useMatch({ path, end: false })
19
- // console.log({
20
- // match,
21
- // params,
22
- // pathname,
23
- // })
24
- return {
25
- params: params,
26
- path: match?.pattern?.path,
27
- url: pathname,
28
- }
29
- }
30
-
31
- export { useHistory, useRouteMatch }
1
+ import { useLocation, useMatch, useNavigate, useParams } from 'react-router-dom'
2
+
3
+ const useHistory = () => {
4
+ const navigate = useNavigate()
5
+ const { pathname, search } = useLocation()
6
+
7
+ return {
8
+ push: navigate,
9
+ location: {
10
+ pathname: pathname,
11
+ search: search,
12
+ },
13
+ }
14
+ }
15
+ const useRouteMatch = (path?) => {
16
+ const { pathname } = useLocation()
17
+ const params = useParams()
18
+ const match = useMatch({ path, end: false })
19
+ // console.log({
20
+ // match,
21
+ // params,
22
+ // pathname,
23
+ // })
24
+ return {
25
+ params: params,
26
+ path: match?.pattern?.path,
27
+ url: pathname,
28
+ }
29
+ }
30
+
31
+ export { useHistory, useRouteMatch }
@@ -1,3 +1,3 @@
1
- export default function ComponentsLayout() {
2
- return <div>ComponentsLayout</div>
3
- }
1
+ export default function ComponentsLayout() {
2
+ return <div>ComponentsLayout</div>
3
+ }
@@ -1,18 +1,18 @@
1
- import PermissionDeniedPage from './PermissionDeniedPage'
2
- import {PermissionsStore} from './PermissionsStore'
3
-
4
- const accessIfNoKey = process.env.NODE_ENV === 'development' ? true : false
5
-
6
- export default function PageWithPermission({
7
- permissionKey,
8
- children,
9
- }: {
10
- permissionKey: string
11
- children?: any
12
- }) {
13
- const permissions = PermissionsStore.useState((s) => s).permissions
14
- const hasAccess = permissionKey ? permissions[permissionKey] : accessIfNoKey
15
-
16
- if (hasAccess) return children
17
- return <PermissionDeniedPage />
18
- }
1
+ import PermissionDeniedPage from './PermissionDeniedPage'
2
+ import {PermissionsStore} from './PermissionsStore'
3
+
4
+ const accessIfNoKey = process.env.NODE_ENV === 'development' ? true : false
5
+
6
+ export default function PageWithPermission({
7
+ permissionKey,
8
+ children,
9
+ }: {
10
+ permissionKey: string
11
+ children?: any
12
+ }) {
13
+ const permissions = PermissionsStore.useState((s) => s).permissions
14
+ const hasAccess = permissionKey ? permissions[permissionKey] : accessIfNoKey
15
+
16
+ if (hasAccess) return children
17
+ return <PermissionDeniedPage />
18
+ }
@@ -1,16 +1,16 @@
1
- import {Box, Typography} from '@mui/material'
2
-
3
- export default function PermissionDeniedPage() {
4
- return (
5
- <Box
6
- sx={{
7
- height: '100vh',
8
- width: '100%',
9
- display: 'grid',
10
- placeItems: 'center',
11
- }}
12
- >
13
- <Typography variant='h6'>Permission Denied</Typography>
14
- </Box>
15
- )
16
- }
1
+ import {Box, Typography} from '@mui/material'
2
+
3
+ export default function PermissionDeniedPage() {
4
+ return (
5
+ <Box
6
+ sx={{
7
+ height: '100vh',
8
+ width: '100%',
9
+ display: 'grid',
10
+ placeItems: 'center',
11
+ }}
12
+ >
13
+ <Typography variant='h6'>Permission Denied</Typography>
14
+ </Box>
15
+ )
16
+ }