-
Notifications
You must be signed in to change notification settings - Fork 196
Expand file tree
/
Copy pathstore.ts
More file actions
77 lines (71 loc) · 3.34 KB
/
store.ts
File metadata and controls
77 lines (71 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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 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 certificatesReducer } from './certificates/data/slice';
type InferState<ReducerType> = ReducerType extends Reducer<infer T> ? 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<string, any>;
discussions: Record<string, any>;
assets: Record<string, any>;
pagesAndResources: Record<string, any>;
scheduleAndDetails: Record<string, any>;
studioHome: InferState<typeof studioHomeReducer>;
models: Record<string, any>;
live: Record<string, any>;
courseUpdates: Record<string, any>;
courseOptimizer: Record<string, any>;
generic: Record<string, any>;
videos: Record<string, any>;
courseOutline: Record<string, any>;
courseUnit: Record<string, any>;
certificates: {
loadingStatus: RequestStatusType;
savingStatus: any;
savingImageStatus: string;
errorMessage: string;
componentMode: (typeof MODE_STATES)[keyof typeof MODE_STATES];
certificatesData: any;
};
}
export default function initializeStore(preloadedState: Partial<DeprecatedReduxState> | undefined = undefined) {
return configureStore<DeprecatedReduxState>({
reducer: {
customPages: customPagesReducer,
discussions: discussionsReducer,
assets: filesReducer,
pagesAndResources: pagesAndResourcesReducer,
scheduleAndDetails: scheduleAndDetailsReducer,
studioHome: studioHomeReducer,
models: modelsReducer,
live: liveReducer,
courseUpdates: CourseUpdatesReducer,
courseOptimizer: courseOptimizerReducer,
generic: genericReducer,
videos: videosReducer,
courseOutline: courseOutlineReducer,
courseUnit: courseUnitReducer,
certificates: certificatesReducer,
},
preloadedState: preloadedState as DeprecatedReduxState | undefined,
});
}