mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-22 15:50:32 +00:00
fix: BIG-337 Display billing page once the organization subscription is inactive.
This commit is contained in:
@@ -1,7 +1,8 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Ability } from '@casl/ability';
|
import { Ability } from '@casl/ability';
|
||||||
import { createContextualCan } from '@casl/react';
|
import { createContextualCan } from '@casl/react';
|
||||||
import { useDashboardMeta } from '../../hooks/query';
|
|
||||||
|
import { useDashboardMetaBoot } from './DashboardBoot';
|
||||||
|
|
||||||
export const AbilityContext = React.createContext();
|
export const AbilityContext = React.createContext();
|
||||||
export const Can = createContextualCan(AbilityContext.Consumer);
|
export const Can = createContextualCan(AbilityContext.Consumer);
|
||||||
@@ -11,8 +12,8 @@ export const Can = createContextualCan(AbilityContext.Consumer);
|
|||||||
*/
|
*/
|
||||||
export function DashboardAbilityProvider({ children }) {
|
export function DashboardAbilityProvider({ children }) {
|
||||||
const {
|
const {
|
||||||
data: { abilities },
|
meta: { abilities },
|
||||||
} = useDashboardMeta();
|
} = useDashboardMetaBoot();
|
||||||
|
|
||||||
// Ability instance.
|
// Ability instance.
|
||||||
const ability = new Ability(abilities);
|
const ability = new Ability(abilities);
|
||||||
|
|||||||
@@ -6,18 +6,26 @@ import {
|
|||||||
} from '../../hooks/query';
|
} from '../../hooks/query';
|
||||||
import { useSplashLoading } from '../../hooks/state';
|
import { useSplashLoading } from '../../hooks/state';
|
||||||
import { useWatch, useWatchImmediate, useWhen } from '../../hooks';
|
import { useWatch, useWatchImmediate, useWhen } from '../../hooks';
|
||||||
|
import { useSubscription } from '../../hooks/state';
|
||||||
import { setCookie, getCookie } from '../../utils';
|
import { setCookie, getCookie } from '../../utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dashboard meta async booting.
|
* Dashboard meta async booting.
|
||||||
|
* - Fetches the dashboard meta only if the organization subscribe is active.
|
||||||
|
* - Once the dashboard meta query is loading display dashboard splash screen.
|
||||||
*/
|
*/
|
||||||
export function useDashboardMetaBoot() {
|
export function useDashboardMetaBoot() {
|
||||||
|
const { isSubscriptionActive } = useSubscription();
|
||||||
|
|
||||||
const {
|
const {
|
||||||
data: dashboardMeta,
|
data: dashboardMeta,
|
||||||
isLoading: isDashboardMetaLoading,
|
isLoading: isDashboardMetaLoading,
|
||||||
isSuccess: isDashboardMetaSuccess,
|
isSuccess: isDashboardMetaSuccess,
|
||||||
} = useDashboardMeta({
|
} = useDashboardMeta({
|
||||||
keepPreviousData: true,
|
keepPreviousData: true,
|
||||||
|
|
||||||
|
// Avoid run the query if the organization subscription is not active.
|
||||||
|
enabled: isSubscriptionActive,
|
||||||
});
|
});
|
||||||
const [startLoading, stopLoading] = useSplashLoading();
|
const [startLoading, stopLoading] = useSplashLoading();
|
||||||
|
|
||||||
@@ -30,20 +38,12 @@ export function useDashboardMetaBoot() {
|
|||||||
}, isDashboardMetaSuccess);
|
}, isDashboardMetaSuccess);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
meta: dashboardMeta,
|
||||||
isLoading: isDashboardMetaLoading,
|
isLoading: isDashboardMetaLoading,
|
||||||
|
isSuccess: isDashboardMetaSuccess
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Dashboard async booting.
|
|
||||||
* @returns {{ isLoading: boolean }}
|
|
||||||
*/
|
|
||||||
export function useDashboardBoot() {
|
|
||||||
const { isLoading } = useDashboardMetaBoot();
|
|
||||||
|
|
||||||
return { isLoading };
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Application async booting.
|
* Application async booting.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { DashboardAbilityProvider } from '../../components';
|
import { DashboardAbilityProvider } from '../../components';
|
||||||
import { useDashboardBoot } from './DashboardBoot';
|
import { useDashboardMetaBoot } from './DashboardBoot';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dashboard provider.
|
* Dashboard provider.
|
||||||
*/
|
*/
|
||||||
export default function DashboardProvider({ children }) {
|
export default function DashboardProvider({ children }) {
|
||||||
const { isLoading } = useDashboardBoot();
|
const { isLoading } = useDashboardMetaBoot();
|
||||||
|
|
||||||
// Avoid display any dashboard component before complete booting.
|
// Avoid display any dashboard component before complete booting.
|
||||||
if (isLoading) {
|
if (isLoading) {
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
import { useCallback } from "react"
|
import { useCallback } from "react"
|
||||||
import { useDispatch } from "react-redux";
|
import { useDispatch, useSelector } from "react-redux";
|
||||||
import { setSubscriptions } from 'store/subscription/subscription.actions';
|
import { setSubscriptions } from 'store/subscription/subscription.actions';
|
||||||
|
import {
|
||||||
|
isSubscriptionOnTrialFactory,
|
||||||
|
isSubscriptionInactiveFactory,
|
||||||
|
isSubscriptionActiveFactory,
|
||||||
|
} from 'store/subscription/subscription.selectors';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets subscriptions.
|
* Sets subscriptions.
|
||||||
@@ -12,3 +17,20 @@ export const useSetSubscriptions = () => {
|
|||||||
dispatch(setSubscriptions(subscriptions));
|
dispatch(setSubscriptions(subscriptions));
|
||||||
}, [dispatch]);
|
}, [dispatch]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The organization subscription selector.
|
||||||
|
* @param {string} slug
|
||||||
|
* @returns {}
|
||||||
|
*/
|
||||||
|
export const useSubscription = (slug = 'main') => {
|
||||||
|
const isSubscriptionOnTrial = useSelector(isSubscriptionOnTrialFactory(slug));
|
||||||
|
const isSubscriptionInactive = useSelector(isSubscriptionInactiveFactory(slug));
|
||||||
|
const isSubscriptionActive = useSelector(isSubscriptionActiveFactory(slug));
|
||||||
|
|
||||||
|
return {
|
||||||
|
isSubscriptionActive,
|
||||||
|
isSubscriptionInactive,
|
||||||
|
isSubscriptionOnTrial
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user