diff --git a/app/controllers/settings/appearances_controller.rb b/app/controllers/settings/appearances_controller.rb
index ae2282443..51ae26739 100644
--- a/app/controllers/settings/appearances_controller.rb
+++ b/app/controllers/settings/appearances_controller.rb
@@ -10,7 +10,8 @@ class Settings::AppearancesController < ApplicationController
@user.transaction do
@user.lock!
updated_prefs = (@user.preferences || {}).deep_dup
- updated_prefs["show_split_grouped"] = params.dig(:user, :show_split_grouped) == "1"
+ updated_prefs["show_split_grouped"] = params.dig(:user, :show_split_grouped) == "1" if params.dig(:user, :show_split_grouped)
+ updated_prefs["dashboard_two_column"] = params.dig(:user, :dashboard_two_column) == "1" if params.dig(:user, :dashboard_two_column)
@user.update!(preferences: updated_prefs)
end
redirect_to settings_appearance_path
diff --git a/app/models/user.rb b/app/models/user.rb
index 4cb17c6bd..752338bc2 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -320,6 +320,10 @@ class User < ApplicationRecord
preferences&.dig("show_split_grouped") != false
end
+ def dashboard_two_column?
+ preferences&.dig("dashboard_two_column") != false
+ end
+
def update_transactions_preferences(prefs)
transaction do
lock!
diff --git a/app/views/pages/dashboard.html.erb b/app/views/pages/dashboard.html.erb
index 39db5e283..0a429d0b0 100644
--- a/app/views/pages/dashboard.html.erb
+++ b/app/views/pages/dashboard.html.erb
@@ -29,7 +29,7 @@
<% end %>
-
+
gap-6 pb-6 lg:pb-12" data-controller="dashboard-sortable" data-action="dragover->dashboard-sortable#dragOver drop->dashboard-sortable#drop" role="list" aria-label="Dashboard sections">
<% if Current.family.accounts.any? %>
<% @dashboard_sections.each do |section| %>
<% next unless section[:visible] %>
diff --git a/app/views/settings/appearances/show.html.erb b/app/views/settings/appearances/show.html.erb
index c2e9e703e..f22096236 100644
--- a/app/views/settings/appearances/show.html.erb
+++ b/app/views/settings/appearances/show.html.erb
@@ -28,6 +28,27 @@
<% end %>
+<%= settings_section title: t(".dashboard_title"), subtitle: t(".dashboard_subtitle") do %>
+
+ <%= form_with url: settings_appearance_path, method: :patch,
+ class: "p-3",
+ data: { controller: "auto-submit-form" } do |f| %>
+
+
+
<%= t(".dashboard_two_column_title") %>
+
<%= t(".dashboard_two_column_description") %>
+
+ <%= render DS::Toggle.new(
+ id: "user_dashboard_two_column",
+ name: "user[dashboard_two_column]",
+ checked: @user.dashboard_two_column?,
+ data: { auto_submit_form_target: "auto" }
+ ) %>
+
+ <% end %>
+
+<% end %>
+
<%= settings_section title: t(".transactions_title"), subtitle: t(".transactions_subtitle") do %>
<%= form_with url: settings_appearance_path, method: :patch,
diff --git a/config/locales/views/settings/en.yml b/config/locales/views/settings/en.yml
index d66cb7882..9dada3442 100644
--- a/config/locales/views/settings/en.yml
+++ b/config/locales/views/settings/en.yml
@@ -36,6 +36,10 @@ en:
theme_system: System
transactions_title: Transactions
transactions_subtitle: Customize how transactions are displayed
+ dashboard_title: Dashboard
+ dashboard_subtitle: Customize how the dashboard is displayed
+ dashboard_two_column_title: Two-column layout
+ dashboard_two_column_description: Display dashboard widgets in two columns on large screens. When off, widgets stack in a single column.
split_grouped_title: Group split transactions
split_grouped_description: Show split transactions grouped under their parent in the transaction list. When off, split children appear as individual rows.
preferences: