80 lines
2.6 KiB
JavaScript
80 lines
2.6 KiB
JavaScript
import React from 'react';
|
|
|
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
|
|
|
import { StrictDict } from 'utils';
|
|
|
|
import track from 'tracking';
|
|
|
|
import { reduxHooks, apiHooks } from 'hooks';
|
|
|
|
import { LEAVE_OPTION } from './constants';
|
|
import messages from './messages';
|
|
import * as module from './hooks';
|
|
|
|
export const state = StrictDict({
|
|
selectedSession: (val) => React.useState(val), // eslint-disable-line
|
|
});
|
|
|
|
export const useSelectSessionModalData = () => {
|
|
const { formatMessage } = useIntl();
|
|
|
|
const selectedCardId = reduxHooks.useSelectSessionModalData().cardId;
|
|
const {
|
|
availableSessions,
|
|
isFulfilled,
|
|
} = reduxHooks.useCardEntitlementData(selectedCardId);
|
|
const { title: courseTitle } = reduxHooks.useCardCourseData(selectedCardId);
|
|
const { courseId } = reduxHooks.useCardCourseRunData(selectedCardId) || {};
|
|
const { isEnrolled } = reduxHooks.useCardEnrollmentData(selectedCardId);
|
|
const leaveEntitlementSession = apiHooks.useLeaveEntitlementSession(selectedCardId);
|
|
const switchEntitlementEnrollment = apiHooks.useSwitchEntitlementEnrollment(selectedCardId);
|
|
const newEntitlementEnrollment = apiHooks.useNewEntitlementEnrollment(selectedCardId);
|
|
|
|
const [selectedSession, setSelectedSession] = module.state.selectedSession(courseId || null);
|
|
|
|
let header;
|
|
let hint;
|
|
if (isFulfilled) {
|
|
header = formatMessage(messages.changeOrLeaveHeader);
|
|
hint = formatMessage(messages.changeOrLeaveHint);
|
|
} else {
|
|
header = formatMessage(messages.selectSessionHeader, { courseTitle });
|
|
hint = formatMessage(messages.selectSessionHint);
|
|
}
|
|
const closeSessionModal = reduxHooks.useUpdateSelectSessionModalCallback(null);
|
|
|
|
const trackNewSession = track.entitlements.newSession(selectedSession);
|
|
const trackSwitchSession = track.entitlements.switchSession(selectedCardId, selectedSession);
|
|
const trackLeaveSession = track.entitlements.leaveSession(selectedCardId);
|
|
|
|
const handleSelection = ({ target: { value } }) => setSelectedSession(value);
|
|
const handleSubmit = () => {
|
|
if (selectedSession === LEAVE_OPTION) {
|
|
trackLeaveSession();
|
|
leaveEntitlementSession();
|
|
} else if (isEnrolled) {
|
|
trackSwitchSession();
|
|
switchEntitlementEnrollment(selectedSession);
|
|
} else {
|
|
trackNewSession();
|
|
newEntitlementEnrollment(selectedSession);
|
|
}
|
|
closeSessionModal();
|
|
};
|
|
|
|
return {
|
|
showModal: selectedCardId != null,
|
|
closeSessionModal,
|
|
showLeaveOption: isFulfilled,
|
|
availableSessions,
|
|
hint,
|
|
header,
|
|
selectedSession,
|
|
handleSelection,
|
|
handleSubmit,
|
|
};
|
|
};
|
|
|
|
export default useSelectSessionModalData;
|