Current section

Files

Jump to
slurpee lib slurpee_web components component_helpers.ex
Raw

lib/slurpee_web/components/component_helpers.ex

defmodule SlurpeeWeb.Components.ComponentHelpers do
alias Phoenix.Naming
alias SlurpeeWeb.Components
@moduledoc """
Conveniences for reusable UI components
"""
def c(namespace, name \\ :index, assigns \\ []) do
component(namespace, template(name), assigns)
end
def c(namespace, name, assigns, opts) do
component(namespace, template(name), assigns, opts)
end
def component(namespace, template, assigns) do
apply(
view(namespace),
:render,
[template, assigns]
)
end
def component(namespace, template, assigns, do: block) do
apply(
view(namespace),
:render,
[template, Keyword.merge(assigns, do: block)]
)
end
def view_opts(namespace) do
[
root: "lib/slurpee_web/components/#{namespace}/templates",
namespace: SlurpeeWeb,
path: ""
]
end
defp view(name) do
module_name = Naming.camelize("#{name}") <> "View"
Module.concat(Components, module_name)
end
defp template(name) when is_atom(name) do
"#{name}.html"
end
end