-
Notifications
You must be signed in to change notification settings - Fork 336
Description
While going through the Recorder component's typescript, refactoring and otherwise cleaning up the code I began thinking about the best way to handle errors. It reminded me of an event system idea I mentioned during an earlier brainstorm. At the time I'd thought of it as a "larger change" although the more I think about it the less complex the solution seems.
If FastUI defined a schema for an endpoint to follow, it would allow tighter integration between a developers FastUI app and the react site being generated. I could imagine adding the support of error handling with the FastUI docs saying: "if you make an endpoint available at 'fui/errors' then any component which supports FastUI Alerts will send them through that endpoint". Then in the npm-fastui project, a hook could be engineered in a similar manner to useClassName, ie useFireEvent/Errors/Alerts/Callables/etc, make it aware of the component type so that it exposes the components fields which use a new fastui.events.CallableEvent field type. Similar to the existing events, a component developer would call the return function that's aware of the available CallableEvent fields defined in the component. For example, in the Recorder typescript component, I might call useFireEvent<Recorder>().fireCallable('onStopRecording', blobRecordingFormData). The two parameters being a type-safe field name 'onMySerializedAliasCallableEventField' optionally along with someFormData. This adding a fast and convenient way for the React page to interact back to the python app. The fireCallable would form a standard return structure and send it to the endpoint, allowing any number of easy handling options for the developer to route the event knowledge/data where it needs to go. A step further, though increasing the complexity, there could be a python FastUI System Endpoint decorator ie: @fastui.system_endpoint, converting standard requests into instances of whichever pydantic class is 'responsible' for calling the system endpoint and the developer could use structural pattern matching to identify/gain access to the component.
This might be completely out of scope for what FastUI is aiming at however, I think it would really enhance the integration available for component designers, even in the simplest implementation of a wrapped alert function that attempts to submit a form to some predefined endpoint that might not exist. As more people begin building sites, I think issues like #64 will become more common.
Anyone have any thoughts?