typedux
Version:
Slightly adjusted Redux (awesome by default) for TS
36 lines (26 loc) • 737 B
text/typescript
import type {State} from "./State"
import type {ActionMessage} from "../actions"
import type {ILeafReducer} from "./LeafReducer"
import {isString} from "../util"
import { clone } from "lodash"
export default class DumbReducer<S extends State<string>> implements ILeafReducer<S,ActionMessage<S>> {
private readonly key:string
private readonly providedState:S = null
constructor(keyOrState:string|State<string>) {
if (isString(keyOrState)) {
this.key = keyOrState
} else {
this.key = keyOrState.type
this.providedState = keyOrState as S
}
}
leaf():string {
return this.key;
}
prepareState(o:any) {
return o
}
defaultState(o?:any) {
return clone(this.providedState) || {type: this.key} as S
}
}