@@ -13,6 +13,8 @@ export const DEFAULT_DATA: ToastData = {
1313
1414export const DEFAULT_OPTIONS : Required < ToastOptions > = {
1515 type : 'success' ,
16+ showNextToastAfter : 250 ,
17+ isOvershow : false ,
1618 position : 'top' ,
1719 autoHide : true ,
1820 visibilityTime : 4000 ,
@@ -59,49 +61,77 @@ export function useToast({ defaultOptions }: UseToastParams) {
5961 options . onHide ( ) ;
6062 } , [ clearTimer , log , options ] ) ;
6163
62- const show = React . useCallback (
63- ( params : ToastShowParams ) => {
64- log ( `Showing with params: ${ JSON . stringify ( params ) } ` ) ;
64+ const showNextToaster = React . useCallback ( ( params : ToastShowParams ) => {
6565 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
7979 } = params ;
80+
8081 setData ( {
81- text1,
82- text2
82+ text1,
83+ text2
8384 } ) ;
8485 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 >
9899 ) ;
100+
101+ } , [ initialOptions ] )
102+
103+ const show = React . useCallback (
104+ ( params : ToastShowParams ) => {
105+ log ( `Showing with params: ${ JSON . stringify ( params ) } ` ) ;
106+ const {
107+ isOvershow = initialOptions . isOvershow ,
108+ showNextToastAfter = initialOptions . showNextToastAfter ,
109+ onShow = initialOptions . onShow ,
110+ } = params ;
111+
99112 // TODO: validate input
100113 // TODO: use a queue when Toast is already visible
101- setIsVisible ( true ) ;
102- onShow ( ) ;
114+
115+ if ( isOvershow ) {
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+ }
103133 } ,
104- [ initialOptions , log ]
134+ [ hide , initialOptions . isOvershow , initialOptions . onShow , initialOptions . showNextToastAfter , isVisible , log , showNextToaster ]
105135 ) ;
106136
107137 React . useEffect ( ( ) => {
0 commit comments