32 lines
592 B
TypeScript
32 lines
592 B
TypeScript
import { Action } from "redux";
|
|
|
|
export interface FlagsState {
|
|
actions: { [actionName: string]: ActionState }
|
|
}
|
|
|
|
export interface ActionState {
|
|
isLoading: boolean
|
|
}
|
|
|
|
const defaultState = {
|
|
actions: {}
|
|
};
|
|
|
|
export function flagsReducer(state = defaultState, action: Action): FlagsState {
|
|
const matches = (/^(.*)_((SUCCESS)|(FAILURE)|(REQUEST))$/).exec(action.type);
|
|
|
|
if(!matches) return state;
|
|
|
|
const actionPrefix = matches[1];
|
|
|
|
return {
|
|
...state,
|
|
actions: {
|
|
...state.actions,
|
|
[actionPrefix]: {
|
|
isLoading: matches[2] === 'REQUEST'
|
|
}
|
|
}
|
|
};
|
|
|
|
} |