Current section

Files

Jump to
scales_cms lib scales_cms_web helpers cms_block_resolver.ex
Raw

lib/scales_cms_web/helpers/cms_block_resolver.ex

defmodule ScalesCms.Helpers.BlockResolver do
@moduledoc """
Resolves block based on if it has a template assigned to it.
"""
alias ScalesCms.Cms.CmsBlockTemplate
alias ScalesCms.Cms.CmsBlockTemplates
alias ScalesCms.Cms.CmsPageVariantBlock
def resolve_block(%CmsPageVariantBlock{block_template_family_id: nil} = block, _locale) do
{:ok, block}
end
def resolve_block(
%CmsPageVariantBlock{
block_template_family_id: _family_id,
block_template_mode: :snapshot
} = block,
_locale
) do
{:ok, block}
end
def resolve_block(
%CmsPageVariantBlock{
block_template_family_id: family_id,
block_template_mode: :live
} = block,
locale
) do
case CmsBlockTemplates.get_by_family_and_locale(family_id, locale) do
nil ->
{:error, :template_not_found}
template ->
{:ok,
%{
block
| component_type: template.component_type,
properties: template.properties || %{}
}}
end
end
def resolve_block(%CmsPageVariantBlock{} = block, _locale) do
{:ok, block}
end
def resolve_block(%CmsBlockTemplate{} = block, _locale), do: {:ok, block}
def resolve_block_from_template(
%CmsPageVariantBlock{block_template_family_id: nil} = block,
_locale
) do
{:ok, block}
end
def resolve_block_from_template(
%CmsBlockTemplate{} = block,
_locale
) do
{:ok, block}
end
def resolve_block_from_template(
%CmsPageVariantBlock{block_template_family_id: family_id} = block,
locale
) do
case CmsBlockTemplates.get_by_family_and_locale(family_id, locale) do
nil ->
{:error, :template_not_found}
template ->
{:ok,
%{
block
| component_type: template.component_type,
properties: template.properties || %{}
}}
end
end
def template_block?(%CmsPageVariantBlock{block_template_family_id: nil}), do: false
def template_block?(%CmsPageVariantBlock{}), do: true
def template_block?(%CmsBlockTemplate{}), do: true
end