mirror of
https://github.com/livebook-dev/livebook.git
synced 2024-09-20 10:05:57 +08:00
Fix output ids within grid and tabs
This commit is contained in:
parent
b87eb8eb28
commit
0e06d8c0e7
|
@ -13,8 +13,8 @@ defmodule LivebookWeb.Output.GridComponent do
|
||||||
socket = assign(socket, assigns)
|
socket = assign(socket, assigns)
|
||||||
|
|
||||||
stream_items =
|
stream_items =
|
||||||
for {idx, output} <- Enum.reverse(outputs) do
|
for {idx, output} <- outputs do
|
||||||
id = "#{socket.assigns.id}-grid-item-#{idx}"
|
id = "#{idx}-grid-item"
|
||||||
%{id: id, idx: idx, output: output}
|
%{id: id, idx: idx, output: output}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ defmodule LivebookWeb.Output.GridComponent do
|
||||||
>
|
>
|
||||||
<div :for={{dom_id, output} <- @streams.outputs} id={dom_id}>
|
<div :for={{dom_id, output} <- @streams.outputs} id={dom_id}>
|
||||||
<LivebookWeb.Output.output
|
<LivebookWeb.Output.output
|
||||||
id={"#{dom_id}-output"}
|
id={"outputs-#{output.idx}"}
|
||||||
output={output.output}
|
output={output.output}
|
||||||
session_id={@session_id}
|
session_id={@session_id}
|
||||||
session_pid={@session_pid}
|
session_pid={@session_pid}
|
||||||
|
|
|
@ -24,8 +24,8 @@ defmodule LivebookWeb.Output.TabsComponent do
|
||||||
socket = assign(socket, assigns)
|
socket = assign(socket, assigns)
|
||||||
|
|
||||||
stream_items =
|
stream_items =
|
||||||
for {idx, output} <- Enum.reverse(outputs) do
|
for {idx, output} <- outputs do
|
||||||
id = "#{socket.assigns.id}-tab-content-#{idx}"
|
id = "#{idx}-tabs-item"
|
||||||
%{id: id, idx: idx, output: output}
|
%{id: id, idx: idx, output: output}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ defmodule LivebookWeb.Output.TabsComponent do
|
||||||
class={[output.idx != @active_idx && "hidden"]}
|
class={[output.idx != @active_idx && "hidden"]}
|
||||||
>
|
>
|
||||||
<LivebookWeb.Output.output
|
<LivebookWeb.Output.output
|
||||||
id={"#{dom_id}-output"}
|
id={"outputs-#{output.idx}"}
|
||||||
output={output.output}
|
output={output.output}
|
||||||
session_id={@session_id}
|
session_id={@session_id}
|
||||||
session_pid={@session_pid}
|
session_pid={@session_pid}
|
||||||
|
|
|
@ -686,6 +686,40 @@ defmodule LivebookWeb.SessionLiveTest do
|
||||||
refute content =~ "In frame"
|
refute content =~ "In frame"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "frame output update when within grid", %{conn: conn, session: session} do
|
||||||
|
Session.subscribe(session.id)
|
||||||
|
evaluate_setup(session.pid)
|
||||||
|
|
||||||
|
section_id = insert_section(session.pid)
|
||||||
|
cell_id = insert_text_cell(session.pid, section_id, :code)
|
||||||
|
|
||||||
|
Session.queue_cell_evaluation(session.pid, cell_id)
|
||||||
|
|
||||||
|
frame = %{type: :frame, ref: "1", outputs: [terminal_text("In frame")], placeholder: true}
|
||||||
|
grid = %{type: :grid, outputs: [frame], columns: ["Frame"], gap: 8, boxed: false}
|
||||||
|
send(session.pid, {:runtime_evaluation_output, cell_id, grid})
|
||||||
|
|
||||||
|
{:ok, view, _} = live(conn, ~p"/sessions/#{session.id}")
|
||||||
|
assert render(view) =~ "In frame"
|
||||||
|
|
||||||
|
frame_update = %{
|
||||||
|
type: :frame_update,
|
||||||
|
ref: "1",
|
||||||
|
update: {:replace, [terminal_text("Updated frame")]}
|
||||||
|
}
|
||||||
|
|
||||||
|
send(session.pid, {:runtime_evaluation_output, cell_id, frame_update})
|
||||||
|
|
||||||
|
wait_for_session_update(session.pid)
|
||||||
|
|
||||||
|
# Render once, so that frame send_update is processed
|
||||||
|
_ = render(view)
|
||||||
|
|
||||||
|
content = render(view)
|
||||||
|
assert content =~ "Updated frame"
|
||||||
|
refute content =~ "In frame"
|
||||||
|
end
|
||||||
|
|
||||||
test "client-specific output is sent only to one target", %{conn: conn, session: session} do
|
test "client-specific output is sent only to one target", %{conn: conn, session: session} do
|
||||||
user1 = build(:user, name: "Jake Peralta")
|
user1 = build(:user, name: "Jake Peralta")
|
||||||
{_, client_id} = Session.register_client(session.pid, self(), user1)
|
{_, client_id} = Session.register_client(session.pid, self(), user1)
|
||||||
|
|
Loading…
Reference in a new issue