johnmcguin

johnmcguin

Context: I have a game that is client rendered via a live view with a custom hook. I am looking to persist a value to local storage so that the client side can re-hydrate its state on reconnect or refresh.

My live view gets set up via handle_params/3 and looks like

def handle_params(%{"id" => id, "name" => name}, _url, socket) do
  case Games.get_active_room(id) do
    nil ->
      socket
      |> put_flash(:error, "Game room #{id} not found")
      |> push_navigate(to: "/")
      |> then(fn socket -> {:noreply, socket} end)

    %Room{} = room ->
      Endpoint.subscribe(@current_game <> id)
      Presence.track(self(), @current_game <> id, name, %{name: name})
      Presence.track(self(), @all_players, "game_" <> id <> "_" <> name, %{name: name})
      broadcast_readiness(@current_game <> id, game_ready?(id, room.num_players))

      socket
      |> push_event("set_game_id", %{id: nil})
      |> assign(name: name)
      |> assign(room_id: id)
      |> assign(messages: %{})
      |> assign(game_ready: false)
      |> assign(winner: "")
      |> assign_async(:answer, fn -> get_answer(id) end)
      |> then(fn socket -> {:noreply, socket} end)
  end
end

In the hook’s mounted callback, I have the following listener (which does not work):

this.handleEvent("set_game_id", function (game) {
  console.log("set_game_id called");
  console.log({ game });
});

However, after doing a little debugging, I realized that registering an event listener on the window does work:

window.addEventListener("phx:set_game_id", (e) => console.log(e));

Is there something I am missing with regards to getting this to work in the hook?

Showing Posts 1 to 2

cmo

cmo

That sort of thing does work. I usually only push events in the connected mount/handle_params though. You could try if connected?(socket), do: push_event(...)

johnmcguin

johnmcguin OP

Thanks, I may try that just to learn. I ended up just changing the implementation to pass these as attributes on the element via assigns, which feels much simpler for the use case.

— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
Cxx-mlr
I’m working on a small exercise involving update_in/3, and I came up with this solution: data = %{ name: "Periodic Table", category:...
New
ChrisAmelia
I’ve got trouble wrapping my head around the order in which functions are called in this snippet (from Phoenix’s authentication): toke...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews