11import { takeEvery , put } from 'redux-saga/effects' ;
2- import { createDuck } from 'reducktion' ; // eslint-disable-line
2+ import { createDuck , createApiAction } from 'reducktion' ; // eslint-disable-line
33import { sleep } from '../../helpers' ;
44
55const duck = createDuck ( {
66 name : 'order' ,
77 inject : [ 'user' ] ,
88 state : {
99 orders : [ ] ,
10- isLoading : false ,
10+ packages : [ ] ,
11+ error : undefined ,
1112 hasError : false ,
13+ isLoading : false ,
1214 } ,
1315 actions : ( ) => ( {
14- fetchOrders : state => ( { ...state , isLoading : true } ) ,
15- failFetchOrders : state => ( {
16- ...state ,
17- isLoading : false ,
18- hasError : true ,
19- } ) ,
20- receiveOrders : ( state , action ) => ( {
21- ...state ,
22- isLoading : false ,
23- hasError : false ,
24- orders : action . payload ,
16+ // Simple way to create API related action
17+ fetchOrders : createApiAction ( 'orders' ) ,
18+ // Provide custom success reducer handler
19+ fetchPackages : createApiAction ( {
20+ success : ( state , action ) => ( {
21+ ...state ,
22+ packages : action . payload ,
23+ hasError : null ,
24+ isLoading : false ,
25+ } ) ,
2526 } ) ,
2627 } ) ,
2728 reactions : ( { deps } ) => ( {
@@ -39,27 +40,21 @@ const duck = createDuck({
3940
4041// Saga handlers
4142function * fetchOrdersSaga ( ) {
42- // Fake API call delay
43- yield sleep ( 400 ) ;
44- yield put (
45- duck . actions . receiveOrders ( [
46- { id : 1 , name : 'Mock order 1' } ,
47- { id : 2 , name : 'Mock order 2' } ,
48- { id : 3 , name : 'Mock order 3' } ,
49- { id : 4 , name : 'Mock order 4' } ,
50- ] )
51- ) ;
52-
53- /* Or use manually defined actions that does the same thing as `receiveOrders`
54- yield put(
55- duck.actions.setOrders([
56- { id: 1, name: 'Mock order 1' },
57- { id: 2, name: 'Mock order 2' },
58- { id: 3, name: 'Mock order 3' },
59- { id: 4, name: 'Mock order 4' },
60- ])
61- );
62- */
43+ try {
44+ // Fake API call delay
45+ yield sleep ( 400 ) ;
46+ // this.props.fetchOrders()
47+ yield put (
48+ duck . actions . fetchOrders . success ( [
49+ { id : 1 , name : 'Mock order 1' } ,
50+ { id : 2 , name : 'Mock order 2' } ,
51+ { id : 3 , name : 'Mock order 3' } ,
52+ { id : 4 , name : 'Mock order 4' } ,
53+ ] )
54+ ) ;
55+ } catch ( error ) {
56+ yield put ( duck . actions . fetchOrders . fail ( ) ) ;
57+ }
6358}
6459
6560export default duck ;
0 commit comments