platform "client-side" requires {} { app : App state initData } exposes [] packages {} imports [ Html.Internal.Shared.{ App }, Html.Internal.Client.{ PlatformState, initClientApp, dispatchEvent }, ] provides [main] # Fields sorted by alignment, then alphabetically FromHost state initData : { eventHandlerId : U64, eventJsonList : List (List U8), eventPlatformState : Box (PlatformState state initData), initJson : List U8, isInitEvent : Bool, } # Fields sorted by alignment, then alphabetically ToHost state initData : { platformState : Box (PlatformState state initData), eventPreventDefault : Bool, eventStopPropagation : Bool, } # TODO: naming the type variables causes a type 'mismatch' # main : FromHost state initData -> Effect (ToHost state initData) where initData implements Decoding & Encoding main : FromHost _ _ -> Task (ToHost _ _) * main = \fromHost -> if fromHost.isInitEvent then initClientApp fromHost.initJson app |> Task.map \platformState -> { platformState: Box.box platformState, eventPreventDefault: Bool.false, eventStopPropagation: Bool.false, } else dispatchEvent (Box.unbox fromHost.eventPlatformState) fromHost.eventJsonList fromHost.eventHandlerId |> Task.map \jsEventResult -> { platformState: Box.box jsEventResult.platformState, eventPreventDefault: jsEventResult.preventDefault, eventStopPropagation: jsEventResult.stopPropagation, }