83 lines
2.9 KiB
Elixir
83 lines
2.9 KiB
Elixir
defmodule BDS.Desktop.ShellLive.ContentState do
|
|
@moduledoc false
|
|
|
|
import Phoenix.Component, only: [assign: 3]
|
|
|
|
alias BDS.AI
|
|
alias BDS.Desktop.ShellData
|
|
alias BDS.Desktop.ShellLive.{SidebarState, SocketState, TabHelpers, TaskLocalization, TitlebarMenu}
|
|
|
|
def refresh_content(socket, workbench) do
|
|
projects =
|
|
case ShellData.project_snapshot() do
|
|
{:ok, data} -> data
|
|
{:error, :not_ready} -> ShellData.default_project_snapshot()
|
|
end
|
|
|
|
dashboard =
|
|
case ShellData.dashboard(projects.active_project_id) do
|
|
{:ok, data} -> data
|
|
{:error, :not_ready} -> BDS.UI.Dashboard.empty_snapshot()
|
|
end
|
|
|
|
git_badge_count =
|
|
case ShellData.git_badge_count(projects.active_project_id) do
|
|
{:ok, count} -> count
|
|
{:error, :not_ready} -> 0
|
|
end
|
|
|
|
active_view_id = Atom.to_string(workbench.active_view)
|
|
|
|
sidebar_data =
|
|
case ShellData.sidebar_view(
|
|
projects.active_project_id,
|
|
active_view_id,
|
|
SidebarState.current_filters(socket, active_view_id)
|
|
) do
|
|
{:ok, data} -> data
|
|
{:error, :not_ready} -> BDS.UI.Sidebar.view(nil, active_view_id, %{})
|
|
end
|
|
|
|
sidebar_data = SidebarState.merge_ui_state(socket, active_view_id, sidebar_data)
|
|
|
|
socket
|
|
|> assign(:projects, projects)
|
|
|> assign(:current_project, ShellData.current_project(projects))
|
|
|> assign(:dashboard, dashboard)
|
|
|> assign(:dashboard_timeline_entries, Map.get(dashboard, :timeline_entries, []))
|
|
|> assign(:dashboard_category_counts, Map.get(dashboard, :category_counts, []))
|
|
|> assign(:dashboard_recent_posts, Map.get(dashboard, :recent_posts, []))
|
|
|> assign(
|
|
:dashboard_tag_cloud_items,
|
|
ShellData.dashboard_tag_cloud_items(Map.get(dashboard, :tag_cloud_items, []))
|
|
)
|
|
|> assign(:git_badge_count, git_badge_count)
|
|
|> assign(:sidebar_data, sidebar_data)
|
|
|> SocketState.refresh_layout(workbench)
|
|
end
|
|
|
|
def reload_shell(socket, workbench) do
|
|
tab_meta = TabHelpers.sync_tab_meta(workbench, socket.assigns[:tab_meta] || %{})
|
|
raw_task_status = BDS.Tasks.status_snapshot()
|
|
page_language = socket.assigns[:page_language] || ShellData.ui_language()
|
|
|
|
offline_mode =
|
|
if Phoenix.LiveView.connected?(socket) do
|
|
Map.get(socket.assigns, :offline_mode, AI.airplane_mode?(true))
|
|
else
|
|
Map.get(socket.assigns, :offline_mode, true)
|
|
end
|
|
|
|
task_status = TaskLocalization.localize_task_status(raw_task_status, page_language)
|
|
|
|
socket
|
|
|> assign(:tab_meta, tab_meta)
|
|
|> assign(:task_status, task_status)
|
|
|> assign(:offline_mode, offline_mode)
|
|
|> assign(:supported_ui_languages, ShellData.supported_ui_languages())
|
|
|> assign(:menu_groups, socket.assigns[:menu_groups] || TitlebarMenu.groups())
|
|
|> assign(:titlebar_menu_item_index, socket.assigns[:titlebar_menu_item_index])
|
|
|> refresh_content(workbench)
|
|
end
|
|
end
|