import { configureStore, Reducer } from '@reduxjs/toolkit'; // FIXME: because the 'live' plugin is using Redux, we have to hard-code a reference to it here. // If this app + the plugin were using React-query, there'd be no issues. import { reducer as liveReducer } from '@openedx-plugins/course-app-live/data/slice'; import { RequestStatusType } from '@src/data/constants'; import { MODE_STATES } from './certificates/data/constants'; import { reducer as modelsReducer } from './generic/model-store'; import { reducer as discussionsReducer } from './pages-and-resources/discussions/data/slice'; import { reducer as pagesAndResourcesReducer } from './pages-and-resources/data/slice'; import { reducer as customPagesReducer } from './custom-pages/data/slice'; import { reducer as studioHomeReducer } from './studio-home/data/slice'; import { reducer as scheduleAndDetailsReducer } from './schedule-and-details/data/slice'; import { reducer as filesReducer } from './files-and-videos/files-page/data/slice'; import { reducer as CourseUpdatesReducer } from './course-updates/data/slice'; import { reducer as processingNotificationReducer } from './generic/processing-notification/data/slice'; import { reducer as courseExportReducer } from './export-page/data/slice'; import { reducer as courseOptimizerReducer } from './optimizer-page/data/slice'; import { reducer as genericReducer } from './generic/data/slice'; import { reducer as videosReducer } from './files-and-videos/videos-page/data/slice'; import { reducer as courseOutlineReducer } from './course-outline/data/slice'; import { reducer as courseUnitReducer } from './course-unit/data/slice'; import { reducer as textbooksReducer } from './textbooks/data/slice'; import { reducer as certificatesReducer } from './certificates/data/slice'; import { reducer as groupConfigurationsReducer } from './group-configurations/data/slice'; type InferState = ReducerType extends Reducer ? T : never; /** * @deprecated The global Redux state for Authoring MFE, excluding editors. * TODO: refactor each part to use React Context and React Query instead. */ export interface DeprecatedReduxState { customPages: Record; discussions: Record; assets: Record; pagesAndResources: Record; scheduleAndDetails: Record; studioHome: InferState; models: Record; live: Record; courseUpdates: Record; processingNotification: Record; courseExport: Record; courseOptimizer: Record; generic: Record; videos: Record; courseOutline: Record; courseUnit: Record; certificates: { loadingStatus: RequestStatusType; savingStatus: any; savingImageStatus: string; errorMessage: string; componentMode: (typeof MODE_STATES)[keyof typeof MODE_STATES]; certificatesData: any; }; groupConfigurations: InferState; textbooks: Record; } export default function initializeStore(preloadedState: Partial | undefined = undefined) { return configureStore({ reducer: { customPages: customPagesReducer, discussions: discussionsReducer, assets: filesReducer, pagesAndResources: pagesAndResourcesReducer, scheduleAndDetails: scheduleAndDetailsReducer, studioHome: studioHomeReducer, models: modelsReducer, live: liveReducer, courseUpdates: CourseUpdatesReducer, processingNotification: processingNotificationReducer, courseExport: courseExportReducer, courseOptimizer: courseOptimizerReducer, generic: genericReducer, videos: videosReducer, courseOutline: courseOutlineReducer, courseUnit: courseUnitReducer, certificates: certificatesReducer, groupConfigurations: groupConfigurationsReducer, textbooks: textbooksReducer, }, preloadedState: (preloadedState as DeprecatedReduxState | undefined), }); }