smartSelect wait user confirm before opening

Hi,

(still using v5, I think the v6 shares similar syntax)

the thing I want is simple - ask user to confirm before opening the smartSelect.

mySmartSelect.on( "beforeOpen", (smartSelect, prevent)=>{
  if( !confirm("something") ){
    prevent();
  }
} );

Since .open() itself emits “beforeOpen” event, will cause a loop if F7.dialog is used:

// NOT WORKING
mySmartSelect.on( "beforeOpen", (smartSelect, prevent)=>{
        prevent();
	app.dialog.confirm( "something", () => {
		smartSelect.open();
	} );
} );
// NOT WORKING - can't simply do this, the smartSelect just opens
mySmartSelect.on( "beforeOpen", (smartSelect, prevent)=>{
	app.dialog.confirm( "something", () => {
	}, ()={
        prevent();
    } );
} );

This is the workaround. Do you know a more elegant way to do this?

mySmartSelect.on( "beforeOpen", (smartSelect, prevent)=>{
   if( !smartSelect.userHasConfirmed ){
        prevent();
	    app.dialog.confirm( "something", () => {
            smartSelect.userHasConfirmed= true;
            smartSelect.open();
     	} );
	}else{
		delete smartSelect.userHasConfirmed;
	}
} );

Just found out by investigating source
.openPopup();
.openPopover();
.openPage();
can be used to open without triggering “beforeOpen”.

mySmartSelect.on( "beforeOpen", (smartSelect, prevent)=>{
	prevent();
	app.dialog.confirm( "something", () => {
		smartSelect.openPopup();
	} );
} );
2 Likes