My 2 cents (feeling adventures)
flash_components.ex
:
defmodule ProjectWeb.FlashComponents do
@parent __MODULE__ |> Module.split() |> Enum.drop(-1) |> Module.concat()
@core Module.concat(@parent, CoreComponents)
defdelegate flash(assigns), to: @core
defdelegate flash_group(assigns), to: @core
end
form_components.ex
:
defmodule ProjectWeb.FormComponents do
@parent __MODULE__ |> Module.split() |> Enum.drop(-1) |> Module.concat()
@core Module.concat(@parent, CoreComponents)
defdelegate simple_form(assigns), to: @core
defdelegate button(assigns), to: @core
defdelegate input(assigns), to: @core
defdelegate label(assigns), to: @core
end
modal_components.ex
:
defmodule ProjectWeb.ModalComponents do
@parent __MODULE__ |> Module.split() |> Enum.drop(-1) |> Module.concat()
@core Module.concat(@parent, CoreComponents)
defdelegate modal(assigns), to: @core
alias Phoenix.LiveView.JS
defdelegate show_modal(js \\ %JS{}, id), to: @core
defdelegate hide_modal(js \\ %JS{}, id), to: @core
end
show_components.ex
:
defmodule ProjectWeb.ShowComponents do
@parent __MODULE__ |> Module.split() |> Enum.drop(-1) |> Module.concat()
@core Module.concat(@parent, CoreComponents)
defdelegate header(assigns), to: @core
defdelegate table(assigns), to: @core
defdelegate list(assigns), to: @core
defdelegate back(assigns), to: @core
alias Phoenix.LiveView.JS
defdelegate show(js \\ %JS{}, selector), to: @core
defdelegate hide(js \\ %JS{}, selector), to: @core
end
error_components.ex
:
defmodule ProjectWeb.ErrorComponents do
@parent __MODULE__ |> Module.split() |> Enum.drop(-1) |> Module.concat()
@core Module.concat(@parent, CoreComponents)
defdelegate error(assigns), to: @core
defdelegate translate_error(params_tuple), to: @core
defdelegate translate_errors(errors, field), to: @core
end
And certainly project_web.ex
will have to rewire:
defp html_helpers do
quote do
# ...
# import ProjectWeb.CoreComponents
import ProjectWeb.FormComponents
import ProjectWeb.FlashComponents
import ProjectWeb.ModalComponents
import ProjectWeb.ShowComponents
import ProjectWeb.ErrorComponents