Feature: remember value of chart period selector (#1528)

* feat: remember chart period by last selection not user preferences

* feat: schema update

* fix: revert unnecessary parts of schema.rb update

* fix: check period key is valid before setting it

* revert: no database changes and keep the UI setting

* refactor: don't store the default period in the session, just use the user

* fix: migration

The migration uses the User model directly, which loads all current enums
including ui_layout which doesn't exist yet at that point in migration history.
Fix it with raw SQL.

* revert: not relevant to this PR
This commit is contained in:
Roger Saner
2026-04-21 19:02:41 +02:00
committed by GitHub
parent 30481fbc07
commit b3c88e09f3
3 changed files with 10 additions and 5 deletions

View File

@@ -7,7 +7,12 @@ module Periodable
private private
def set_period def set_period
period_key = params[:period] || Current.user&.default_period if params[:period].present?
period_key = params[:period]
Current.user&.update!(default_period: period_key) if Period.valid_key?(period_key)
else
period_key = Current.user&.default_period
end
@period = if period_key == "current_month" @period = if period_key == "current_month"
Period.current_month_for(Current.family) Period.current_month_for(Current.family)

View File

@@ -95,6 +95,10 @@ class Period
} }
class << self class << self
def valid_key?(key)
PERIODS.key?(key)
end
def from_key(key) def from_key(key)
unless PERIODS.key?(key) unless PERIODS.key?(key)
raise InvalidKeyError, "Invalid period key: #{key}" raise InvalidKeyError, "Invalid period key: #{key}"

View File

@@ -16,10 +16,6 @@
Family::DATE_FORMATS, Family::DATE_FORMATS,
{ label: t(".date_format") }, { label: t(".date_format") },
{ data: { auto_submit_form_target: "auto" } } %> { data: { auto_submit_form_target: "auto" } } %>
<%= form.select :default_period,
Period.all.map { |period| [ period.label, period.key ] },
{ label: t(".default_period") },
{ data: { auto_submit_form_target: "auto" } } %>
<%= form.select :default_account_order, <%= form.select :default_account_order,
AccountOrder.all.map { |order| [ order.label, order.key ] }, AccountOrder.all.map { |order| [ order.label, order.key ] },
{ label: t(".default_account_order") }, { label: t(".default_account_order") },