defmodule Shift73kWeb.ModalComponent do use Shift73kWeb, :live_component @impl true def render(assigns) do ~H""" <div id={@id} class="modal fade" phx-hook="BsModal" phx-window-keydown="hide" phx-key="escape" phx-target={"#" <> to_string(@id)} phx-page-loading> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title"><%= Keyword.get(@opts, :title, "Modal title") %></h5> <button type="button" class="btn-close" phx-click="hide" phx-target={@myself} aria-label="Close"></button> </div> <%= live_component @component, Keyword.put(@opts, :modal_id, @id) %> </div> </div> </div> """ end @impl true def update(assigns, socket) do socket |> assign(assigns) |> live_okreply() end @impl true def handle_event("close", _, socket) do send(self(), {:close_modal, true}) live_noreply(socket) end @impl true def handle_event("hide", _, socket) do socket |> push_event("modal-please-hide", %{}) |> live_noreply() end end