Skip to content

Commit

Permalink
AutoSave: Periodic save.
Browse files Browse the repository at this point in the history
  • Loading branch information
slashrsm committed Mar 16, 2020
1 parent dde9925 commit f23ec8b
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
12 changes: 10 additions & 2 deletions lib/phoenix_auto_save/posts.ex
Expand Up @@ -73,6 +73,14 @@ defmodule PhoenixAutoSave.Posts do
|> Repo.update()
end

@doc """
Updates a post using a changeset.
"""
def update_post(%Ecto.Changeset{} = changeset) do
changeset
|> Repo.update()
end

@doc """
Deletes a post.
Expand All @@ -98,7 +106,7 @@ defmodule PhoenixAutoSave.Posts do
%Ecto.Changeset{source: %Post{}}
"""
def change_post(%Post{} = post) do
Post.changeset(post, %{})
def change_post(%Post{} = post, params \\ %{}) do
Post.changeset(post, params)
end
end
22 changes: 21 additions & 1 deletion lib/phoenix_auto_save_web/live/post_form_live.ex
Expand Up @@ -3,12 +3,14 @@ defmodule PhoenixAutoSaveWeb.PostFormLive do
use Phoenix.HTML

alias PhoenixAutoSave.Posts
alias PhoenixAutoSave.Posts.Post

def render(assigns) do
Phoenix.View.render(PhoenixAutoSaveWeb.PostView, "form.html", assigns)
end

def mount(_params, session, socket) do
schedule_save()
{
:ok,
socket
Expand All @@ -19,7 +21,16 @@ defmodule PhoenixAutoSaveWeb.PostFormLive do
end

def handle_event("change", %{"post" => post_params}, socket) do
{:ok, post} = Posts.update_post(socket.assigns.post, post_params)
{
:noreply,
socket
|> assign(:changeset, Posts.change_post(socket.assigns.post, post_params))
}
end

def handle_info(:store, socket) do
{:ok, post} = Posts.update_post(socket.assigns.changeset)
schedule_save()
{
:noreply,
socket
Expand All @@ -28,4 +39,13 @@ defmodule PhoenixAutoSaveWeb.PostFormLive do
}
end

def terminate(_reason, socket) do
{:ok, %Post{}} = Posts.update_post(socket.assigns.changeset)
:ok
end

defp schedule_save() do
Process.send_after(self(), :store, 10 * 1_000)
end

end

0 comments on commit f23ec8b

Please sign in to comment.