Current section

Files

Jump to
scales_cms lib scales_cms_web controllers api public pages_json.ex
Raw

lib/scales_cms_web/controllers/api/public/pages_json.ex

defmodule ScalesCmsWeb.Api.Public.PagesJSON do
def index(%{pages: pages, api_version: api_version, pagination: pagination}) do
%{
api_version: api_version,
pagination: pagination,
pages:
Enum.map(
pages,
&ScalesCmsWeb.Api.Public.PagesJSON.show(%{
page: &1.latest_published_page,
api_version: api_version
})
)
}
end
def show(%{page: page, api_version: api_version}) do
%{
id: page.id,
api_version: api_version,
title: page.title,
slug: page.page.slug,
directory_id: page.page.cms_directory_id,
locale: page.locale,
blocks:
for(
block <- page.blocks,
do: block(%{block: block, api_version: api_version, locale: page.locale})
)
}
end
def block(%{block: block, api_version: api_version, locale: locale}) do
with {:ok, resolved_block} <- ScalesCms.Helpers.BlockResolver.resolve_block(block, locale),
component when not is_nil(component) <-
ScalesCmsWeb.Components.CmsComponents.get_component(resolved_block.component_type) do
component.serialize(api_version, resolved_block)
end
end
end