2021-04-07 13:11:39 +03:00

44 lines
1.1 KiB
TypeScript

import { AnyAction } from 'redux';
import { produce } from 'immer';
import { USE_OPEN_AUTHORING } from '../actions/auth';
export type GlobalUI = {
isFetching: boolean;
useOpenAuthoring: boolean;
};
const LOADING_IGNORE_LIST = [
'DEPLOY_PREVIEW',
'STATUS_REQUEST',
'STATUS_SUCCESS',
'STATUS_FAILURE',
];
function ignoreWhenLoading(action: AnyAction) {
return LOADING_IGNORE_LIST.some(type => action.type.includes(type));
}
const defaultState: GlobalUI = {
isFetching: false,
useOpenAuthoring: false,
};
/**
* Reducer for some global UI state that we want to share between components
*/
const globalUI = produce((state: GlobalUI, action: AnyAction) => {
// Generic, global loading indicator
if (!ignoreWhenLoading(action) && action.type.includes('REQUEST')) {
state.isFetching = true;
} else if (
!ignoreWhenLoading(action) &&
(action.type.includes('SUCCESS') || action.type.includes('FAILURE'))
) {
state.isFetching = false;
} else if (action.type === USE_OPEN_AUTHORING) {
state.useOpenAuthoring = true;
}
}, defaultState);
export default globalUI;