feat: entitlement actions and enterprise dash data updates

This commit is contained in:
Ben Warzeski
2022-09-08 23:03:48 -04:00
parent cabd1ebacb
commit aed9e8cc87
6 changed files with 44 additions and 12 deletions

View File

@@ -10,6 +10,8 @@ export const RequestStates = StrictDict({
export const RequestKeys = StrictDict({
initialize: 'initialize',
refreshList: 'refreshList',
enrollEntitlementSession: 'enrollEntitlementSession',
leaveEntitlementSession: 'leaveEntitlementSession',
});
export const ErrorCodes = StrictDict({

View File

@@ -33,7 +33,7 @@ const app = createSlice({
loadGlobalData: (state, { payload }) => ({
...state,
emailConfirmation: payload.emailConfirmation,
enterpriseDashboards: payload.enterpriseDashboards,
enterpriseDashboard: payload.enterpriseDashboard,
platformSettings: payload.platformSettings,
suggestedCourses: payload.suggestedCourses,
}),

View File

@@ -15,7 +15,7 @@ export const simpleSelectors = {
platformSettings: mkSimpleSelector(app => app.platformSettings),
suggestedCourses: mkSimpleSelector(app => app.suggestedCourses),
emailConfirmation: mkSimpleSelector(app => app.emailConfirmation),
enterpriseDashboards: mkSimpleSelector(app => app.enterpriseDashboards),
enterpriseDashboard: mkSimpleSelector(app => app.enterpriseDashboard),
selectSessionModal: mkSimpleSelector(app => app.selectSessionModal),
};
@@ -25,8 +25,8 @@ export const numCourses = createSelector(
);
export const hasCourses = createSelector([module.numCourses], (num) => num > 0);
export const hasAvailableDashboards = createSelector(
[module.simpleSelectors.enterpriseDashboards],
(data) => !!data.availableDashboards,
[module.simpleSelectors.enterpriseDashboard],
(data) => data !== null,
);
export const showSelectSessionModal = createSelector(
[module.simpleSelectors.selectSessionModal],

View File

@@ -6,7 +6,7 @@ import appSelectors from './app/selectors';
const { courseCard } = appSelectors;
export const useEmailConfirmationData = () => useSelector(appSelectors.emailConfirmation);
export const useEnterpriseDashboardData = () => useSelector(appSelectors.enterpriseDashboards);
export const useEnterpriseDashboardData = () => useSelector(appSelectors.enterpriseDashboard);
export const usePlatformSettingsData = () => useSelector(appSelectors.platformSettings);
// suggested courses is max at 3 at the moment.
export const useSuggestedCoursesData = () => useSelector(appSelectors.suggestedCourses).slice(0, 3);

View File

@@ -1,5 +1,6 @@
import { StrictDict } from 'utils';
import { actions, selectors } from 'data/redux';
import { post } from 'data/services/lms/utils';
import requests from './requests';
@@ -15,9 +16,8 @@ import requests from './requests';
export const initialize = () => (dispatch) => (
dispatch(requests.initializeList({
onSuccess: (({ courses, ...globalData }) => {
console.log({ courses });
dispatch(actions.app.loadCourses({ courses }));
dispatch(actions.app.loadGlobalData(globalData));
dispatch(actions.app.loadCourses({ courses }));
}),
}))
);
@@ -25,19 +25,26 @@ export const initialize = () => (dispatch) => (
export const refreshList = () => (dispatch) => (
dispatch(requests.initializeList({
onSuccess: (({ courses, ...globalData }) => {
dispatch(actions.app.loadCourses({ courses }));
dispatch(actions.app.loadGlobalData(globalData));
dispatch(actions.app.loadCourses({ courses }));
}),
}))
);
// TODO: connect hook to actual api later
export const sendConfirmEmail = () => () => console.log('send confirm email');
export const sendConfirmEmail = () => (dispatch, getState) => post(
selectors.app.emailConfirmation(getState()).sendEmailUrl,
);
export const updateEntitlementSession = (cardId, selection) => (dispatch, getState) => {
const entitlement = selectors.app.courseCard.entitlement(getState(), cardId);
const { uuid } = entitlement;
console.log({ cardId, selection, entitlement, uuid });
console.log({
cardId,
selection,
entitlement,
uuid,
});
};
export default StrictDict({

View File

@@ -42,12 +42,35 @@ export const initializeList = ({ onSuccess, onFailure }) => (dispatch) => {
}));
};
export const enrollEntitlementession = ({ onSuccess, onFailure, courseId }) => (dispatch, getState) => {
export const updateEntitlementEnrollment = ({
uuid,
courseId,
onSuccess,
onFailure,
}) => (dispatch) => {
dispatch(networkRequest({
requestKey: RequestKeys.enrollEntitlementSession,
onFailure,
onSuccess,
promise: api.updateEntitlementEnrollment({ uuid, courseId }),
}));
};
export const leaveEntitlementession = ({ onSuccess, onFailure, courseId }) => (dispatch, getState) => {
export const leaveEntitlementSession = ({
uuid,
onSuccess,
onFailure,
}) => (dispatch) => {
dispatch(networkRequest({
requestKey: RequestKeys.leaveEntitlementSession,
onFailure,
onSuccess,
promise: api.leaveEntitlementEnrollment({ uuid }),
}));
};
export default StrictDict({
initializeList,
updateEntitlementEnrollment,
leaveEntitlementSession,
});