From f2608e8f16bea6c84d0ff119c9fb1dc3f69c04b4 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Wed, 11 Mar 2026 09:54:18 -0500 Subject: [PATCH] fix: status emoji accumulating in page title and add missing page titles Fix JS regex in StatusTitle hook to use unicode flag so emoji are properly matched and replaced instead of accumulating. Add page_title to 8 LiveViews that were missing it, which caused "TowerOps | TowerOps" duplication from the live_title suffix. --- assets/js/app.ts | 2 +- lib/towerops_web/live/mobile_qr_live.ex | 1 + lib/towerops_web/live/org/gaiia_mapping_live.ex | 1 + lib/towerops_web/live/org/integrations_live.ex | 1 + lib/towerops_web/live/org/preseem_devices_live.ex | 1 + lib/towerops_web/live/org/preseem_insights_live.ex | 1 + lib/towerops_web/live/org/settings_live.ex | 1 + lib/towerops_web/live/user_registration_live.ex | 1 + lib/towerops_web/live/user_reset_password_live.ex | 1 + 9 files changed, 9 insertions(+), 1 deletion(-) diff --git a/assets/js/app.ts b/assets/js/app.ts index 9b2026d4..c07aaebd 100644 --- a/assets/js/app.ts +++ b/assets/js/app.ts @@ -1198,7 +1198,7 @@ const StatusTitle = { mounted(this: any) { this.handleEvent("update_status_emoji", ({ emoji }: { emoji: string }) => { const currentTitle = document.title - const titleWithoutEmoji = currentTitle.replace(/^[🔴🟡🟢]\s/, "") + const titleWithoutEmoji = currentTitle.replace(/^(?:🔴|🟡|🟢)\s/u, "") document.title = emoji ? `${emoji} ${titleWithoutEmoji}` : titleWithoutEmoji }) } diff --git a/lib/towerops_web/live/mobile_qr_live.ex b/lib/towerops_web/live/mobile_qr_live.ex index 266ca80b..4c5ea034 100644 --- a/lib/towerops_web/live/mobile_qr_live.ex +++ b/lib/towerops_web/live/mobile_qr_live.ex @@ -24,6 +24,7 @@ defmodule ToweropsWeb.MobileQRLive do socket = socket + |> assign(:page_title, t("Mobile App")) |> assign(:qr_token, qr_token) |> assign(:completed, false) |> assign(:mobile_session, nil) diff --git a/lib/towerops_web/live/org/gaiia_mapping_live.ex b/lib/towerops_web/live/org/gaiia_mapping_live.ex index 14e83c87..d4227b25 100644 --- a/lib/towerops_web/live/org/gaiia_mapping_live.ex +++ b/lib/towerops_web/live/org/gaiia_mapping_live.ex @@ -13,6 +13,7 @@ defmodule ToweropsWeb.Org.GaiiaMappingLive do {:ok, socket + |> assign(:page_title, t("Gaiia Entity Mapping")) |> assign(:organization, org) |> assign(:tab, "sites") |> assign(:filter, "all") diff --git a/lib/towerops_web/live/org/integrations_live.ex b/lib/towerops_web/live/org/integrations_live.ex index b5cb116c..0ba6bc26 100644 --- a/lib/towerops_web/live/org/integrations_live.ex +++ b/lib/towerops_web/live/org/integrations_live.ex @@ -100,6 +100,7 @@ defmodule ToweropsWeb.Org.IntegrationsLive do {:ok, socket + |> assign(:page_title, t("Integrations")) |> assign(:organization, organization) |> assign(:timezone, socket.assigns.current_scope.timezone) |> assign(:providers, @providers) diff --git a/lib/towerops_web/live/org/preseem_devices_live.ex b/lib/towerops_web/live/org/preseem_devices_live.ex index 560d895c..53ab17dc 100644 --- a/lib/towerops_web/live/org/preseem_devices_live.ex +++ b/lib/towerops_web/live/org/preseem_devices_live.ex @@ -12,6 +12,7 @@ defmodule ToweropsWeb.Org.PreseemDevicesLive do {:ok, socket + |> assign(:page_title, t("Preseem Devices")) |> assign(:organization, org) |> assign(:filter, "all") |> assign(:linking_ap_id, nil) diff --git a/lib/towerops_web/live/org/preseem_insights_live.ex b/lib/towerops_web/live/org/preseem_insights_live.ex index 331b69b7..4aa9e28c 100644 --- a/lib/towerops_web/live/org/preseem_insights_live.ex +++ b/lib/towerops_web/live/org/preseem_insights_live.ex @@ -11,6 +11,7 @@ defmodule ToweropsWeb.Org.PreseemInsightsLive do {:ok, socket + |> assign(:page_title, t("Preseem Insights")) |> assign(:organization, org) |> assign(:selected_ids, MapSet.new())} end diff --git a/lib/towerops_web/live/org/settings_live.ex b/lib/towerops_web/live/org/settings_live.ex index e67609c0..bb559b33 100644 --- a/lib/towerops_web/live/org/settings_live.ex +++ b/lib/towerops_web/live/org/settings_live.ex @@ -156,6 +156,7 @@ defmodule ToweropsWeb.Org.SettingsLive do {:ok, socket + |> assign(:page_title, t("Organization Settings")) |> assign(:organization, organization) |> assign(:membership, membership) |> assign(:user_orgs_count, user_orgs_count) diff --git a/lib/towerops_web/live/user_registration_live.ex b/lib/towerops_web/live/user_registration_live.ex index 5c74bac4..e2579662 100644 --- a/lib/towerops_web/live/user_registration_live.ex +++ b/lib/towerops_web/live/user_registration_live.ex @@ -22,6 +22,7 @@ defmodule ToweropsWeb.UserRegistrationLive do {:ok, socket + |> assign(:page_title, t("Register")) |> assign(:form, to_form(changeset)) |> assign(:invitation, invitation) |> assign(:invitation_token, invitation_token) diff --git a/lib/towerops_web/live/user_reset_password_live.ex b/lib/towerops_web/live/user_reset_password_live.ex index 22d13368..c43fa20b 100644 --- a/lib/towerops_web/live/user_reset_password_live.ex +++ b/lib/towerops_web/live/user_reset_password_live.ex @@ -20,6 +20,7 @@ defmodule ToweropsWeb.UserResetPasswordLive do {:ok, socket + |> assign(:page_title, t("Reset Password")) |> assign(:form, to_form(changeset)) |> assign(:token, token) |> assign(:user, user)