[@@@ocaml.warning "-26-27-33"] open Melange_json.Primitives open React module Aria = ReactAria let button_class_inline = "group inline-flex flex-row items-center px-1.5 py-1 -mx-0.75 -my-1 \ rounded-lg focus-visible:outline-none hover:bg-mist-20/40 \ active:bg-mist-20/40" let button_class_default = "group w-64 flex flex-row items-center gap-x-1 px-2 py-1.5 -mx-2 rounded-lg \ focus-visible:outline-none hover:bg-mist-20/40 active:bg-mist-20/40" let value_class_inline = "text-mana-100 font-serif inline-flex items-center gap-x-1" let value_class_default = "text-mana-100 font-serif flex items-center gap-x-1" type actor = {did: string; handle: string; avatar_data_uri: string option [@default None]} [@@deriving json] let fallback handle avatar inline = let button_class = if inline then button_class_inline else button_class_default in let value_class = if inline then value_class_inline else value_class_default in let[@react.component] make ~current_user ~logged_in_users ~add_account_url ?(name = "did") ?(inline = false) ?onChange () = let handleAccountSwitch = [%browser_only fun newDid -> if newDid <> current_user.did then ( let body = Fetch.BodyInit.make ( Webapi.Url.URLSearchParams.makeWithArray [|("did", newDid)|] |> Webapi.Url.URLSearchParams.toString ) in let _ = Fetch.fetchWithInit "/account/switch" (Fetch.RequestInit.make ~method_:Fetch.Post ~headers: (Fetch.HeadersInit.makeWithArray [|("Content-Type", "application/x-www-form-urlencoded")|] ) ~body () ) |> Js.Promise.then_ (fun response -> if Fetch.Response.ok response then ( ignore ([%mel.raw {| window.location.reload() |}] : unit) ; Js.Promise.resolve () ) else Js.Promise.resolve () ) |> Js.Promise.catch (fun _ -> Js.Promise.resolve ()) in () ; match onChange with Some f -> f newDid | None -> () ) else ()] in let button_class = if inline then button_class_inline else button_class_default in let value_class = if inline then value_class_inline else value_class_default in [%browser_only fun () -> ( List.map (fun (user : actor) -> ( match user.avatar_data_uri with | Some src -> | None -> null ) (string user.handle) ) logged_in_users |> Array.of_list |> array ) (string "add account") ]