From b06029079db08a110d782d18915bdc81c5d9114c Mon Sep 17 00:00:00 2001 From: jamey Date: Fri, 20 Feb 2026 22:19:21 +0000 Subject: [PATCH] improve error pages: minimal version when site not live Show a lightweight error page using admin.css when the shop isn't live yet, avoiding broken theme dependencies. Also tidied up copy to sentence case and shorter descriptions. Co-Authored-By: Claude Opus 4.6 --- lib/berrypod_web/controllers/error_html.ex | 50 ++++++++++++++++--- .../controllers/error_html_test.exs | 10 ++-- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/lib/berrypod_web/controllers/error_html.ex b/lib/berrypod_web/controllers/error_html.ex index 7edc4b3..af978d3 100644 --- a/lib/berrypod_web/controllers/error_html.ex +++ b/lib/berrypod_web/controllers/error_html.ex @@ -16,8 +16,8 @@ defmodule BerrypodWeb.ErrorHTML do render_error_page( assigns, "404", - "Page Not Found", - "Sorry, we couldn't find the page you're looking for. Perhaps you've mistyped the URL or the page has been moved." + "Page not found", + "Sorry, we couldn't find the page you're looking for." ) end @@ -25,8 +25,8 @@ defmodule BerrypodWeb.ErrorHTML do render_error_page( assigns, "500", - "Server Error", - "Something went wrong on our end. Please try again later or contact support if the problem persists." + "Server error", + "Something went wrong on our end. Please try again later." ) end @@ -35,7 +35,44 @@ defmodule BerrypodWeb.ErrorHTML do end defp render_error_page(assigns, error_code, error_title, error_description) do - # Load theme settings with fallback for error conditions + site_live = safe_load(&Settings.site_live?/0) || false + + assigns = + assigns + |> Map.put(:error_code, error_code) + |> Map.put(:error_title, error_title) + |> Map.put(:error_description, error_description) + |> Map.put(:site_live, site_live) + + if site_live do + render_themed_error(assigns) + else + render_minimal_error(assigns) + end + end + + defp render_minimal_error(assigns) do + ~H""" + + + + + + {@error_code} - {@error_title} + + + +
+

{@error_code}

+

{@error_title}

+

{@error_description}

+
+ + + """ + end + + defp render_themed_error(assigns) do {theme_settings, generated_css} = load_theme_data() logo_image = safe_load(&Media.get_logo/0) header_image = safe_load(&Media.get_header/0) @@ -51,9 +88,6 @@ defmodule BerrypodWeb.ErrorHTML do |> Map.put(:header_image, header_image) |> Map.put(:products, products) |> Map.put(:categories, categories) - |> Map.put(:error_code, error_code) - |> Map.put(:error_title, error_title) - |> Map.put(:error_description, error_description) |> Map.put(:mode, :shop) |> Map.put(:cart_items, []) |> Map.put(:cart_count, 0) diff --git a/test/berrypod_web/controllers/error_html_test.exs b/test/berrypod_web/controllers/error_html_test.exs index 5585fed..a073dbf 100644 --- a/test/berrypod_web/controllers/error_html_test.exs +++ b/test/berrypod_web/controllers/error_html_test.exs @@ -4,17 +4,15 @@ defmodule BerrypodWeb.ErrorHTMLTest do # Bring render_to_string/4 for testing custom views import Phoenix.Template, only: [render_to_string: 4] - test "renders 404.html with themed page" do + test "renders 404.html" do html = render_to_string(BerrypodWeb.ErrorHTML, "404", "html", []) assert html =~ "404" - assert html =~ "Page Not Found" - assert html =~ "shop-root" + assert html =~ "Page not found" end - test "renders 500.html with themed page" do + test "renders 500.html" do html = render_to_string(BerrypodWeb.ErrorHTML, "500", "html", []) assert html =~ "500" - assert html =~ "Server Error" - assert html =~ "shop-root" + assert html =~ "Server error" end end