mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-22 15:50:32 +00:00
feat(Sidebar): filter sidebar items based on subscription state.
This commit is contained in:
@@ -4,6 +4,7 @@ import { Features } from '../common/features';
|
|||||||
import {
|
import {
|
||||||
ISidebarMenuItemType,
|
ISidebarMenuItemType,
|
||||||
ISidebarMenuOverlayIds,
|
ISidebarMenuOverlayIds,
|
||||||
|
ISidebarSubscriptionAbility,
|
||||||
} from '../containers/Dashboard/Sidebar/interfaces';
|
} from '../containers/Dashboard/Sidebar/interfaces';
|
||||||
import {
|
import {
|
||||||
ReportsAction,
|
ReportsAction,
|
||||||
@@ -75,7 +76,7 @@ export const SidebarMenu = [
|
|||||||
text: <T id={'sidebar_warehouse_transfer'} />,
|
text: <T id={'sidebar_warehouse_transfer'} />,
|
||||||
href: '/warehouses-transfers',
|
href: '/warehouses-transfers',
|
||||||
type: ISidebarMenuItemType.Link,
|
type: ISidebarMenuItemType.Link,
|
||||||
feature: Features.Warehouses
|
feature: Features.Warehouses,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: <T id={'category_list'} />,
|
text: <T id={'category_list'} />,
|
||||||
@@ -107,7 +108,7 @@ export const SidebarMenu = [
|
|||||||
),
|
),
|
||||||
href: '/warehouses-transfers/new',
|
href: '/warehouses-transfers/new',
|
||||||
type: ISidebarMenuItemType.Link,
|
type: ISidebarMenuItemType.Link,
|
||||||
feature: Features.Warehouses
|
feature: Features.Warehouses,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: <T id={'New service'} />,
|
text: <T id={'New service'} />,
|
||||||
@@ -726,6 +727,10 @@ export const SidebarMenu = [
|
|||||||
text: <T id={'billing'} />,
|
text: <T id={'billing'} />,
|
||||||
href: '/billing',
|
href: '/billing',
|
||||||
type: ISidebarMenuItemType.Link,
|
type: ISidebarMenuItemType.Link,
|
||||||
|
subscription: [
|
||||||
|
ISidebarSubscriptionAbility.Expired,
|
||||||
|
ISidebarSubscriptionAbility.Active,
|
||||||
|
],
|
||||||
permission: {
|
permission: {
|
||||||
subject: AbilitySubject.SubscriptionBilling,
|
subject: AbilitySubject.SubscriptionBilling,
|
||||||
ability: SubscriptionBillingAbility.View,
|
ability: SubscriptionBillingAbility.View,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import _, { isEmpty } from 'lodash';
|
import _, { isEmpty, includes } from 'lodash';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import * as R from 'ramda';
|
import * as R from 'ramda';
|
||||||
import { useHistory } from 'react-router-dom';
|
import { useHistory } from 'react-router-dom';
|
||||||
@@ -6,8 +6,15 @@ import { useHistory } from 'react-router-dom';
|
|||||||
import { useAbilityContext } from 'hooks';
|
import { useAbilityContext } from 'hooks';
|
||||||
import { useSidebarSubmenu, useFeatureCan } from 'hooks/state';
|
import { useSidebarSubmenu, useFeatureCan } from 'hooks/state';
|
||||||
import { SidebarMenu } from 'config/sidebarMenu';
|
import { SidebarMenu } from 'config/sidebarMenu';
|
||||||
import { ISidebarMenuItemType } from './interfaces';
|
import {
|
||||||
import { useSidebarSubmnuActions, useDialogActions } from 'hooks/state';
|
ISidebarMenuItemType,
|
||||||
|
ISidebarSubscriptionAbility,
|
||||||
|
} from './interfaces';
|
||||||
|
import {
|
||||||
|
useSidebarSubmnuActions,
|
||||||
|
useDialogActions,
|
||||||
|
useSubscription,
|
||||||
|
} from 'hooks/state';
|
||||||
import { filterValuesDeep, deepdash } from 'utils';
|
import { filterValuesDeep, deepdash } from 'utils';
|
||||||
|
|
||||||
const deepDashConfig = {
|
const deepDashConfig = {
|
||||||
@@ -75,6 +82,36 @@ function useFilterSidebarItemAbilityPredicater() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filters the sidebar item based on the subscription state.
|
||||||
|
*/
|
||||||
|
function useFilterSidebarItemSubscriptionPredicater() {
|
||||||
|
const { isSubscriptionActive, isSubscriptionInactive } = useSubscription();
|
||||||
|
|
||||||
|
return {
|
||||||
|
predicate: (item) => {
|
||||||
|
const { subscription } = item;
|
||||||
|
|
||||||
|
if (subscription) {
|
||||||
|
const isActive = includes(subscription, [
|
||||||
|
ISidebarSubscriptionAbility.Active,
|
||||||
|
])
|
||||||
|
? isSubscriptionActive
|
||||||
|
: true;
|
||||||
|
|
||||||
|
const isInactive = includes(subscription, [
|
||||||
|
ISidebarSubscriptionAbility.Inactive,
|
||||||
|
])
|
||||||
|
? isSubscriptionInactive
|
||||||
|
: true;
|
||||||
|
|
||||||
|
return isActive && isInactive;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filters sidebar menu items based on ability of the item permission.
|
* Filters sidebar menu items based on ability of the item permission.
|
||||||
* @param {*} menu
|
* @param {*} menu
|
||||||
@@ -83,11 +120,13 @@ function useFilterSidebarItemAbilityPredicater() {
|
|||||||
function useFilterSidebarMenuAbility(menu) {
|
function useFilterSidebarMenuAbility(menu) {
|
||||||
const { predicate: predFeature } = useFilterSidebarItemFeaturePredicater();
|
const { predicate: predFeature } = useFilterSidebarItemFeaturePredicater();
|
||||||
const { predicate: predAbility } = useFilterSidebarItemAbilityPredicater();
|
const { predicate: predAbility } = useFilterSidebarItemAbilityPredicater();
|
||||||
|
const { predicate: predSubscription } =
|
||||||
|
useFilterSidebarItemSubscriptionPredicater();
|
||||||
|
|
||||||
return deepdash.filterDeep(
|
return deepdash.filterDeep(
|
||||||
menu,
|
menu,
|
||||||
(item) => {
|
(item) => {
|
||||||
return predFeature(item) && predAbility(item);
|
return predFeature(item) && predAbility(item) && predSubscription(item);
|
||||||
},
|
},
|
||||||
deepDashConfig,
|
deepDashConfig,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -68,5 +68,10 @@ export enum ISidebarMenuOverlayIds {
|
|||||||
Financial = 'Financial',
|
Financial = 'Financial',
|
||||||
Contacts = 'Contacts',
|
Contacts = 'Contacts',
|
||||||
Cashflow = 'Cashflow',
|
Cashflow = 'Cashflow',
|
||||||
Expenses = 'Expenses'
|
Expenses = 'Expenses',
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum ISidebarSubscriptionAbility {
|
||||||
|
Expired = 'SubscriptionExpired',
|
||||||
|
Active = 'SubscriptionActive',
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user