FlatFilers / flatfile-core-libraries

MIT License
0 stars 2 forks source link

Suggestion: A way to detect when the user manually closes the Portal #219

Open cauli opened 1 week ago

cauli commented 1 week ago

version: Flatfile "Platform" lib: @flatfile/react

Overview

In my specific use-case, it matters if the user has closed the Portal (via the X button), or of it was closed programatically via closePortal() when using const { openPortal, closePortal } = useFlatfile()

But currently no event is emitted when the user closes the Portal, or when the Space is unmounted.

What did I try?

The only way of detecting this is through FlatfileProvider config

<FlatfileProvider config={{
   closeSpace: {
      // operation: not provided on purpose
      onClose() {
         // this will trigger when the user clicks the "X" close button,
         // but not when the portal is closed programatically
      }
   }
>
   {children}
</FlatfileProvider>

but the ergonomics of this is not ideal, because I need to React to that event from inside the provider, not from outside.

What about useFlatfile({onClose})?

useFlatfile({
   onClose() {
     // detects when the portal is closed for any reason, 
     // but doesn't provide a reason.
   }
)

This is insufficient, because I want to detect if it was closed by clicking the "X" (more like a "onCancel" event)

My workarounds

Arsik36 commented 6 days ago

Hey Cauli, would you be able to test with const { open } = useFlatfile(); and see if that makes any difference for you?

cauli commented 5 days ago

Hey @Arsik36.

const { open } = useFlatfile(); only allows me to know if the Portal is open or not, it doesn't solve the issue of being able to detect a cancellation (manual closure of the Portal by clicking on the "X")

It's definitely possible to create a workaround component that uses:

  1. open,
  2. useFlatfile({ onClose })
  3. And an event listener for job:outcome-acknowledged

It just ends up being a lot of code for what would be trivial to do on Flatfile's end (emit an event when closing the space)