@@ -105,24 +105,43 @@ export class SnackBar extends SnackBarBase {
105105 }
106106 if ( resolve ) {
107107 const listener = new android . view . View . OnClickListener ( {
108- onClick : args => {
108+ onClick : ( args ) => {
109109 resolve ( {
110- command : 'Action' ,
110+ command : SnackBarAction . ACTION ,
111111 reason : _getReason ( 1 ) ,
112- event : args
112+ event : args ,
113113 } ) ;
114114 if ( this . _snackbarCallback ) {
115115 ( this . _snackbarCallback as any ) . cb = null ;
116116 this . _snackbarCallback = null ;
117117 }
118118 this . _snackbar = null ;
119- }
119+ } ,
120120 } ) ;
121121
122122 // set the action text, click listener
123123 this . _snackbar . setAction ( options . actionText , listener ) ;
124- initializeSnackCallback ( ) ;
125- const cb = ( this . _snackbarCallback = new SnackCallback ( ) ) ;
124+
125+ const callbackListener = new com . nativescript . material . snackbar . SnackCallback . SnackCallbackListener ( {
126+ onDismissed ( snackbar : com . google . android . material . snackbar . Snackbar , event : number ) {
127+ // if the dismiss was not caused by the action button click listener
128+ const resolve = ( cb as any ) . resolve ;
129+ if ( event !== com . google . android . material . snackbar . BaseTransientBottomBar . BaseCallback . DISMISS_EVENT_ACTION && resolve ) {
130+ resolve ( {
131+ command : SnackBarAction . DISMISS ,
132+ reason : _getReason ( event ) ,
133+ event : event ,
134+ } ) ;
135+ ( cb as any ) . resolve . resolve = null ;
136+ }
137+ ( cb as any ) . nListener = null ;
138+ } ,
139+
140+ onShown ( snackbar : com . google . android . material . snackbar . Snackbar ) { } ,
141+ } ) ;
142+ const cb = ( this . _snackbarCallback = new com . nativescript . material . snackbar . SnackCallback ( ) ) ;
143+ cb . setListener ( callbackListener ) ;
144+ ( cb as any ) . nListener = callbackListener ; // handles the resolve of the promise
126145 ( cb as any ) . resolve = resolve ; // handles the resolve of the promise
127146 this . _snackbar . addCallback ( cb ) ;
128147 }
@@ -158,7 +177,7 @@ export class SnackBar extends SnackBarBase {
158177 setTimeout ( ( ) => {
159178 resolve ( {
160179 action : SnackBarAction . DISMISS ,
161- reason : _getReason ( 3 )
180+ reason : _getReason ( 3 ) ,
162181 } ) ;
163182 } , 200 ) ;
164183 this . _snackbar = null ;
@@ -168,49 +187,13 @@ export class SnackBar extends SnackBarBase {
168187 } else {
169188 resolve ( {
170189 action : SnackBarAction . NONE ,
171- message : 'No actionbar to dismiss'
190+ message : 'No actionbar to dismiss' ,
172191 } ) ;
173192 }
174193 } ) ;
175194 }
176195}
177196
178- let SnackCallback : SnackCallback ;
179-
180- interface SnackCallback {
181- // resolve: Function;
182- new ( ) : com . google . android . material . snackbar . BaseTransientBottomBar . BaseCallback < com . google . android . material . snackbar . Snackbar > ;
183- }
184- function initializeSnackCallback ( ) {
185- if ( SnackCallback ) {
186- return ;
187- }
188-
189- class SnackCallbackImpl extends com . google . android . material . snackbar . BaseTransientBottomBar . BaseCallback < com . google . android . material . snackbar . Snackbar > {
190- public resolve : Function = null ;
191-
192- constructor ( ) {
193- super ( ) ;
194- return global . __native ( this ) ;
195- }
196-
197- onDismissed ( snackbar : com . google . android . material . snackbar . Snackbar , event : number ) {
198- // if the dismiss was not caused by the action button click listener
199- if ( event !== com . google . android . material . snackbar . BaseTransientBottomBar . BaseCallback . DISMISS_EVENT_ACTION && this . resolve ) {
200- this . resolve ( {
201- command : 'Dismiss' ,
202- reason : _getReason ( event ) ,
203- event : event
204- } ) ;
205- this . resolve = null ;
206- }
207- }
208-
209- onShown ( snackbar : com . google . android . material . snackbar . Snackbar ) { }
210- }
211-
212- SnackCallback = SnackCallbackImpl ;
213- }
214197export function showSnack ( options : SnackBarOptions ) {
215198 return new SnackBar ( ) . showSnack ( options ) ;
216199}
0 commit comments