@@ -240,19 +240,37 @@ defmodule Popcorn.Wasm do
240240 end
241241
242242 @ doc """
243- Notifies JS that Elixir side finished initializing. Can be called only once .
243+ Sends an event to JS side. Fire-and-forget .
244244 """
245- def register ( main_process_name ) do
245+ @ spec send_event ( String . t ( ) ) :: :ok
246+ @ spec send_event ( String . t ( ) , term ( ) ) :: :ok
247+ def send_event ( event_name , payload \\ nil ) when is_binary ( event_name ) do
246248 """
247249 ({ wasm, args }) => {
248- wasm.onElixirReady?. (args.main);
250+ wasm.sendEvent (args.eventName, args.payload)
249251 }
250252 """
251- |> run_js ( % { main: to_string ( main_process_name ) } )
253+ |> run_js ( % { eventName: event_name , payload: payload } , return: :ref )
252254
253255 :ok
254256 end
255257
258+ @ doc """
259+ Sets the default receiver process for JS calls/casts.
260+ Registers the calling process under `name` if not already registered.
261+ """
262+ @ spec set_default_receiver ( atom ( ) ) :: :ok
263+ def set_default_receiver ( name ) when is_atom ( name ) do
264+ case Process . whereis ( name ) do
265+ nil -> Process . register ( self ( ) , name )
266+ pid when pid == self ( ) -> :ok
267+ _other -> raise "Name #{ name } already registered to another process"
268+ end
269+
270+ send_event ( "popcorn_set_default_receiver" , % { name: to_string ( name ) } )
271+ :ok
272+ end
273+
256274 @ doc """
257275 Registers event listener for element with given `selector`. Events will be sent to the process registered under `target` name.
258276 To get event data, specify needed keys in `event_keys` list.
0 commit comments