defmodule MicrowavepropWeb.BeaconLive.Show do @moduledoc false use MicrowavepropWeb, :live_view alias Microwaveprop.Beacons alias Microwaveprop.Beacons.Beacon @impl true def render(assigns) do ~H""" <.header> {@beacon.callsign} <:subtitle>{@beacon.frequency_mhz} MHz · {@beacon.grid} <:actions> <.button navigate={~p"/beacons"}> <.icon name="hero-arrow-left" /> <.button :if={admin?(@current_scope)} variant="primary" navigate={~p"/beacons/#{@beacon}/edit?return_to=show"} > <.icon name="hero-pencil-square" /> Edit <.list> <:item title="Frequency (MHz)">{@beacon.frequency_mhz} <:item title="Callsign">{@beacon.callsign} <:item title="Grid">{@beacon.grid} <:item title="Latitude">{@beacon.lat} <:item title="Longitude">{@beacon.lon} <:item title="Power (W)">{@beacon.power_watts} <:item title="Height above ground (m)">{@beacon.height_m} """ end @impl true def mount(%{"id" => id}, _session, socket) do if connected?(socket), do: Beacons.subscribe_beacons() {:ok, socket |> assign(:page_title, "Beacon") |> assign(:beacon, Beacons.get_beacon!(id))} end @impl true def handle_info({:updated, %Beacon{id: id} = beacon}, %{assigns: %{beacon: %{id: id}}} = socket) do {:noreply, assign(socket, :beacon, beacon)} end def handle_info({:deleted, %Beacon{id: id}}, %{assigns: %{beacon: %{id: id}}} = socket) do {:noreply, socket |> put_flash(:error, "This beacon was deleted.") |> push_navigate(to: ~p"/beacons")} end def handle_info({type, %Beacon{}}, socket) when type in [:created, :updated, :deleted] do {:noreply, socket} end defp admin?(%{user: %{is_admin: true}}), do: true defp admin?(_), do: false end