Files
frontend-app-learner-dashboard/src/containers/SelectSessionModal/hooks.js
2023-01-19 10:13:48 -05:00

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;