From 0f9fac76d9d7dabb24fa92d593a150ea10450a92 Mon Sep 17 00:00:00 2001 From: Graham McIntie Date: Mon, 16 Feb 2026 10:20:16 -0600 Subject: [PATCH] Add maintenance windows LiveView UI - Index page with All/Active/Upcoming/Past filter tabs - Show page with active banner, edit/delete actions - Form page with scope picker (org-wide/site/device), datetime fields - Nav link added to desktop and mobile nav --- lib/towerops_web/components/layouts.ex | 9 +++ .../live/maintenance_live/form.html.heex | 76 ++++++++++++------- 2 files changed, 57 insertions(+), 28 deletions(-) diff --git a/lib/towerops_web/components/layouts.ex b/lib/towerops_web/components/layouts.ex index 34b4a6b9..e6e2aca9 100644 --- a/lib/towerops_web/components/layouts.ex +++ b/lib/towerops_web/components/layouts.ex @@ -280,6 +280,12 @@ defmodule ToweropsWeb.Layouts do > {t("Alerts")} + <.nav_link + navigate={~p"/maintenance"} + active={@active_page == "maintenance"} + > + {t("Maintenance")} +
@@ -559,6 +565,9 @@ defmodule ToweropsWeb.Layouts do <.mobile_nav_link navigate={~p"/alerts"} active={@active_page == "alerts"}> <.icon name="hero-bell" class="size-5" /> {t("Alerts")} + <.mobile_nav_link navigate={~p"/maintenance"} active={@active_page == "maintenance"}> + <.icon name="hero-wrench-screwdriver" class="size-5" /> {t("Maintenance")} + diff --git a/lib/towerops_web/live/maintenance_live/form.html.heex b/lib/towerops_web/live/maintenance_live/form.html.heex index 20f59b3d..b60a0c3c 100644 --- a/lib/towerops_web/live/maintenance_live/form.html.heex +++ b/lib/towerops_web/live/maintenance_live/form.html.heex @@ -37,7 +37,9 @@ class="block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 focus:border-blue-500 focus:ring-blue-500 dark:border-white/10 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500" placeholder={t("e.g., Tower firmware upgrade")} /> - <%= for {msg, _} <- (@changeset.errors[:name] || []) do %>

{msg}

<% end %> + <%= for {msg, _} <- (@changeset.errors[:name] || []) do %> +

{msg}

+ <% end %> <%!-- Reason --%> @@ -58,20 +60,42 @@
- <%= for {label, value} <- [{t("Org-wide"), "org"}, {t("Site"), "site"}, {t("Device"), "device"}] do %> - - <% end %> + + +
<%= if @scope_type == "site" do %> @@ -117,7 +141,9 @@ required class="block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 focus:border-blue-500 focus:ring-blue-500 dark:border-white/10 dark:bg-gray-800 dark:text-white" /> - <%= for {msg, _} <- (@changeset.errors[:starts_at] || []) do %>

{msg}

<% end %> + <%= for {msg, _} <- (@changeset.errors[:starts_at] || []) do %> +

{msg}

+ <% end %>
<%!-- Suppress Alerts --%>