Packages
surface
0.11.2
0.12.3
0.12.2
0.12.1
0.12.0
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.1
0.1.0
0.1.0-alpha.2
0.1.0-alpha.1
0.1.0-alpha.0
A component based library for Phoenix LiveView
Current section
Files
Jump to
Current section
Files
lib/surface/directive/let.ex
defmodule Surface.Directive.Let do
use Surface.Directive
def extract({":let", {:attribute_expr, value, expr_meta}, attr_meta}, meta) do
%AST.Directive{
module: __MODULE__,
name: :let,
value: directive_value(value, Helpers.to_meta(expr_meta, meta)),
meta: Helpers.to_meta(attr_meta, meta)
}
end
def extract(_, _), do: []
def process(%AST.Directive{value: value}, %AST.Component{} = node) do
update_in(node.slot_entries, fn
%{default: [first | others]} = tpls ->
Map.put(tpls, :default, [%{first | let: value} | others])
tpls ->
tpls
end)
end
def process(%AST.Directive{value: value}, %type{} = node)
when type in [AST.SlotEntry, AST.SlotableComponent] do
%{node | let: value}
end
def process(_, node), do: node
defp directive_value(value, meta) do
AST.AttributeExpr.new(
Surface.TypeHandler.expr_to_quoted!(value, ":let", :let_arg, meta),
value,
meta
)
end
end