defmodule ScalesCmsWeb.Components.CmsComponentsRenderer do @moduledoc """ The renderer of all the blocks, linking them to the right components """ use ScalesCmsWeb, :live_component attr :id, :string, required: true attr :published, :boolean, default: false attr :deleting, :boolean, default: false attr :animate_in, :boolean, default: false attr :ghost_height, :float, default: 0.0 attr :locale, :string, required: true attr :block, ScalesCms.Cms.CmsPageVariantBlock attr :template_builder, :boolean, default: false def render_preview(assigns) do {:ok, resolved_block} = case assigns.published do true -> ScalesCms.Helpers.BlockResolver.resolve_block(assigns.block, assigns.locale) false -> case assigns.block do %{block_template_mode: mode} when mode in [:live, :snapshot] -> ScalesCms.Helpers.BlockResolver.resolve_block_from_template( assigns.block, assigns.locale ) _ -> ScalesCms.Helpers.BlockResolver.resolve_block(assigns.block, assigns.locale) end end component = ScalesCmsWeb.Components.CmsComponents.get_component(resolved_block.component_type) assigns = assigns |> assign(:block, resolved_block) |> assign(:component, component) |> assign( :disabled, assigns.published || (match?(%{block_template_mode: mode} when mode in [:live, :snapshot], assigns.block) && !assigns.template_builder) ) ~H"""
ID: {@block.id}
Type: {@block.component_type}
Sort order: {@block.sort_order}
<% end %>