defmodule ToweropsWeb.ScheduleLive.Index do @moduledoc false use ToweropsWeb, :live_view alias Towerops.OnCall @impl true def mount(_params, _session, socket) do organization = socket.assigns.current_scope.organization {:ok, socket |> assign(:page_title, t("Schedules")) |> assign(:active_page, "schedules") |> assign(:tab, "schedules") |> load_data(organization.id)} end @impl true def handle_params(params, _url, socket) do tab = Map.get(params, "tab", "schedules") org_id = socket.assigns.current_scope.organization.id {:noreply, socket |> assign(:tab, tab) |> load_data(org_id)} end defp load_data(socket, org_id) do case socket.assigns.tab do "escalation-policies" -> policies = OnCall.list_escalation_policies(org_id) assign(socket, :policies, policies) _ -> schedules = OnCall.list_schedules(org_id) schedules_with_on_call = Enum.map(schedules, fn schedule -> on_call = OnCall.who_is_on_call(schedule.id) schedule |> Map.put(:current_on_call, on_call) |> Map.put(:current_on_call_name, display_name(on_call)) end) assign(socket, :schedules, schedules_with_on_call) end end defp display_name(%{first_name: first, last_name: last}) when first != nil and last != nil do "#{first} #{last}" end defp display_name(%{email: email}), do: email defp display_name(nil), do: nil end