defmodule Moon.Design.Drawer do @moduledoc false use Moon.StatefulComponent prop(is_open, :boolean, default: false) data(is_closing, :boolean, default: false) slot(panel, required: true) slot(backdrop) prop(on_close, :event) prop(lg_persists, :boolean) prop(testid, :string) prop(class, :css_class) def render(assigns) do ~F"""
<#slot {@backdrop} /> <#slot {@panel} context_put={ on_close: @on_close || %{name: "start_closing_drawer", target: @myself} } />
""" end def open(drawer_id) do send_update(__MODULE__, id: drawer_id, is_open: true) end def close(drawer_id) do send_update(__MODULE__, id: drawer_id, is_closing: true) end def handle_event("set_open", _, socket) do {:noreply, assign(socket, is_open: true)} end def handle_event("start_closing_drawer", _, socket) do {:noreply, assign(socket, is_closing: true)} end def handle_event("stop_closing", _, socket) do {:noreply, assign(socket, is_closing: false)} end def handle_event("set_close", _, socket) do {:noreply, assign(socket, is_open: false, is_closing: false)} end end