npm i rxjs ts-action reselect @reactive-redux/store
import { of , Subject , interval } from 'rxjs' ;
import { map , take } from 'rxjs/operators' ;
import {
createStore
} from '@reactive-redux/store' ;
import { action , on , payload , reducer } from "ts-action" ;
const actionQ = new Subject < AsyncType < ActionsUnion > > ( ) ;
const increment = action ( "Increment" , payload < { value : number } > ( ) ) ;
const decrement = action ( "Decrement" , payload < { value : number } > ( ) ) ;
interface State {
value : number ;
}
const initialState : State = {
value : 0 ;
} ;
const initialState$ = of ( initialState ) ;
const actionStream$ = actionQ . asObservable ( ) ;
const reducer$ = of ( reducer (
initialState ,
on ( increment , ( state , { payload } ) => ( { value : state . value + payload . value } ) ) ,
on ( decrement , ( state , { payload } ) => ( { value : state . value - payload . value } ) )
) ) ;
const { state$ } = createStore < State , ActionsUnion > ( {
actionStream$,
reducer$,
initialState$
} ) ;
state$ . subscribe ( console . log ) ;
const add1 = increment ( { value : 1 } ) ;
const add1times = n => interval ( 200 ) . pipe (
map ( ( ) => add1 ) ,
take ( n )
) ;
//dispaching an observable action
actionQ . next ( add1times ( 10 ) ) ;