66 lines
1.8 KiB
JavaScript
66 lines
1.8 KiB
JavaScript
import { Locked } from '@edx/paragon/icons';
|
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
|
|
|
import { hooks as appHooks } from 'data/redux';
|
|
import useSelectSession from 'containers/SelectSession/hooks';
|
|
import messages from './messages';
|
|
|
|
export const useCardActionData = ({ courseNumber }) => {
|
|
const { formatMessage } = useIntl();
|
|
const {
|
|
canUpgrade,
|
|
isAudit,
|
|
isAuditAccessExpired,
|
|
isVerified,
|
|
} = appHooks.useCardEnrollmentData(courseNumber);
|
|
const { isPending, isArchived } = appHooks.useCardCourseRunData(courseNumber);
|
|
const {
|
|
isEntitlement,
|
|
canViewCourse,
|
|
isFulfilled,
|
|
isExpired,
|
|
canChange,
|
|
hasSessions,
|
|
} = appHooks.useCardEntitlementsData(courseNumber);
|
|
const { openSessionModal } = useSelectSession({ courseNumber });
|
|
|
|
let primary;
|
|
let secondary = null;
|
|
if (isEntitlement) {
|
|
if (!isFulfilled) {
|
|
primary = {
|
|
children: formatMessage(messages.selectSession),
|
|
disabled: !(canChange && hasSessions),
|
|
onClick: openSessionModal,
|
|
};
|
|
} else {
|
|
primary = {
|
|
children: formatMessage(messages.viewCourse),
|
|
disabled: !canViewCourse || isExpired,
|
|
};
|
|
}
|
|
} else {
|
|
if (!isVerified) {
|
|
secondary = {
|
|
iconBefore: Locked,
|
|
variant: 'outline-primary',
|
|
disabled: !canUpgrade,
|
|
children: formatMessage(messages.upgrade),
|
|
};
|
|
}
|
|
if (isPending) {
|
|
primary = { children: formatMessage(messages.beginCourse) };
|
|
} else if (!isArchived) {
|
|
primary = {
|
|
children: formatMessage(messages.resume),
|
|
disabled: isAudit && isAuditAccessExpired,
|
|
};
|
|
} else {
|
|
primary = { children: formatMessage(messages.viewCourse) };
|
|
}
|
|
}
|
|
return { primary, secondary };
|
|
};
|
|
|
|
export default useCardActionData;
|