* Fix title test

* Fix editable element check

* Fix duplicate output ids
This commit is contained in:
Jonatan Kłosko 2022-01-19 14:43:35 +01:00 committed by GitHub
parent 3c48fff159
commit ae0f083c5c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 11 deletions

View file

@ -6,7 +6,9 @@ export function isMacOS() {
} }
export function isEditableElement(element) { export function isEditableElement(element) {
return element.matches("input, textarea, [contenteditable]"); return (
element.matches && element.matches("input, textarea, [contenteditable]")
);
} }
export function clamp(n, x, y) { export function clamp(n, x, y) {

View file

@ -3,7 +3,7 @@ defmodule LivebookWeb.Output.FrameComponent do
@impl true @impl true
def mount(socket) do def mount(socket) do
{:ok, assign(socket, counter: 0, output_count: 0, persistent_idx_map: %{})} {:ok, assign(socket, counter: 0, output_count: 0, persistent_id_map: %{})}
end end
@impl true @impl true
@ -18,7 +18,7 @@ defmodule LivebookWeb.Output.FrameComponent do
assign(socket, assign(socket,
counter: 1, counter: 1,
output_count: length(outputs), output_count: length(outputs),
persistent_idx_map: idx_map(outputs) persistent_id_map: map_idx_to_persistent_id(outputs, socket.assigns.id)
) )
else else
socket socket
@ -31,23 +31,23 @@ defmodule LivebookWeb.Output.FrameComponent do
:replace -> :replace ->
prev_output_count = socket.assigns.output_count prev_output_count = socket.assigns.output_count
prev_persistent_idx_map = socket.assigns.persistent_idx_map prev_persistent_id_map = socket.assigns.persistent_id_map
output_count = length(outputs) output_count = length(outputs)
persistent_idx_map = idx_map(outputs) persistent_id_map = map_idx_to_persistent_id(outputs, socket.assigns.id)
socket = socket =
assign(socket, assign(socket,
outputs: outputs, outputs: outputs,
output_count: output_count, output_count: output_count,
persistent_idx_map: persistent_idx_map persistent_id_map: persistent_id_map
) )
less_outputs? = prev_output_count > output_count less_outputs? = prev_output_count > output_count
appended_outputs? = prev_output_count > map_size(prev_persistent_idx_map) appended_outputs? = prev_output_count > map_size(prev_persistent_id_map)
# If there are outputs that we need to remove, increase the counter. # If there are outputs that we need to remove, increase the counter.
# Otherwise we reuse DOM element ids via persistent_idx_map # Otherwise we reuse DOM element ids via persistent_id_map
if less_outputs? or appended_outputs? do if less_outputs? or appended_outputs? do
update(socket, :counter, &(&1 + 1)) update(socket, :counter, &(&1 + 1))
else else
@ -63,10 +63,10 @@ defmodule LivebookWeb.Output.FrameComponent do
{:ok, socket} {:ok, socket}
end end
defp idx_map(outputs) do defp map_idx_to_persistent_id(outputs, root_id) do
outputs outputs
|> Enum.with_index() |> Enum.with_index()
|> Map.new(fn {{output_idx, _}, idx} -> {output_idx, idx} end) |> Map.new(fn {{output_idx, _}, idx} -> {output_idx, "#{root_id}-#{idx}"} end)
end end
@impl true @impl true
@ -81,7 +81,7 @@ defmodule LivebookWeb.Output.FrameComponent do
<div id={"frame-outputs-#{@id}-#{@counter}"} phx-update="append"> <div id={"frame-outputs-#{@id}-#{@counter}"} phx-update="append">
<LivebookWeb.Output.outputs <LivebookWeb.Output.outputs
outputs={@outputs} outputs={@outputs}
dom_id_map={@persistent_idx_map} dom_id_map={@persistent_id_map}
socket={@socket} socket={@socket}
session_id={@session_id} session_id={@session_id}
input_values={@input_values} input_values={@input_values}

View file

@ -36,6 +36,9 @@ defmodule LivebookWeb.SessionLiveTest do
Session.set_notebook_name(session.pid, "My notebook") Session.set_notebook_name(session.pid, "My notebook")
wait_for_session_update(session.pid) wait_for_session_update(session.pid)
# Wait for LV to update
render(view)
assert page_title(view) =~ "My notebook" assert page_title(view) =~ "My notebook"
end end