fix: tab titles on ai chats on reload
This commit is contained in:
@@ -2,7 +2,7 @@ defmodule BDS.Desktop.ShellLive.TabHelpers do
|
|||||||
@moduledoc false
|
@moduledoc false
|
||||||
|
|
||||||
alias BDS.Desktop.ShellData
|
alias BDS.Desktop.ShellData
|
||||||
alias BDS.{BoundedAtoms, Media, Posts}
|
alias BDS.{AI, BoundedAtoms, Media, Posts}
|
||||||
alias BDS.Media.Media, as: MediaRecord
|
alias BDS.Media.Media, as: MediaRecord
|
||||||
alias BDS.Posts.Post
|
alias BDS.Posts.Post
|
||||||
alias BDS.UI.Registry
|
alias BDS.UI.Registry
|
||||||
@@ -21,10 +21,12 @@ defmodule BDS.Desktop.ShellLive.TabHelpers do
|
|||||||
def tab_subtitle(tab, tab_meta) do
|
def tab_subtitle(tab, tab_meta) do
|
||||||
case Map.get(tab_meta, {tab.type, tab.id}) do
|
case Map.get(tab_meta, {tab.type, tab.id}) do
|
||||||
%{subtitle: subtitle} when is_binary(subtitle) and subtitle != "" -> subtitle
|
%{subtitle: subtitle} when is_binary(subtitle) and subtitle != "" -> subtitle
|
||||||
_other -> "Desktop workbench content routed through the Elixir shell."
|
_other -> default_tab_subtitle(tab)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def default_tab_title(%{type: :chat, id: conversation_id}), do: chat_title(conversation_id)
|
||||||
|
|
||||||
def default_tab_title(%{type: type, id: id}) do
|
def default_tab_title(%{type: type, id: id}) do
|
||||||
case Registry.editor_route(type) do
|
case Registry.editor_route(type) do
|
||||||
%{singleton: true} -> ShellData.route_label(type)
|
%{singleton: true} -> ShellData.route_label(type)
|
||||||
@@ -32,6 +34,9 @@ defmodule BDS.Desktop.ShellLive.TabHelpers do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp default_tab_subtitle(%{type: :chat}), do: translated("AI conversations")
|
||||||
|
defp default_tab_subtitle(_tab), do: "Desktop workbench content routed through the Elixir shell."
|
||||||
|
|
||||||
def tab_route_label(nil), do: translated("Dashboard")
|
def tab_route_label(nil), do: translated("Dashboard")
|
||||||
def tab_route_label(%{type: type}), do: ShellData.route_label(type)
|
def tab_route_label(%{type: type}), do: ShellData.route_label(type)
|
||||||
|
|
||||||
@@ -88,6 +93,14 @@ defmodule BDS.Desktop.ShellLive.TabHelpers do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def chat_title(conversation_id) do
|
||||||
|
case AI.get_chat_conversation(conversation_id) do
|
||||||
|
%{title: title} when is_binary(title) and title != "" -> title
|
||||||
|
%{id: id} when is_binary(id) and id != "" -> id
|
||||||
|
_other -> "Chat"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def parse_integer(value) when is_integer(value), do: value
|
def parse_integer(value) when is_integer(value), do: value
|
||||||
|
|
||||||
def parse_integer(value) do
|
def parse_integer(value) do
|
||||||
|
|||||||
@@ -707,6 +707,27 @@ defmodule BDS.Desktop.ShellLiveTest do
|
|||||||
assert html =~ ~s(class="tab active transient")
|
assert html =~ ~s(class="tab active transient")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "workbench session restore rehydrates chat tab titles from stored conversations" do
|
||||||
|
assert {:ok, conversation} = AI.start_chat(%{title: "Editorial Plan"})
|
||||||
|
|
||||||
|
{:ok, view, _html} = live_isolated(build_conn(), BDS.Desktop.ShellLive)
|
||||||
|
|
||||||
|
session_payload =
|
||||||
|
Workbench.new()
|
||||||
|
|> Workbench.open_tab(:chat, conversation.id, :pin)
|
||||||
|
|> Session.serialize()
|
||||||
|
|
||||||
|
_html = render_hook(view, "restore_workbench_session", %{"session" => session_payload})
|
||||||
|
|
||||||
|
assert has_element?(
|
||||||
|
view,
|
||||||
|
".tab[data-tab-type='chat'][data-tab-id='#{conversation.id}'] .tab-title",
|
||||||
|
"Editorial Plan"
|
||||||
|
)
|
||||||
|
|
||||||
|
assert has_element?(view, ".chat-panel-title-main", "Editorial Plan")
|
||||||
|
end
|
||||||
|
|
||||||
test "metadata diff refresh reruns after workbench session restore", %{project: project} do
|
test "metadata diff refresh reruns after workbench session restore", %{project: project} do
|
||||||
:ok = BDS.Tasks.clear_finished()
|
:ok = BDS.Tasks.clear_finished()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user