towerops/lib/towerops_web/live/coverage_live/index.ex
Graham McIntire 5a7cdc7138 refactor: apply custom color palette across entire codebase
- Replace gray->cool-steel, blue/indigo->cerulean, red->sweet-salmon, yellow/amber->wheat
- Dark sidebar: sidebar/footer use cool-steel-800 bg, text lightened for contrast
- ~11,600 color replacements across ~99 files
- Update tests for new color class names
2026-06-23 10:58:48 -05:00

83 lines
2.6 KiB
Elixir

defmodule ToweropsWeb.CoverageLive.Index do
@moduledoc false
use ToweropsWeb, :live_view
alias Towerops.Coverages
alias Towerops.Sites
@impl true
def mount(_params, _session, socket) do
organization = socket.assigns.current_scope.organization
_ = if connected?(socket), do: Coverages.subscribe_organization(organization.id)
{:ok,
socket
|> assign(:page_title, t("Coverage"))
|> assign(:organization, organization)
|> assign(:sites, Sites.list_organization_sites(organization.id))
|> load_coverages()}
end
@impl true
def handle_params(_params, _url, socket), do: {:noreply, socket}
@impl true
def handle_event("delete", %{"id" => id}, socket) do
coverage = Coverages.get_coverage!(socket.assigns.organization.id, id)
case Coverages.delete_coverage(coverage) do
{:ok, _} ->
{:noreply,
socket
|> put_flash(:info, t("Coverage deleted"))
|> load_coverages()}
{:error, _} ->
{:noreply, put_flash(socket, :error, t("Unable to delete coverage"))}
end
end
@impl true
def handle_event("recompute", %{"id" => id}, socket) do
coverage = Coverages.get_coverage!(socket.assigns.organization.id, id)
case Coverages.queue_compute(coverage) do
{:ok, _} ->
{:noreply,
socket
|> put_flash(:info, t("Coverage queued for recompute"))
|> load_coverages()}
{:error, :compute_in_progress} ->
{:noreply, put_flash(socket, :error, t("Coverage is already being computed"))}
{:error, _} ->
{:noreply, put_flash(socket, :error, t("Failed to queue coverage"))}
end
end
@impl true
def handle_info({:coverage_status, _status, _arg}, socket) do
{:noreply, load_coverages(socket)}
end
defp load_coverages(socket) do
assign(socket, :coverages, Coverages.list_for_organization(socket.assigns.organization.id))
end
@doc false
def status_badge_class("draft"),
do: "bg-cool-steel-100 text-cool-steel-700 dark:bg-cool-steel-800 dark:text-cool-steel-300"
def status_badge_class("queued"), do: "bg-cerulean-100 text-cerulean-800 dark:bg-cerulean-900/30 dark:text-cerulean-300"
def status_badge_class("computing"), do: "bg-wheat-100 text-wheat-800 dark:bg-wheat-900/30 dark:text-wheat-300"
def status_badge_class("ready"), do: "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300"
def status_badge_class("failed"),
do: "bg-sweet-salmon-100 text-sweet-salmon-800 dark:bg-sweet-salmon-900/30 dark:text-sweet-salmon-300"
def status_badge_class(_), do: "bg-cool-steel-100 text-cool-steel-700"
end