58 lines
1.5 KiB
Elixir
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
|