mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-09-09 06:24:29 +08:00
Change wording from delete session to close session (#160)
This commit is contained in:
parent
5f5ef1d0b6
commit
d8213c3f68
9 changed files with 56 additions and 58 deletions
|
@ -52,12 +52,12 @@ defmodule Livebook.SessionSupervisor do
|
||||||
@doc """
|
@doc """
|
||||||
Asynchronously stops a session process identified by the given id.
|
Asynchronously stops a session process identified by the given id.
|
||||||
|
|
||||||
Broadcasts `{:session_delete, id}` message under the `"sessions"` topic.
|
Broadcasts `{:session_closed, id}` message under the `"sessions"` topic.
|
||||||
"""
|
"""
|
||||||
@spec delete_session(Session.id()) :: :ok
|
@spec close_session(Session.id()) :: :ok
|
||||||
def delete_session(id) do
|
def close_session(id) do
|
||||||
Session.close(id)
|
Session.close(id)
|
||||||
broadcast_sessions_message({:session_deleted, id})
|
broadcast_sessions_message({:session_closed, id})
|
||||||
:ok
|
:ok
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -90,9 +90,9 @@ defmodule LivebookWeb.HomeLive do
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= if @live_action == :delete_session do %>
|
<%= if @live_action == :close_session do %>
|
||||||
<%= live_modal @socket, LivebookWeb.SessionLive.DeleteSessionComponent,
|
<%= live_modal @socket, LivebookWeb.SessionLive.CloseSessionComponent,
|
||||||
id: :delete_session_modal,
|
id: :close_session_modal,
|
||||||
return_to: Routes.home_path(@socket, :page),
|
return_to: Routes.home_path(@socket, :page),
|
||||||
session_summary: @session_summary %>
|
session_summary: @session_summary %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
@ -148,7 +148,7 @@ defmodule LivebookWeb.HomeLive do
|
||||||
{:noreply, assign(socket, session_summaries: session_summaries)}
|
{:noreply, assign(socket, session_summaries: session_summaries)}
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_info({:session_deleted, id}, socket) do
|
def handle_info({:session_closed, id}, socket) do
|
||||||
session_summaries = Enum.reject(socket.assigns.session_summaries, &(&1.session_id == id))
|
session_summaries = Enum.reject(socket.assigns.session_summaries, &(&1.session_id == id))
|
||||||
{:noreply, assign(socket, session_summaries: session_summaries)}
|
{:noreply, assign(socket, session_summaries: session_summaries)}
|
||||||
end
|
end
|
||||||
|
|
34
lib/livebook_web/live/home_live/close_session_component.ex
Normal file
34
lib/livebook_web/live/home_live/close_session_component.ex
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
defmodule LivebookWeb.SessionLive.CloseSessionComponent do
|
||||||
|
use LivebookWeb, :live_component
|
||||||
|
|
||||||
|
alias Livebook.SessionSupervisor
|
||||||
|
|
||||||
|
@impl true
|
||||||
|
def render(assigns) do
|
||||||
|
~L"""
|
||||||
|
<div class="p-6 pb-4 max-w-xl w-screen flex flex-col space-y-8">
|
||||||
|
<h3 class="text-2xl font-semibold text-gray-800">
|
||||||
|
Close session
|
||||||
|
</h3>
|
||||||
|
<p class="text-gray-700">
|
||||||
|
Are you sure you want to close this section -
|
||||||
|
<span class="font-semibold">“<%= @session_summary.notebook_name %>”</span>?
|
||||||
|
This won't delete any persisted files.
|
||||||
|
</p>
|
||||||
|
<div class="mt-8 flex justify-end space-x-2">
|
||||||
|
<button class="button button-red" phx-click="close" phx-target="<%= @myself %>">
|
||||||
|
<%= remix_icon("close-circle-line", class: "align-middle mr-1") %>
|
||||||
|
Close session
|
||||||
|
</button>
|
||||||
|
<%= live_patch "Cancel", to: @return_to, class: "button button-outlined-gray" %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
"""
|
||||||
|
end
|
||||||
|
|
||||||
|
@impl true
|
||||||
|
def handle_event("close", %{}, socket) do
|
||||||
|
SessionSupervisor.close_session(socket.assigns.session_summary.session_id)
|
||||||
|
{:noreply, push_patch(socket, to: socket.assigns.return_to)}
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,36 +0,0 @@
|
||||||
defmodule LivebookWeb.SessionLive.DeleteSessionComponent do
|
|
||||||
use LivebookWeb, :live_component
|
|
||||||
|
|
||||||
alias Livebook.SessionSupervisor
|
|
||||||
|
|
||||||
@impl true
|
|
||||||
def render(assigns) do
|
|
||||||
~L"""
|
|
||||||
<div class="p-6 pb-4 max-w-md w-screen flex flex-col space-y-8">
|
|
||||||
<h3 class="text-2xl font-semibold text-gray-800">
|
|
||||||
Delete session
|
|
||||||
</h3>
|
|
||||||
<p class="text-gray-700">
|
|
||||||
Are you sure you want to delete this section -
|
|
||||||
<span class="font-semibold">
|
|
||||||
“<%= @session_summary.notebook_name %>”
|
|
||||||
</span>?
|
|
||||||
This won't delete any persisted files.
|
|
||||||
</p>
|
|
||||||
<div class="mt-8 flex justify-end space-x-2">
|
|
||||||
<button class="button button-red" phx-click="delete" phx-target="<%= @myself %>">
|
|
||||||
<%= remix_icon("delete-bin-6-line", class: "align-middle mr-1") %>
|
|
||||||
Delete session
|
|
||||||
</button>
|
|
||||||
<%= live_patch "Cancel", to: @return_to, class: "button button-outlined-gray" %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
"""
|
|
||||||
end
|
|
||||||
|
|
||||||
@impl true
|
|
||||||
def handle_event("delete", %{}, socket) do
|
|
||||||
SessionSupervisor.delete_session(socket.assigns.session_summary.session_id)
|
|
||||||
{:noreply, push_patch(socket, to: socket.assigns.return_to)}
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -26,10 +26,10 @@ defmodule LivebookWeb.SessionLive.SessionsComponent do
|
||||||
<%= remix_icon("git-branch-line") %>
|
<%= remix_icon("git-branch-line") %>
|
||||||
<span class="font-medium">Fork</span>
|
<span class="font-medium">Fork</span>
|
||||||
</button>
|
</button>
|
||||||
<%= live_patch to: Routes.home_path(@socket, :delete_session, summary.session_id),
|
<%= live_patch to: Routes.home_path(@socket, :close_session, summary.session_id),
|
||||||
class: "flex space-x-3 px-5 py-2 items-center text-red-600 hover:bg-gray-50" do %>
|
class: "flex space-x-3 px-5 py-2 items-center text-red-600 hover:bg-gray-50" do %>
|
||||||
<%= remix_icon("delete-bin-6-line") %>
|
<%= remix_icon("close-circle-line") %>
|
||||||
<span class="font-medium">Delete</span>
|
<span class="font-medium">Close</span>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -15,7 +15,7 @@ defmodule LivebookWeb.Router do
|
||||||
pipe_through :browser
|
pipe_through :browser
|
||||||
|
|
||||||
live "/", HomeLive, :page
|
live "/", HomeLive, :page
|
||||||
live "/home/sessions/:session_id/delete", HomeLive, :delete_session
|
live "/home/sessions/:session_id/close", HomeLive, :close_session
|
||||||
live "/sessions/:id", SessionLive, :page
|
live "/sessions/:id", SessionLive, :page
|
||||||
live "/sessions/:id/shortcuts", SessionLive, :shortcuts
|
live "/sessions/:id/shortcuts", SessionLive, :shortcuts
|
||||||
live "/sessions/:id/settings/:tab", SessionLive, :settings
|
live "/sessions/:id/settings/:tab", SessionLive, :settings
|
||||||
|
|
|
@ -19,13 +19,13 @@ defmodule Livebook.SessionSupervisorTest do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "delete_session/1" do
|
describe "close_session/1" do
|
||||||
test "stops the session process identified by the given id" do
|
test "stops the session process identified by the given id" do
|
||||||
{:ok, id} = SessionSupervisor.create_session()
|
{:ok, id} = SessionSupervisor.create_session()
|
||||||
{:ok, pid} = SessionSupervisor.get_session_pid(id)
|
{:ok, pid} = SessionSupervisor.get_session_pid(id)
|
||||||
ref = Process.monitor(pid)
|
ref = Process.monitor(pid)
|
||||||
|
|
||||||
SessionSupervisor.delete_session(id)
|
SessionSupervisor.close_session(id)
|
||||||
|
|
||||||
assert_receive {:DOWN, ^ref, :process, _, _}
|
assert_receive {:DOWN, ^ref, :process, _, _}
|
||||||
refute has_child_with_pid?(SessionSupervisor, pid)
|
refute has_child_with_pid?(SessionSupervisor, pid)
|
||||||
|
@ -35,9 +35,9 @@ defmodule Livebook.SessionSupervisorTest do
|
||||||
Phoenix.PubSub.subscribe(Livebook.PubSub, "sessions")
|
Phoenix.PubSub.subscribe(Livebook.PubSub, "sessions")
|
||||||
{:ok, id} = SessionSupervisor.create_session()
|
{:ok, id} = SessionSupervisor.create_session()
|
||||||
|
|
||||||
SessionSupervisor.delete_session(id)
|
SessionSupervisor.close_session(id)
|
||||||
|
|
||||||
assert_receive {:session_deleted, ^id}
|
assert_receive {:session_closed, ^id}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ defmodule LivebookWeb.SessionControllerTest do
|
||||||
assert conn.status == 404
|
assert conn.status == 404
|
||||||
assert conn.resp_body == "Not found"
|
assert conn.resp_body == "Not found"
|
||||||
|
|
||||||
SessionSupervisor.delete_session(session_id)
|
SessionSupervisor.close_session(session_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "returns the image when it does exist", %{conn: conn} do
|
test "returns the image when it does exist", %{conn: conn} do
|
||||||
|
@ -33,7 +33,7 @@ defmodule LivebookWeb.SessionControllerTest do
|
||||||
assert conn.status == 200
|
assert conn.status == 200
|
||||||
assert get_resp_header(conn, "content-type") == ["image/jpeg"]
|
assert get_resp_header(conn, "content-type") == ["image/jpeg"]
|
||||||
|
|
||||||
SessionSupervisor.delete_session(session_id)
|
SessionSupervisor.close_session(session_id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -96,7 +96,7 @@ defmodule LivebookWeb.HomeLiveTest do
|
||||||
{:ok, id} = SessionSupervisor.create_session()
|
{:ok, id} = SessionSupervisor.create_session()
|
||||||
assert render(view) =~ id
|
assert render(view) =~ id
|
||||||
|
|
||||||
SessionSupervisor.delete_session(id)
|
SessionSupervisor.close_session(id)
|
||||||
refute render(view) =~ id
|
refute render(view) =~ id
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ defmodule LivebookWeb.HomeLiveTest do
|
||||||
assert render(view) =~ "My notebook - fork"
|
assert render(view) =~ "My notebook - fork"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "allows deleting session after confirmation", %{conn: conn} do
|
test "allows closing session after confirmation", %{conn: conn} do
|
||||||
{:ok, id} = SessionSupervisor.create_session()
|
{:ok, id} = SessionSupervisor.create_session()
|
||||||
|
|
||||||
{:ok, view, _} = live(conn, "/")
|
{:ok, view, _} = live(conn, "/")
|
||||||
|
@ -125,11 +125,11 @@ defmodule LivebookWeb.HomeLiveTest do
|
||||||
assert render(view) =~ id
|
assert render(view) =~ id
|
||||||
|
|
||||||
view
|
view
|
||||||
|> element(~s{[data-test-session-id="#{id}"] a}, "Delete")
|
|> element(~s{[data-test-session-id="#{id}"] a}, "Close")
|
||||||
|> render_click()
|
|> render_click()
|
||||||
|
|
||||||
view
|
view
|
||||||
|> element(~s{button}, "Delete session")
|
|> element(~s{button}, "Close session")
|
||||||
|> render_click()
|
|> render_click()
|
||||||
|
|
||||||
refute render(view) =~ id
|
refute render(view) =~ id
|
||||||
|
|
Loading…
Add table
Reference in a new issue