-
Notifications
You must be signed in to change notification settings - Fork 32
/
Copy pathuseBudgetDetailTabs.jsx
116 lines (110 loc) · 3.51 KB
/
useBudgetDetailTabs.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import { useMemo } from 'react';
import { Tab } from '@openedx/paragon';
import { useIntl } from '@edx/frontend-platform/i18n';
import { BUDGET_DETAIL_ACTIVITY_TAB, BUDGET_DETAIL_CATALOG_TAB, BUDGET_DETAIL_MEMBERS_TAB } from '../constants';
import { BUDGET_STATUSES } from '../../../EnterpriseApp/data/constants';
import { getBudgetStatus } from '../utils';
const TAB_CLASS_NAME = 'pt-4.5';
export const useBudgetDetailTabs = ({
activeTabKey,
subsidyAccessPolicy,
appliesToAllContexts,
enterpriseGroupLearners,
refreshMembersTab,
setRefreshMembersTab,
enterpriseFeatures,
ActivityTabElement,
CatalogTabElement,
MembersTabElement,
}) => {
const intl = useIntl();
const { status } = getBudgetStatus({
intl,
startDateStr: subsidyAccessPolicy?.subsidyActiveDatetime,
endDateStr: subsidyAccessPolicy?.subsidyExpirationDatetime,
isBudgetRetired: subsidyAccessPolicy?.retired,
});
const isCatalogTabDisabled = [BUDGET_STATUSES.retired, BUDGET_STATUSES.expired].includes(status);
const showCatalog = (subsidyAccessPolicy?.groupAssociations?.length > 0 && !appliesToAllContexts)
|| (enterpriseFeatures.topDownAssignmentRealTimeLcm && !!subsidyAccessPolicy?.isAssignable);
return useMemo(() => {
const tabsArray = [];
tabsArray.push(
<Tab
key={BUDGET_DETAIL_ACTIVITY_TAB}
eventKey={BUDGET_DETAIL_ACTIVITY_TAB}
title={
intl.formatMessage({
id: 'lcm.budget.detail.page.activity.tab.label',
defaultMessage: 'Activity',
description: 'Label for the activity tab in the budget detail page',
})
}
className={TAB_CLASS_NAME}
>
{activeTabKey === BUDGET_DETAIL_ACTIVITY_TAB && (
<ActivityTabElement appliesToAllContexts={appliesToAllContexts} />
)}
</Tab>,
);
if (showCatalog) {
tabsArray.push(
<Tab
key={BUDGET_DETAIL_CATALOG_TAB}
eventKey={BUDGET_DETAIL_CATALOG_TAB}
disabled={isCatalogTabDisabled}
title={
intl.formatMessage({
id: 'lcm.budget.detail.page.catalog.tab.label',
defaultMessage: 'Catalog',
description: 'Label for the catalog tab in the budget detail page',
})
}
className={TAB_CLASS_NAME}
>
{(activeTabKey === BUDGET_DETAIL_CATALOG_TAB) && (
<CatalogTabElement />
)}
</Tab>,
);
}
if (enterpriseGroupLearners?.count > 0 && !appliesToAllContexts) {
tabsArray.push(
<Tab
data-testid="group-members-tab"
key={BUDGET_DETAIL_MEMBERS_TAB}
eventKey={BUDGET_DETAIL_MEMBERS_TAB}
title={
intl.formatMessage({
id: 'lcm.budget.detail.page.members.tab.label',
defaultMessage: 'Members',
description: 'Label for the members tab in the budget detail page',
})
}
className={TAB_CLASS_NAME}
>
{activeTabKey === BUDGET_DETAIL_MEMBERS_TAB && (
<MembersTabElement
refresh={refreshMembersTab}
setRefresh={setRefreshMembersTab}
/>
)}
</Tab>,
);
}
return tabsArray;
}, [
activeTabKey,
ActivityTabElement,
MembersTabElement,
CatalogTabElement,
enterpriseGroupLearners,
refreshMembersTab,
setRefreshMembersTab,
appliesToAllContexts,
intl,
showCatalog,
isCatalogTabDisabled,
]);
};
export default useBudgetDetailTabs;