-
Notifications
You must be signed in to change notification settings - Fork 32
/
Copy pathSubscriptionTabs.jsx
134 lines (121 loc) · 4.43 KB
/
SubscriptionTabs.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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
import React, { useContext, useMemo } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import { Tabs, Tab } from '@openedx/paragon';
import {
useNavigate,
Route,
useParams,
Routes,
} from 'react-router-dom';
import { useIntl } from '@edx/frontend-platform/i18n';
import { SubsidyRequestsContext } from '../subsidy-requests';
import SubscriptionSubsidyRequests from './SubscriptionSubsidyRequests';
import SubscriptionPlanRoutes from './SubscriptionPlanRoutes';
import { ROUTE_NAMES } from '../EnterpriseApp/data/constants';
import {
MANAGE_LEARNERS_TAB,
MANAGE_REQUESTS_TAB,
SUBSCRIPTION_TABS_VALUES,
SUBSCRIPTIONS_TAB_PARAM,
} from './data/constants';
import { SUPPORTED_SUBSIDY_TYPES } from '../../data/constants/subsidyRequests';
import NotFoundPage from '../NotFoundPage';
const SubscriptionTabs = ({ enterpriseSlug }) => {
const { subsidyRequestConfiguration, subsidyRequestsCounts } = useContext(SubsidyRequestsContext);
const isSubsidyRequestsEnabled = subsidyRequestConfiguration?.subsidyRequestsEnabled;
const subsidyType = subsidyRequestConfiguration?.subsidyType;
const isRequestsTabShown = isSubsidyRequestsEnabled && subsidyType === SUPPORTED_SUBSIDY_TYPES.license;
const intl = useIntl();
const requestsTabNotification = useMemo(() => {
const hasRequests = subsidyRequestsCounts.subscriptionLicenses > 0;
if (isRequestsTabShown && hasRequests) {
return (
<>
{subsidyRequestsCounts.subscriptionLicenses}
<span className="sr-only">outstanding enrollment requests</span>
</>
);
}
return null;
}, [isRequestsTabShown, subsidyRequestsCounts]);
const navigate = useNavigate();
const params = useParams();
const subscriptionsTab = params[SUBSCRIPTIONS_TAB_PARAM];
const routesByTabKey = {
[MANAGE_LEARNERS_TAB]: `/${enterpriseSlug}/admin/${ROUTE_NAMES.subscriptionManagement}/${MANAGE_LEARNERS_TAB}`,
[MANAGE_REQUESTS_TAB]: `/${enterpriseSlug}/admin/${ROUTE_NAMES.subscriptionManagement}/${MANAGE_REQUESTS_TAB}`,
};
const handleTabSelect = (key) => {
if (key === MANAGE_REQUESTS_TAB) {
navigate(routesByTabKey[MANAGE_REQUESTS_TAB]);
} else if (key === MANAGE_LEARNERS_TAB) {
navigate(routesByTabKey[MANAGE_LEARNERS_TAB]);
}
};
const visibleTabs = useMemo(() => {
const tabs = [];
tabs.push(
<Tab
key={SUBSCRIPTION_TABS_VALUES[MANAGE_LEARNERS_TAB]}
eventKey={SUBSCRIPTION_TABS_VALUES[MANAGE_LEARNERS_TAB]}
title={intl.formatMessage({
id: 'admin.portal.subscription.tabs.manage.learners',
defaultMessage: 'Manage Learners',
description: 'Title for the Manage Learners tab in subscription management.',
})}
className="pt-4"
>
{SUBSCRIPTION_TABS_VALUES[MANAGE_LEARNERS_TAB] === subscriptionsTab && (
<SubscriptionPlanRoutes />
)}
</Tab>,
);
if (isRequestsTabShown) {
tabs.push(
<Tab
key={SUBSCRIPTION_TABS_VALUES[MANAGE_REQUESTS_TAB]}
eventKey={SUBSCRIPTION_TABS_VALUES[MANAGE_REQUESTS_TAB]}
title={intl.formatMessage({
id: 'admin.portal.subscription.tabs.manage.requests',
defaultMessage: 'Manage Requests',
description: 'Title for the Manage Requests tab in subscription management.',
})}
className="pt-4"
notification={requestsTabNotification}
>
{SUBSCRIPTION_TABS_VALUES[MANAGE_REQUESTS_TAB] === subscriptionsTab && (
<Routes>
<Route
path="/"
element={<SubscriptionSubsidyRequests />}
/>
</Routes>
)}
</Tab>,
);
}
return tabs;
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [subscriptionsTab, isRequestsTabShown, requestsTabNotification]);
if ((SUBSCRIPTION_TABS_VALUES[MANAGE_LEARNERS_TAB] !== subscriptionsTab)
&& (SUBSCRIPTION_TABS_VALUES[MANAGE_REQUESTS_TAB] !== subscriptionsTab)) {
return <NotFoundPage />;
}
return (
<Tabs
id="tabs-subscription-management"
activeKey={subscriptionsTab}
onSelect={handleTabSelect}
>
{visibleTabs}
</Tabs>
);
};
SubscriptionTabs.propTypes = {
enterpriseSlug: PropTypes.string.isRequired,
};
const mapStateToProps = state => ({
enterpriseSlug: state.portalConfiguration.enterpriseSlug,
});
export default connect(mapStateToProps)(SubscriptionTabs);