towerops/lib/towerops_web/live/schedule_live/index.ex
Graham McIntire 3bba1a6289
fix: display on-call user names instead of emails on schedule index
Update add_member test to use phx-change select instead of form submit.
2026-03-11 13:35:43 -05:00

58 lines
1.5 KiB
Elixir

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