feat(chat): add form to new room modal
This commit is contained in:
parent
33f36a5254
commit
cf925bb87b
@ -211,7 +211,18 @@ defmodule SlaxWeb.ChatRoomLive do
|
|||||||
</div>
|
</div>
|
||||||
<.modal id="new-room-modal">
|
<.modal id="new-room-modal">
|
||||||
<.header>New chat room</.header>
|
<.header>New chat room</.header>
|
||||||
(Form goes here)
|
<.simple_form
|
||||||
|
for={@new_room_form}
|
||||||
|
id="room-form"
|
||||||
|
phx-change="validate-room"
|
||||||
|
phx-submit="save-room"
|
||||||
|
>
|
||||||
|
<.input field={@new_room_form[:name]} type="text" label="Name" phx-debounce />
|
||||||
|
<.input field={@new_room_form[:topic]} type="text" label="Topic" phx-debounce />
|
||||||
|
<:actions>
|
||||||
|
<.button phx-disable-with="Saving..." class="w-full">Save</.button>
|
||||||
|
</:actions>
|
||||||
|
</.simple_form>
|
||||||
</.modal>
|
</.modal>
|
||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
@ -240,6 +251,7 @@ defmodule SlaxWeb.ChatRoomLive do
|
|||||||
timezone: timezone,
|
timezone: timezone,
|
||||||
users: users
|
users: users
|
||||||
)
|
)
|
||||||
|
|> assign_room_form(Chat.change_room(%Room{}))
|
||||||
|> stream_configure(:messages,
|
|> stream_configure(:messages,
|
||||||
dom_id: fn
|
dom_id: fn
|
||||||
%Message{id: id} -> "messages-#{id}"
|
%Message{id: id} -> "messages-#{id}"
|
||||||
@ -302,6 +314,16 @@ defmodule SlaxWeb.ChatRoomLive do
|
|||||||
{:noreply, assign_message_form(socket, changeset)}
|
{:noreply, assign_message_form(socket, changeset)}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@impl Phoenix.LiveView
|
||||||
|
def handle_event("validate-room", %{"room" => room_params}, socket) do
|
||||||
|
changeset =
|
||||||
|
socket.assigns.room
|
||||||
|
|> Chat.change_room(room_params)
|
||||||
|
|> Map.put(:action, :validate)
|
||||||
|
|
||||||
|
{:noreply, assign_room_form(socket, changeset)}
|
||||||
|
end
|
||||||
|
|
||||||
@impl Phoenix.LiveView
|
@impl Phoenix.LiveView
|
||||||
def handle_event("submit-message", %{"message" => message_params}, socket) do
|
def handle_event("submit-message", %{"message" => message_params}, socket) do
|
||||||
%{current_user: user, room: room} = socket.assigns
|
%{current_user: user, room: room} = socket.assigns
|
||||||
@ -342,6 +364,22 @@ defmodule SlaxWeb.ChatRoomLive do
|
|||||||
{:noreply, socket}
|
{:noreply, socket}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@impl Phoenix.LiveView
|
||||||
|
def handle_event("save-room", %{"room" => room_params}, socket) do
|
||||||
|
case Chat.create_room(room_params) do
|
||||||
|
{:ok, room} ->
|
||||||
|
Chat.join_room!(room, socket.assigns.current_user)
|
||||||
|
|
||||||
|
{:noreply,
|
||||||
|
socket
|
||||||
|
|> put_flash(:info, "Created room")
|
||||||
|
|> push_navigate(to: ~p"/rooms/#{room}")}
|
||||||
|
|
||||||
|
{:error, changeset} ->
|
||||||
|
{:noreply, assign_room_form(socket, changeset)}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@impl Phoenix.LiveView
|
@impl Phoenix.LiveView
|
||||||
def handle_info({:new_message, message}, socket) do
|
def handle_info({:new_message, message}, socket) do
|
||||||
room = socket.assigns.room
|
room = socket.assigns.room
|
||||||
@ -386,6 +424,10 @@ defmodule SlaxWeb.ChatRoomLive do
|
|||||||
{:noreply, assign(socket, online_users: online_users)}
|
{:noreply, assign(socket, online_users: online_users)}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp assign_room_form(socket, changeset) do
|
||||||
|
assign(socket, :new_room_form, to_form(changeset))
|
||||||
|
end
|
||||||
|
|
||||||
attr :active, :boolean, required: true
|
attr :active, :boolean, required: true
|
||||||
attr :room, Room, required: true
|
attr :room, Room, required: true
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user