Allow for hiding notebooks from recent list (#1830)

This commit is contained in:
Jonatan Kłosko 2023-03-27 19:59:12 +01:00 committed by GitHub
parent fda0525fae
commit 15d2b2f75e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 2 deletions

View file

@ -85,6 +85,14 @@ defmodule Livebook.NotebookManager do
GenServer.cast(__MODULE__, {:add_starred_notebook, file, name})
end
@doc """
Removes the given file from recent notebooks.
"""
@spec remove_recent_notebook(FileSystem.File.t()) :: :ok
def remove_recent_notebook(file) do
GenServer.cast(__MODULE__, {:remove_recent_notebook, file})
end
@doc """
Removes the given file from starred notebooks.
"""
@ -171,6 +179,13 @@ defmodule Livebook.NotebookManager do
end
end
def handle_cast({:remove_recent_notebook, file}, state = prev_state) do
recent_notebooks = Enum.reject(state.recent_notebooks, &(&1.file == file))
state = %{state | recent_notebooks: recent_notebooks}
broadcast_changes(state, prev_state)
{:noreply, state, {:continue, :dump_state}}
end
def handle_cast({:remove_starred_notebook, file}, state = prev_state) do
starred_notebooks = Enum.reject(state.starred_notebooks, &(&1.file == file))
state = %{state | starred_notebooks: starred_notebooks}

View file

@ -17,7 +17,7 @@ defmodule Livebook.Storage do
@type namespace :: atom()
@type entity_id :: binary()
@type attribute :: atom()
@type value :: binary() | nil
@type value :: term()
@type timestamp :: non_neg_integer()
@type entity :: %{required(:id) => entity_id(), optional(attribute()) => value()}

View file

@ -113,7 +113,26 @@ defmodule LivebookWeb.OpenLive do
notebook_infos={@recent_notebooks}
sessions={@sessions}
added_at_label="Opened"
/>
>
<:card_icon :let={{_info, idx}}>
<span class="tooltip top" data-tooltip="Hide notebook">
<button
aria-label="hide notebook"
phx-click={
with_confirm(
JS.push("hide_recent_notebook", value: %{idx: idx}),
title: "Hide notebook",
description: "The notebook will reappear here when you open it again.",
confirm_text: "Hide",
opt_out_id: "hide-notebook"
)
}
>
<.remix_icon icon="close-fill" class="text-gray-600 text-lg" />
</button>
</span>
</:card_icon>
</.live_component>
<% end %>
<div class="mt-3 text-gray-600 text-sm">
Looking for unsaved notebooks? <.link
@ -174,6 +193,12 @@ defmodule LivebookWeb.OpenLive do
{:noreply, create_session(socket)}
end
def handle_event("hide_recent_notebook", %{"idx" => idx}, socket) do
%{file: file} = Enum.fetch!(socket.assigns.recent_notebooks, idx)
Livebook.NotebookManager.remove_recent_notebook(file)
{:noreply, socket}
end
@impl true
def handle_info({type, session} = event, socket)
when type in [:session_created, :session_updated, :session_closed] and