Also refactor api and hooks fix: publish button behaviour and card header tests fix: warning in highlights and publish modal test fix: courseoutline tests test: add test for new section functionality fix(lint): lint issues refactor: remove unnecessary css in CardHeader refactor: rename emptyPlaceholder test file refactor: replace ternary operator with 'and' condition refactor: add black color to expand/collapse button refactor: display only changed subsection and units in publish modal refactor: update messages and css refactor: wrap urls in function call refactor: fix jsdoc types refactor: use helmet for document title
116 lines
3.3 KiB
JavaScript
116 lines
3.3 KiB
JavaScript
/* eslint-disable no-param-reassign */
|
|
import { createSlice } from '@reduxjs/toolkit';
|
|
|
|
import { RequestStatus } from '../../data/constants';
|
|
|
|
const slice = createSlice({
|
|
name: 'courseOutline',
|
|
initialState: {
|
|
loadingStatus: {
|
|
outlineIndexLoadingStatus: RequestStatus.IN_PROGRESS,
|
|
reIndexLoadingStatus: RequestStatus.IN_PROGRESS,
|
|
fetchSectionLoadingStatus: RequestStatus.IN_PROGRESS,
|
|
},
|
|
outlineIndexData: {},
|
|
savingStatus: '',
|
|
statusBarData: {
|
|
courseReleaseDate: '',
|
|
highlightsEnabledForMessaging: false,
|
|
isSelfPaced: false,
|
|
checklist: {
|
|
totalCourseLaunchChecks: 0,
|
|
completedCourseLaunchChecks: 0,
|
|
totalCourseBestPracticesChecks: 0,
|
|
completedCourseBestPracticesChecks: 0,
|
|
},
|
|
},
|
|
sectionsList: [],
|
|
currentSection: {},
|
|
},
|
|
reducers: {
|
|
fetchOutlineIndexSuccess: (state, { payload }) => {
|
|
state.outlineIndexData = payload;
|
|
state.sectionsList = payload.courseStructure?.childInfo?.children || [];
|
|
},
|
|
updateOutlineIndexLoadingStatus: (state, { payload }) => {
|
|
state.loadingStatus = {
|
|
...state.loadingStatus,
|
|
outlineIndexLoadingStatus: payload.status,
|
|
};
|
|
},
|
|
updateReindexLoadingStatus: (state, { payload }) => {
|
|
state.loadingStatus = {
|
|
...state.loadingStatus,
|
|
reIndexLoadingStatus: payload.status,
|
|
};
|
|
},
|
|
updateFetchSectionLoadingStatus: (state, { payload }) => {
|
|
state.loadingStatus = {
|
|
...state.loadingStatus,
|
|
fetchSectionLoadingStatus: payload.status,
|
|
};
|
|
},
|
|
updateStatusBar: (state, { payload }) => {
|
|
state.statusBarData = {
|
|
...state.statusBarData,
|
|
...payload,
|
|
};
|
|
},
|
|
fetchStatusBarChecklistSuccess: (state, { payload }) => {
|
|
state.statusBarData.checklist = {
|
|
...state.statusBarData.checklist,
|
|
...payload,
|
|
};
|
|
},
|
|
fetchStatusBarSelPacedSuccess: (state, { payload }) => {
|
|
state.statusBarData.isSelfPaced = payload.isSelfPaced;
|
|
},
|
|
updateSavingStatus: (state, { payload }) => {
|
|
state.savingStatus = payload.status;
|
|
},
|
|
updateSectionList: (state, { payload }) => {
|
|
state.sectionsList = state.sectionsList.map((section) => (section.id === payload.id ? payload : section));
|
|
},
|
|
setCurrentSection: (state, { payload }) => {
|
|
state.currentSection = payload;
|
|
},
|
|
addSection: (state, { payload }) => {
|
|
state.sectionsList = [
|
|
...state.sectionsList,
|
|
payload,
|
|
];
|
|
},
|
|
deleteSection: (state, { payload }) => {
|
|
state.sectionsList = state.sectionsList.filter(({ id }) => id !== payload);
|
|
},
|
|
duplicateSection: (state, { payload }) => {
|
|
state.sectionsList = state.sectionsList.reduce((result, currentValue) => {
|
|
if (currentValue.id === payload.id) {
|
|
return [...result, currentValue, payload.duplicatedSection];
|
|
}
|
|
return [...result, currentValue];
|
|
}, []);
|
|
},
|
|
},
|
|
});
|
|
|
|
export const {
|
|
addSection,
|
|
fetchOutlineIndexSuccess,
|
|
updateOutlineIndexLoadingStatus,
|
|
updateReindexLoadingStatus,
|
|
updateStatusBar,
|
|
fetchStatusBarChecklistSuccess,
|
|
fetchStatusBarSelPacedSuccess,
|
|
updateFetchSectionLoadingStatus,
|
|
updateSavingStatus,
|
|
updateSectionList,
|
|
setCurrentSection,
|
|
deleteSection,
|
|
duplicateSection,
|
|
} = slice.actions;
|
|
|
|
export const {
|
|
reducer,
|
|
} = slice;
|