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