@@ -5,49 +5,68 @@ import { AppModal, ModalState } from '../interface'
55export const modalReducer = ( state : ModalState = ModalInitialState , action : ModalAction ) => {
66 switch ( action . type ) {
77 case modalActionTypes . setModal : {
8- let modalList : AppModal [ ] = state . modals
9- modalList . push ( action . payload )
10- if ( state . modals . length === 1 && state . focusModal . hide === true ) { // if it's the first one show it
11- const focusModal : AppModal = {
12- id : modalList [ 0 ] . id ,
13- hide : false ,
14- title : modalList [ 0 ] . title ,
15- message : modalList [ 0 ] . message ,
16- okLabel : modalList [ 0 ] . okLabel ,
17- okFn : modalList [ 0 ] . okFn ,
18- cancelLabel : modalList [ 0 ] . cancelLabel ,
19- cancelFn : modalList [ 0 ] . cancelFn ,
20- modalType : modalList [ 0 ] . modalType ,
21- defaultValue : modalList [ 0 ] . defaultValue ,
22- hideFn : modalList [ 0 ] . hideFn ,
23- resolve : modalList [ 0 ] . resolve
24- }
8+ const focusModal : AppModal = {
9+ id : action . payload . id || Date . now ( ) . toString ( ) ,
10+ hide : false ,
11+ title : action . payload . title ,
12+ message : action . payload . message ,
13+ okLabel : action . payload . okLabel ,
14+ okFn : action . payload . okFn ,
15+ cancelLabel : action . payload . cancelLabel ,
16+ cancelFn : action . payload . cancelFn ,
17+ modalType : action . payload . modalType ,
18+ defaultValue : action . payload . defaultValue ,
19+ hideFn : action . payload . hideFn ,
20+ resolve : action . payload . resolve
21+ }
22+
23+ const modalList : AppModal [ ] = state . modals . slice ( )
24+ modalList . push ( focusModal )
2525
26- modalList = modalList . slice ( )
27- modalList . shift ( )
28- return { ...state , modals : modalList , focusModal : focusModal }
26+ if ( modalList . length === 1 ) {
27+ return { ...state , modals : modalList , focusModal }
28+ } else {
29+ return { ...state , modals : modalList }
2930 }
30- return { ...state , modals : modalList }
3131 }
32- case modalActionTypes . handleHideModal :
33- if ( state . focusModal . hideFn ) {
34- state . focusModal . hideFn ( )
35- } else if ( state . focusModal . resolve ) {
36- state . focusModal . resolve ( undefined )
32+ case modalActionTypes . handleHideModal : {
33+ setTimeout ( ( ) => {
34+ if ( state . focusModal . hideFn ) {
35+ state . focusModal . hideFn ( )
36+ }
37+ if ( state . focusModal . resolve ) {
38+ state . focusModal . resolve ( undefined )
39+ }
40+ } , 250 )
41+ const modalList : AppModal [ ] = state . modals . slice ( )
42+ modalList . shift ( ) // remove the current modal from the list
43+ if ( modalList . length ) {
44+ const focusModal = modalList [ 0 ] // extract the next modal from the list
45+ return { ...state , modals : modalList , focusModal }
46+ } else {
47+ state . focusModal = { ...state . focusModal , hide : true , message : null }
48+ return { ...state , modals : [ ] }
3749 }
38- state . focusModal = { ... state . focusModal , hide : true , message : null }
39- return { ... state }
40-
41- case modalActionTypes . setToast :
42- state . toasters . push ( action . payload )
43- if ( state . toasters . length > 0 ) {
44- const focus = state . toasters [ 0 ]
45- state . toasters . shift ( )
46- return { ...state , focusToaster : focus }
50+ }
51+ case modalActionTypes . setToast : {
52+ const toasterList = state . toasters . slice ( )
53+ const message = action . payload
54+ toasterList . push ( message )
55+ if ( toasterList . length === 1 ) {
56+ return { ... state , toasters : toasterList , focusToaster : action . payload }
57+ } else {
58+ return { ...state , toasters : toasterList }
4759 }
48- return { ...state }
49-
50- case modalActionTypes . handleToaster :
51- return { ...state , focusToaster : '' }
60+ }
61+ case modalActionTypes . handleToaster : {
62+ const toasterList = state . toasters . slice ( )
63+ toasterList . shift ( )
64+ if ( toasterList . length ) {
65+ const toaster = toasterList [ 0 ]
66+ return { ...state , toasters : toasterList , focusToaster : toaster }
67+ } else {
68+ return { ...state , toasters : [ ] }
69+ }
70+ }
5271 }
5372}
0 commit comments