defmodule BerrypodWeb.Shop.Pages.Home do @moduledoc """ Home page handler for the unified Shop.Page LiveView. """ import Phoenix.Component, only: [assign: 2, assign: 3] alias Berrypod.{Pages, Settings} alias BerrypodWeb.Helpers.SeoHelpers def init(socket, _params, _uri) do page = Pages.get_page("home") extra = Pages.load_block_data(page.blocks, socket.assigns) base = BerrypodWeb.Endpoint.url() site_name = socket.assigns.site_name org_ld = build_organization_json_ld(socket.assigns, base, site_name) json_ld = combine_json_ld([org_ld, SeoHelpers.faq_json_ld(page.blocks)]) socket = socket |> assign(:page_title, "Home") |> assign(:og_url, base <> "/") |> assign(:json_ld, json_ld) |> assign(:page, page) |> maybe_assign_meta_robots(page) |> SeoHelpers.assign_og_image(page, base) |> assign(extra) {:noreply, socket} end # Combine multiple JSON-LD scripts into a single output (newline-separated) defp combine_json_ld(ld_list) do ld_list |> Enum.reject(&is_nil/1) |> case do [] -> nil [single] -> single many -> Enum.join(many, "\n\n