@@ -4,6 +4,7 @@ import EventListener from '../lib/EventListener.js';
44import putility from '@heyputer/putility' ;
55
66const FILE_SAVE_CANCELLED = Symbol ( 'FILE_SAVE_CANCELLED' ) ;
7+ const FILE_OPEN_CANCELLED = Symbol ( 'FILE_OPEN_CANCELLED' ) ;
78
89// AppConnection provides an API for interacting with another app.
910// It's returned by UI methods, and cannot be constructed directly by user code.
@@ -474,6 +475,10 @@ class UI extends EventListener {
474475 // execute callback
475476 this . #callbackFunctions[ e . data . original_msg_id ] ( FILE_SAVE_CANCELLED ) ;
476477 }
478+ else if ( e . data . msg === "fileOpenCancelled" ) {
479+ // execute callback
480+ this . #callbackFunctions[ e . data . original_msg_id ] ( FILE_OPEN_CANCELLED ) ;
481+ }
477482 else {
478483 // execute callback
479484 this . #callbackFunctions[ e . data . original_msg_id ] ( e . data ) ;
@@ -691,7 +696,8 @@ class UI extends EventListener {
691696 }
692697
693698 showOpenFilePicker = function ( options , callback ) {
694- return new Promise ( ( resolve , reject ) => {
699+ const undefinedOnCancel = new putility . libs . promise . TeePromise ( ) ;
700+ const resolveOnlyPromise = new Promise ( ( resolve , reject ) => {
695701 if ( ! globalThis . open ) {
696702 return reject ( "This API is not compatible in Web Workers." ) ;
697703 }
@@ -716,8 +722,18 @@ class UI extends EventListener {
716722 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left ) ;
717723 }
718724 //register callback
719- this . #callbackFunctions[ msg_id ] = resolve ;
725+ this . #callbackFunctions[ msg_id ] = ( maybe_result ) => {
726+ // Only resolve cancel events if this was called with `.undefinedOnCancel`
727+ if ( maybe_result === FILE_OPEN_CANCELLED ) {
728+ undefinedOnCancel . resolve ( undefined ) ;
729+ return ;
730+ }
731+ undefinedOnCancel . resolve ( maybe_result ) ;
732+ resolve ( maybe_result ) ;
733+ } ;
720734 } )
735+ resolveOnlyPromise . undefinedOnCancel = undefinedOnCancel ;
736+ return resolveOnlyPromise ;
721737 }
722738
723739 showFontPicker = function ( options ) {
0 commit comments