diff --git a/src/components/Can.js b/src/components/Can.js
deleted file mode 100644
index a24a8d1f4..000000000
--- a/src/components/Can.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import React from 'react';
-import { Ability } from '@casl/ability';
-import { createContextualCan } from '@casl/react';
-
-import {
- Item_Abilities,
- AbilitySubject,
- Inventory_Adjustment_Abilities,
- Estimate_Abilities,
- Invoice_Abilities,
- Receipt_Abilities,
- PaymentReceive,
- Bill_Abilities,
- Payment_Made_Abilities,
- Customer_Abilities,
- Vendor_Abilities,
- Account_Abilities,
-} from '../common/abilityOption';
-
-export const AbilityContext = React.createContext();
-export const Can = createContextualCan(AbilityContext.Consumer);
-
-const AbilityContextProvider = (props) => {
- const ability = new Ability([
- {
- subject: [AbilitySubject.Account],
- action: [Account_Abilities.Create],
- },
- {
- subject: [AbilitySubject.Invoice],
- action: [],
- },
- ]);
-
- return (
-
- {props.children}
-
- );
-};
-
-export default AbilityContextProvider;
diff --git a/src/components/Dashboard/AuthenticatedUser.js b/src/components/Dashboard/AuthenticatedUser.js
deleted file mode 100644
index d65d58685..000000000
--- a/src/components/Dashboard/AuthenticatedUser.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import React from 'react';
-import { useUser } from 'hooks/query';
-import withAuthentication from '../../containers/Authentication/withAuthentication';
-
-const AuthenticatedUserContext = React.createContext();
-
-function AuthenticatedUserComponent({ authenticatedUserId, children }) {
- const { data: user, ...restProps } = useUser(authenticatedUserId);
-
- return (
-
- );
-}
-
-export const AuthenticatedUser = withAuthentication(
- ({ authenticatedUserId }) => ({
- authenticatedUserId,
- }),
-)(AuthenticatedUserComponent);
-
-export const useAuthenticatedUser = () =>
- React.useContext(AuthenticatedUserContext);
diff --git a/src/components/Dashboard/DashboardAbilityProvider.js b/src/components/Dashboard/DashboardAbilityProvider.js
new file mode 100644
index 000000000..b34166489
--- /dev/null
+++ b/src/components/Dashboard/DashboardAbilityProvider.js
@@ -0,0 +1,25 @@
+import React from 'react';
+import { Ability } from '@casl/ability';
+import { createContextualCan } from '@casl/react';
+import { useDashboardMeta } from '../../hooks/query';
+
+export const AbilityContext = React.createContext();
+export const Can = createContextualCan(AbilityContext.Consumer);
+
+/**
+ * Dashboard ability provider.
+ */
+export function DashboardAbilityProvider({ children }) {
+ const {
+ data: { abilities },
+ } = useDashboardMeta();
+
+ // Ability instance.
+ const ability = new Ability([]);
+
+ return (
+
+ {children}
+
+ );
+}
diff --git a/src/components/Dashboard/DashboardBoot.js b/src/components/Dashboard/DashboardBoot.js
index 81eadb658..d2b565c56 100644
--- a/src/components/Dashboard/DashboardBoot.js
+++ b/src/components/Dashboard/DashboardBoot.js
@@ -1,18 +1,40 @@
import React from 'react';
import * as R from 'ramda';
-
-import { useUser, useCurrentOrganization } from '../../hooks/query';
+import {
+ useAuthenticatedAccount,
+ useCurrentOrganization,
+ useDashboardMeta,
+} from '../../hooks/query';
import { useSplashLoading } from '../../hooks/state';
import { useWatch, useWatchImmediate, useWhen } from '../../hooks';
-import withAuthentication from '../../containers/Authentication/withAuthentication';
-
import { setCookie, getCookie } from '../../utils';
+/**
+ * Boots dashboard meta.
+ */
+function useDashboardMetaBoot() {
+ const {
+ data: dashboardMeta,
+ isLoading: isDashboardMetaLoading,
+ isSuccess: isDashboardMetaSuccess,
+ } = useDashboardMeta();
+
+ const [startLoading, stopLoading] = useSplashLoading();
+
+ useWatchImmediate((value) => {
+ value && startLoading();
+ }, isDashboardMetaLoading);
+
+ useWatchImmediate(() => {
+ isDashboardMetaSuccess && stopLoading();
+ }, isDashboardMetaSuccess);
+}
+
/**
* Dashboard async booting.
*/
-function DashboardBootJSX({ authenticatedUserId }) {
+export function DashboardBoot({ authenticatedUserId }) {
// Fetches the current user's organization.
const {
isSuccess: isCurrentOrganizationSuccess,
@@ -22,7 +44,9 @@ function DashboardBootJSX({ authenticatedUserId }) {
// Authenticated user.
const { isSuccess: isAuthUserSuccess, isLoading: isAuthUserLoading } =
- useUser(authenticatedUserId);
+ useAuthenticatedAccount();
+
+ useDashboardMetaBoot();
// Initial locale cookie value.
const localeCookie = getCookie('locale');
@@ -88,9 +112,3 @@ function DashboardBootJSX({ authenticatedUserId }) {
);
return null;
}
-
-export const DashboardBoot = R.compose(
- withAuthentication(({ authenticatedUserId }) => ({
- authenticatedUserId,
- })),
-)(DashboardBootJSX);
diff --git a/src/components/Dashboard/DashboardProvider.js b/src/components/Dashboard/DashboardProvider.js
index 77195b3c1..be0032e6b 100644
--- a/src/components/Dashboard/DashboardProvider.js
+++ b/src/components/Dashboard/DashboardProvider.js
@@ -1,9 +1,9 @@
import React from 'react';
-import AbilityContextProvider from '../../components/Can';
+import { DashboardAbilityProvider } from '../../components';
/**
* Dashboard provider.
*/
export default function DashboardProvider({ children }) {
- return {children};
+ return {children};
}
diff --git a/src/components/Dashboard/index.js b/src/components/Dashboard/index.js
index fb97e3182..6da46b013 100644
--- a/src/components/Dashboard/index.js
+++ b/src/components/Dashboard/index.js
@@ -1,3 +1,4 @@
export * from './SplashScreen';
export * from './DashboardBoot';
export * from './DashboardThemeProvider';
+export * from './DashboardAbilityProvider';
\ No newline at end of file
diff --git a/src/components/index.js b/src/components/index.js
index 5dc3efeb7..f30398145 100644
--- a/src/components/index.js
+++ b/src/components/index.js
@@ -59,7 +59,6 @@ import AvaterCell from './AvaterCell';
import { ItemsMultiSelect } from './Items';
import MoreMenuItems from './MoreMenutItems';
-import { Can } from './Can';
export * from './Dialog';
export * from './Menu';
@@ -157,5 +156,4 @@ export {
Card,
AvaterCell,
MoreMenuItems,
- Can,
};
diff --git a/src/hooks/utils/useAbilityContext.js b/src/hooks/utils/useAbilityContext.js
index 8eee4ec39..4aca97f3d 100644
--- a/src/hooks/utils/useAbilityContext.js
+++ b/src/hooks/utils/useAbilityContext.js
@@ -1,6 +1,4 @@
-import React from 'react';
import { useAbility } from '@casl/react';
-import { AbilityContext } from '../../components/Can';
-
-export const useAbilityContext = () => useAbility(AbilityContext);
+import { AbilityContext } from '../../components';
+export const useAbilityContext = () => useAbility(AbilityContext);
\ No newline at end of file