Files
frontend-app-authoring/src/course-unit/data/slice.js
Peter Kulko 98fbcff842 feat: [FC-0070] listen to xblock interaction events (#1431)
This is part of the effort to support the new embedded Studio Unit Page.  It includes changes to the CourseUnit component and the functionality of interaction between xblocks in the iframe and the react page.

The following events have been processed:

* delete event
* Manage Access event (opening and closing a modal window)
* edit event for new xblock React editors
* clipboard events
* duplicate event
2025-01-15 13:28:43 -05:00

135 lines
4.2 KiB
JavaScript

/* eslint-disable no-param-reassign */
import { createSlice } from '@reduxjs/toolkit';
import { RequestStatus } from '../../data/constants';
const slice = createSlice({
name: 'courseUnit',
initialState: {
savingStatus: '',
errorMessage: '',
isQueryPending: false,
isTitleEditFormOpen: false,
canEdit: true,
loadingStatus: {
fetchUnitLoadingStatus: RequestStatus.IN_PROGRESS,
courseSectionVerticalLoadingStatus: RequestStatus.IN_PROGRESS,
courseVerticalChildrenLoadingStatus: RequestStatus.IN_PROGRESS,
},
unit: {},
courseSectionVertical: {},
courseVerticalChildren: { children: [], isPublished: true },
staticFileNotices: {},
courseOutlineInfo: {},
courseOutlineInfoLoadingStatus: RequestStatus.IN_PROGRESS,
movedXBlockParams: {
isSuccess: false,
isUndo: false,
title: '',
sourceLocator: '',
targetParentLocator: '',
},
},
reducers: {
fetchCourseItemSuccess: (state, { payload }) => {
state.unit = payload;
},
updateLoadingCourseUnitStatus: (state, { payload }) => {
state.loadingStatus = {
...state.loadingStatus,
fetchUnitLoadingStatus: payload.status,
};
},
updateQueryPendingStatus: (state, { payload }) => {
state.isQueryPending = payload;
},
changeEditTitleFormOpen: (state, { payload }) => {
state.isTitleEditFormOpen = payload;
},
updateSavingStatus: (state, { payload }) => {
const { status, errorMessage } = payload;
state.savingStatus = status;
state.errorMessage = errorMessage;
},
fetchSequenceRequest: (state, { payload }) => {
state.sequenceId = payload.sequenceId;
state.sequenceStatus = RequestStatus.IN_PROGRESS;
state.sequenceMightBeUnit = false;
},
fetchSequenceSuccess: (state, { payload }) => {
state.sequenceId = payload.sequenceId;
state.sequenceStatus = RequestStatus.SUCCESSFUL;
state.sequenceMightBeUnit = false;
},
fetchSequenceFailure: (state, { payload }) => {
state.sequenceId = payload.sequenceId;
state.sequenceStatus = RequestStatus.FAILED;
state.sequenceMightBeUnit = payload.sequenceMightBeUnit || false;
},
fetchCourseSectionVerticalDataSuccess: (state, { payload }) => {
state.courseSectionVertical = payload;
},
updateLoadingCourseSectionVerticalDataStatus: (state, { payload }) => {
state.loadingStatus = {
...state.loadingStatus,
courseSectionVerticalLoadingStatus: payload.status,
};
},
updateLoadingCourseXblockStatus: (state, { payload }) => {
state.loadingStatus = {
...state.loadingStatus,
createUnitXblockLoadingStatus: payload.status,
};
},
addNewUnitStatus: (state, { payload }) => {
state.loadingStatus = {
...state.loadingStatus,
fetchUnitLoadingStatus: payload.status,
};
},
updateCourseVerticalChildren: (state, { payload }) => {
state.courseVerticalChildren = payload;
},
updateCourseVerticalChildrenLoadingStatus: (state, { payload }) => {
state.loadingStatus.courseVerticalChildrenLoadingStatus = payload.status;
},
fetchStaticFileNoticesSuccess: (state, { payload }) => {
state.staticFileNotices = payload;
},
updateCourseOutlineInfo: (state, { payload }) => {
state.courseOutlineInfo = payload;
},
updateCourseOutlineInfoLoadingStatus: (state, { payload }) => {
state.courseOutlineInfoLoadingStatus = payload.status;
},
updateMovedXBlockParams: (state, { payload }) => {
state.movedXBlockParams = { ...state.movedXBlockParams, ...payload };
},
},
});
export const {
fetchCourseItemSuccess,
updateLoadingCourseUnitStatus,
updateSavingStatus,
updateModel,
fetchSequenceRequest,
fetchSequenceSuccess,
fetchSequenceFailure,
fetchCourseSectionVerticalDataSuccess,
updateLoadingCourseSectionVerticalDataStatus,
changeEditTitleFormOpen,
updateQueryPendingStatus,
updateLoadingCourseXblockStatus,
updateCourseVerticalChildren,
updateCourseVerticalChildrenLoadingStatus,
fetchStaticFileNoticesSuccess,
updateCourseOutlineInfo,
updateCourseOutlineInfoLoadingStatus,
updateMovedXBlockParams,
} = slice.actions;
export const {
reducer,
} = slice;