chore: converted preferences editor to live component

This commit is contained in:
2026-05-03 09:19:27 +02:00
parent 6c7fde6b95
commit ce54e973ad
6 changed files with 255 additions and 192 deletions

View File

@@ -172,16 +172,9 @@ defmodule BDS.Desktop.ShellLive do
|> assign(:media_editor_drafts, %{})
|> assign(:media_editor_quick_actions_open, %{})
|> assign(:media_editor_post_pickers_open, %{})
|> assign(:media_editor_post_picker_queries, %{})
|> assign(:media_editor_save_states, %{})
|> assign(:media_editor_translation_forms, %{})
|> assign(:settings_editor_search, "")
|> assign(:settings_editor_project_draft, %{})
|> assign(:settings_editor_endpoint_models, %{})
|> assign(:settings_editor_publishing_draft, %{})
|> assign(:settings_editor_new_category, "")
|> assign(:style_editor_theme, nil)
|> assign(:style_editor_preview_mode, "auto")
|> assign(:media_editor_post_picker_queries, %{})
|> assign(:media_editor_save_states, %{})
|> assign(:media_editor_translation_forms, %{})
|> assign(:script_editor_drafts, %{})
|> assign(:template_editor_drafts, %{})
|> assign(:chat_editor_inputs, %{})
@@ -530,109 +523,10 @@ defmodule BDS.Desktop.ShellLive do
end
end
def handle_event("change_settings_search", %{"query" => query}, socket) do
{:noreply, SettingsEditor.update_search(socket, query, &reload_shell/2)}
end
def handle_event("change_settings_project", %{"settings_project" => params}, socket) do
{:noreply, SettingsEditor.update_project_draft(socket, params, &reload_shell/2)}
end
def handle_event("change_settings_editor", %{"settings_editor" => params}, socket) do
{:noreply, SettingsEditor.update_editor_draft(socket, params, &reload_shell/2)}
end
def handle_event("save_settings_editor", _params, socket) do
{:noreply, SettingsEditor.save_editor(socket, &reload_shell/2, &append_output_entry/5)}
end
def handle_event("save_settings_project", _params, socket) do
{:noreply, SettingsEditor.save_project(socket, &reload_shell/2, &append_output_entry/5)}
end
def handle_event("change_settings_publishing", %{"settings_publishing" => params}, socket) do
{:noreply, SettingsEditor.update_publishing_draft(socket, params, &reload_shell/2)}
end
def handle_event("change_settings_ai", %{"settings_ai" => params}, socket) do
{:noreply, SettingsEditor.update_ai_draft(socket, params, &reload_shell/2)}
end
def handle_event("refresh_settings_ai_models", %{"endpoint" => endpoint}, socket) do
case BoundedAtoms.ai_endpoint(endpoint) do
nil ->
{:noreply, reload_shell(socket, socket.assigns.workbench)}
endpoint_key ->
{:noreply,
SettingsEditor.refresh_ai_models(
socket,
endpoint_key,
&reload_shell/2,
&append_output_entry/5
)}
end
end
def handle_event("save_settings_ai", _params, socket) do
{:noreply, SettingsEditor.save_ai(socket, &reload_shell/2, &append_output_entry/5)}
end
def handle_event("reset_settings_ai_prompt", _params, socket) do
{:noreply, SettingsEditor.reset_ai_prompt(socket, &reload_shell/2, &append_output_entry/5)}
end
def handle_event("save_settings_publishing", _params, socket) do
{:noreply, SettingsEditor.save_publishing(socket, &reload_shell/2, &append_output_entry/5)}
end
def handle_event("clear_settings_publishing", _params, socket) do
{:noreply, SettingsEditor.clear_publishing(socket, &reload_shell/2, &append_output_entry/5)}
end
def handle_event("change_settings_new_category", %{"name" => name}, socket) do
{:noreply, SettingsEditor.update_new_category(socket, name, &reload_shell/2)}
end
def handle_event("add_settings_category", _params, socket) do
{:noreply, SettingsEditor.add_category(socket, &reload_shell/2, &append_output_entry/5)}
end
def handle_event("reset_settings_categories", _params, socket) do
{:noreply, SettingsEditor.reset_categories(socket, &reload_shell/2, &append_output_entry/5)}
end
def handle_event("save_settings_category", %{"category_settings" => params}, socket) do
{:noreply,
SettingsEditor.save_category(socket, params, &reload_shell/2, &append_output_entry/5)}
end
def handle_event("remove_settings_category", %{"category" => category}, socket) do
{:noreply,
SettingsEditor.remove_category(socket, category, &reload_shell/2, &append_output_entry/5)}
end
def handle_event("settings_shell_command", %{"action" => action}, socket) do
{:noreply, apply_shell_command(socket, action)}
end
def handle_event("toggle_settings_mcp_agent", %{"agent" => agent}, socket) do
{:noreply,
SettingsEditor.toggle_mcp_agent(socket, agent, &reload_shell/2, &append_output_entry/5)}
end
def handle_event("select_style_theme", %{"theme" => theme}, socket) do
{:noreply, SettingsEditor.select_style_theme(socket, theme, &reload_shell/2)}
end
def handle_event("change_style_preview_mode", %{"mode" => mode}, socket) do
{:noreply, SettingsEditor.change_style_preview_mode(socket, mode, &reload_shell/2)}
end
def handle_event("apply_style_theme", _params, socket) do
{:noreply, SettingsEditor.apply_style_theme(socket, &reload_shell/2, &append_output_entry/5)}
end
def handle_event("menu_editor_select_item", %{"item_id" => item_id}, socket) do
{:noreply, MenuEditor.select_item(socket, item_id, &reload_shell/2)}
end
@@ -1451,6 +1345,14 @@ defmodule BDS.Desktop.ShellLive do
{:noreply, reload_shell(socket, socket.assigns.workbench)}
end
def handle_info({:settings_output, title, message, level}, socket) do
{:noreply, append_output_entry(socket, title, message, nil, level)}
end
def handle_info(:settings_changed, socket) do
{:noreply, reload_shell(socket, socket.assigns.workbench)}
end
@impl true
def render(assigns) do
UILocale.put(assigns.page_language)
@@ -1521,7 +1423,6 @@ defmodule BDS.Desktop.ShellLive do
|> assign(:current_tab, current_tab(workbench))
|> assign_post_editor()
|> assign_media_editor()
|> assign_settings_editor()
|> assign_menu_editor()
|> assign_code_entity_editor()
|> assign_chat_editor()
@@ -1576,10 +1477,6 @@ defmodule BDS.Desktop.ShellLive do
MediaEditor.assign_socket(socket)
end
defp assign_settings_editor(socket) do
SettingsEditor.assign_socket(socket)
end
defp assign_menu_editor(socket) do
MenuEditor.assign_socket(socket)
end
@@ -1756,7 +1653,8 @@ defmodule BDS.Desktop.ShellLive do
end
defp save_current_tab(%{assigns: %{current_tab: %{type: :settings}}} = socket) do
SettingsEditor.save_project(socket, &reload_shell/2, &append_output_entry/5)
send_update(SettingsEditor, id: "settings-editor", action: :save_project)
socket
end
defp save_current_tab(%{assigns: %{current_tab: %{type: :menu_editor}}} = socket) do