@@ -13,6 +13,8 @@ export const DEFAULT_DATA: ToastData = {
13
13
14
14
export const DEFAULT_OPTIONS : Required < ToastOptions > = {
15
15
type : 'success' ,
16
+ showNextToastAfter : 250 ,
17
+ forceOverride : false ,
16
18
position : 'top' ,
17
19
autoHide : true ,
18
20
visibilityTime : 4000 ,
@@ -59,49 +61,77 @@ export function useToast({ defaultOptions }: UseToastParams) {
59
61
options . onHide ( ) ;
60
62
} , [ clearTimer , log , options ] ) ;
61
63
62
- const show = React . useCallback (
63
- ( params : ToastShowParams ) => {
64
- log ( `Showing with params: ${ JSON . stringify ( params ) } ` ) ;
64
+ const showNextToaster = React . useCallback ( ( params : ToastShowParams ) => {
65
65
const {
66
- text1 = DEFAULT_DATA . text1 ,
67
- text2 = DEFAULT_DATA . text2 ,
68
- type = initialOptions . type ,
69
- position = initialOptions . position ,
70
- autoHide = initialOptions . autoHide ,
71
- visibilityTime = initialOptions . visibilityTime ,
72
- topOffset = initialOptions . topOffset ,
73
- bottomOffset = initialOptions . bottomOffset ,
74
- keyboardOffset = initialOptions . keyboardOffset ,
75
- onShow = initialOptions . onShow ,
76
- onHide = initialOptions . onHide ,
77
- onPress = initialOptions . onPress ,
78
- props = initialOptions . props
66
+ text1 = DEFAULT_DATA . text1 ,
67
+ text2 = DEFAULT_DATA . text2 ,
68
+ type = initialOptions . type ,
69
+ position = initialOptions . position ,
70
+ autoHide = initialOptions . autoHide ,
71
+ visibilityTime = initialOptions . visibilityTime ,
72
+ topOffset = initialOptions . topOffset ,
73
+ bottomOffset = initialOptions . bottomOffset ,
74
+ keyboardOffset = initialOptions . keyboardOffset ,
75
+ onShow = initialOptions . onShow ,
76
+ onHide = initialOptions . onHide ,
77
+ onPress = initialOptions . onPress ,
78
+ props = initialOptions . props
79
79
} = params ;
80
+
80
81
setData ( {
81
- text1,
82
- text2
82
+ text1,
83
+ text2
83
84
} ) ;
84
85
setOptions (
85
- mergeIfDefined ( initialOptions , {
86
- type,
87
- position,
88
- autoHide,
89
- visibilityTime,
90
- topOffset,
91
- bottomOffset,
92
- keyboardOffset,
93
- onShow,
94
- onHide,
95
- onPress,
96
- props
97
- } ) as Required < ToastOptions >
86
+ mergeIfDefined ( initialOptions , {
87
+ type,
88
+ position,
89
+ autoHide,
90
+ visibilityTime,
91
+ topOffset,
92
+ bottomOffset,
93
+ keyboardOffset,
94
+ onShow,
95
+ onHide,
96
+ onPress,
97
+ props
98
+ } ) as Required < ToastOptions >
98
99
) ;
100
+
101
+ } , [ initialOptions ] )
102
+
103
+ const show = React . useCallback (
104
+ ( params : ToastShowParams ) => {
105
+ log ( `Showing with params: ${ JSON . stringify ( params ) } ` ) ;
106
+ const {
107
+ forceOverride = initialOptions . forceOverride ,
108
+ showNextToastAfter = initialOptions . showNextToastAfter ,
109
+ onShow = initialOptions . onShow ,
110
+ } = params ;
111
+
99
112
// TODO: validate input
100
113
// TODO: use a queue when Toast is already visible
101
- setIsVisible ( true ) ;
102
- onShow ( ) ;
114
+
115
+ if ( forceOverride ) {
116
+ if ( isVisible ) {
117
+ hide ( ) ;
118
+ setTimeout ( ( ) => {
119
+ showNextToaster ( params ) ;
120
+ setIsVisible ( true ) ;
121
+ onShow ( ) ;
122
+ } , showNextToastAfter )
123
+ } else {
124
+ showNextToaster ( params ) ;
125
+ setIsVisible ( true ) ;
126
+ onShow ( ) ;
127
+ }
128
+ } else {
129
+ showNextToaster ( params ) ;
130
+ setIsVisible ( true ) ;
131
+ onShow ( ) ;
132
+ }
103
133
} ,
104
- [ initialOptions , log ]
134
+ [ hide , initialOptions . forceOverride , initialOptions . onShow , initialOptions . showNextToastAfter , isVisible , log , showNextToaster ]
105
135
) ;
106
136
107
137
React . useEffect ( ( ) => {
0 commit comments