defmodule FloUI.Modal.Layout do
@moduledoc """
## Usage in SnapFramework
Scrolling layout modal component. Great for displaying content within a modal.
If the content needs to scroll within the modal, use FloUI.Modal.ScrollLayout.
data is a `:string`
style opts
`width: :integer`
`height: :integer`
`show_check: :boolean`
`show_close: :boolean`
``` elixir
<%= graph font_size: 20 %>
<%= component FloUI.Modal.Layout,
"label",
id: :scroll_layout,
width: 500,
height: 520,
show_check: true,
show_close: true
%>
```
"""
import Scenic.Primitives, only: [rect: 3, text: 3]
import FloUI.Modal.Background, only: [background: 3]
import FloUI.Icon.Button, only: [icon_button: 3]
use SnapFramework.Component,
name: :layout,
template: "lib/modal/layout.eex",
controller: :none,
assigns: [
width: 500,
height: 500,
show_check: true,
show_close: true
],
opts: []
defcomponent(:layout, :string)
def setup(%{assigns: %{opts: opts}} = scene) do
assign(scene,
width: opts[:width] || 500,
height: opts[:height] || 500,
show_check: opts[:show_check] || false,
show_close: opts[:show_close] || false
)
end
def process_event({:click, :btn_check}, _from, scene) do
send_parent_event(scene, :modal_done)
{:noreply, scene}
end
def process_event({:click, :btn_close}, _from, scene) do
send_parent_event(scene, :modal_close)
{:noreply, scene}
end
def process_event(event, _from, scene) do
{:cont, event, scene}
end
end