Current section

Files

Jump to
surface lib surface directive component_props.ex
Raw

lib/surface/directive/component_props.ex

defmodule Surface.Directive.ComponentProps do
use Surface.Directive
def extract({":props", {:attribute_expr, value, expr_meta}, attr_meta}, meta) do
expr_meta = Helpers.to_meta(expr_meta, meta)
attr_meta = Helpers.to_meta(attr_meta, meta)
%AST.Directive{
module: __MODULE__,
name: :props,
value: directive_value(value, expr_meta),
meta: attr_meta
}
end
def extract(_, _), do: []
def process(
%AST.Directive{value: %AST.AttributeExpr{} = expr, meta: meta},
%mod{} = node
)
when mod in [AST.Component, AST.FunctionComponent, AST.SlotableComponent] do
%{
node
| dynamic_props: %AST.DynamicAttribute{
name: :props,
meta: meta,
expr: expr
}
}
end
defp directive_value(value, meta) do
AST.AttributeExpr.new(
Surface.TypeHandler.expr_to_quoted!(value, ":props", :map, meta),
value,
meta
)
end
end