summaryrefslogtreecommitdiff
path: root/lib/aggiedit_web/live/post_live/form_component.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/aggiedit_web/live/post_live/form_component.ex')
-rw-r--r--lib/aggiedit_web/live/post_live/form_component.ex55
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/aggiedit_web/live/post_live/form_component.ex b/lib/aggiedit_web/live/post_live/form_component.ex
new file mode 100644
index 0000000..11ad4a1
--- /dev/null
+++ b/lib/aggiedit_web/live/post_live/form_component.ex
@@ -0,0 +1,55 @@
+defmodule AggieditWeb.PostLive.FormComponent do
+ use AggieditWeb, :live_component
+
+ alias Aggiedit.Rooms
+
+ @impl true
+ def update(%{post: post} = assigns, socket) do
+ changeset = Rooms.change_post(post)
+
+ {:ok,
+ socket
+ |> assign(assigns)
+ |> assign(:changeset, changeset)}
+ end
+
+ @impl true
+ def handle_event("validate", %{"post" => post_params}, socket) do
+ changeset =
+ socket.assigns.post
+ |> Rooms.change_post(post_params)
+ |> Map.put(:action, :validate)
+
+ {:noreply, assign(socket, :changeset, changeset)}
+ end
+
+ def handle_event("save", %{"post" => post_params}, socket) do
+ save_post(socket, socket.assigns.action, post_params)
+ end
+
+ defp save_post(socket, :edit, post_params) do
+ case Rooms.update_post(socket.assigns.post, post_params) do
+ {:ok, _post} ->
+ {:noreply,
+ socket
+ |> put_flash(:info, "Post updated successfully")
+ |> push_redirect(to: socket.assigns.return_to)}
+
+ {:error, %Ecto.Changeset{} = changeset} ->
+ {:noreply, assign(socket, :changeset, changeset)}
+ end
+ end
+
+ defp save_post(socket, :new, post_params) do
+ case Rooms.create_post(post_params) do
+ {:ok, _post} ->
+ {:noreply,
+ socket
+ |> put_flash(:info, "Post created successfully")
+ |> push_redirect(to: socket.assigns.return_to)}
+
+ {:error, %Ecto.Changeset{} = changeset} ->
+ {:noreply, assign(socket, changeset: changeset)}
+ end
+ end
+end