Tags Input · Patterns
Controlled tag list and allow-list validation (both use controlled mode).
Controlled
lorem
duis
donec
<.tags_input
class="tags-input"
controlled
value={["lorem", "duis", "donec"]}
on_value_change="tags_patterns_value_changed"
>
<:label>Labels</:label>
<:close><.heroicon name="hero-x-mark" /></:close>
</.tags_input>
def handle_event("tags_patterns_value_changed", %{"id" => _id, "value" => value}, socket)
when is_list(value) do
{:noreply, assign(socket, :tags, value)}
end
Validation
lorem
duis
<.tags_input
class="tags-input"
controlled
value={["lorem", "duis"]}
on_value_change="tags_patterns_validated_changed"
>
<:label>Allowed: lorem, duis, donec</:label>
<:close><.heroicon name="hero-x-mark" /></:close>
</.tags_input>
def mount(_params, _session, socket) do
{:ok, assign(socket, :allowed_tags, ["lorem", "duis", "donec"])}
end
def handle_event("tags_patterns_validated_changed", %{"id" => _id, "value" => value}, socket)
when is_list(value) do
allowed = socket.assigns.allowed_tags
filtered = Enum.filter(value, &(&1 in allowed))
{:noreply, assign(socket, :tags_validated, filtered)}
end