defmodule BerrypodWeb.ErrorHTML do @moduledoc """ This module is invoked by your endpoint in case of errors on HTML requests. See config/config.exs. """ use BerrypodWeb, :html alias Berrypod.Settings alias Berrypod.Settings.ThemeSettings alias Berrypod.Media alias Berrypod.Products alias Berrypod.Theme.{CSSCache, CSSGenerator} def render("404.html", assigns) 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." ) end def render("500.html", assigns) 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." ) end def render(template, _assigns) do Phoenix.Controller.status_message_from_template(template) end defp render_error_page(assigns, error_code, error_title, error_description) do # Load theme settings with fallback for error conditions {theme_settings, generated_css} = load_theme_data() logo_image = safe_load(&Media.get_logo/0) header_image = safe_load(&Media.get_header/0) products = safe_load(fn -> Products.list_visible_products(limit: 4) end) || [] categories = safe_load(fn -> Products.list_categories() end) || [] assigns = assigns |> Map.put(:theme_settings, theme_settings) |> Map.put(:generated_css, generated_css) |> Map.put(:logo_image, logo_image) |> 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) |> Map.put(:cart_subtotal, "£0.00") ~H"""