defmodule ToweropsWeb.MaintenanceLive.Helpers do @moduledoc """ Shared presentation helpers for maintenance LiveViews. """ use Gettext, backend: ToweropsWeb.Gettext @spec status_for(struct()) :: :active | :upcoming | :past def status_for(window) do now = DateTime.utc_now() cond do DateTime.after?(window.starts_at, now) -> :upcoming DateTime.before?(window.ends_at, now) -> :past true -> :active end end @spec status_label(:active | :upcoming | :past) :: String.t() def status_label(:active), do: gettext("Active") def status_label(:upcoming), do: gettext("Upcoming") def status_label(:past), do: gettext("Past") @spec scope_label(struct()) :: String.t() def scope_label(window) do cond do window.device -> gettext("Device: %{name}", name: window.device.name) window.site -> gettext("Site: %{name}", name: window.site.name) true -> gettext("Org-wide") end end @spec format_datetime(DateTime.t(), String.t() | nil) :: String.t() def format_datetime(dt, timezone) do case DateTime.shift_zone(dt, timezone || "Etc/UTC") do {:ok, local} -> Calendar.strftime(local, "%b %d, %Y %I:%M %p") _ -> Calendar.strftime(dt, "%b %d, %Y %I:%M %p UTC") end end end