From 679b425d620cd03a766de7b386a2a2795ec1d631 Mon Sep 17 00:00:00 2001 From: Paul Bob Date: Thu, 21 Dec 2023 15:56:16 +0200 Subject: [PATCH] fix: tabs persistence when tab name have spaces --- app/components/avo/tab_group_component.rb | 6 ++---- app/components/avo/tab_switcher_component.rb | 5 +---- lib/avo/resources/items/tab_group.rb | 4 ++++ spec/system/avo/tabs_spec.rb | 22 ++++++++++++++++++++ 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/app/components/avo/tab_group_component.rb b/app/components/avo/tab_group_component.rb index 8ed26662f..6aaaebdec 100644 --- a/app/components/avo/tab_group_component.rb +++ b/app/components/avo/tab_group_component.rb @@ -7,6 +7,8 @@ class Avo::TabGroupComponent < Avo::BaseComponent attr_reader :form attr_reader :resource + delegate :group_param, to: :@group + def initialize(resource:, group:, index:, form:, params:, view:) @resource = resource @group = group @@ -26,10 +28,6 @@ def tabs_have_content? visible_tabs.present? end - def group_param - group.id - end - def active_tab_name CGI.unescape(params[group_param] || group.visible_items&.first&.name) end diff --git a/app/components/avo/tab_switcher_component.rb b/app/components/avo/tab_switcher_component.rb index f8030099a..b23aa11ca 100644 --- a/app/components/avo/tab_switcher_component.rb +++ b/app/components/avo/tab_switcher_component.rb @@ -12,6 +12,7 @@ class Avo::TabSwitcherComponent < Avo::BaseComponent attr_reader :resource delegate :white_panel_classes, to: :helpers + delegate :group_param, to: :@group def initialize(resource:, group:, current_tab:, active_tab_name:, view:) @active_tab_name = active_tab_name @@ -48,10 +49,6 @@ def current_one?(tab) private - def group_param - "tab-group_#{group.id}" - end - def tab_param_missing? params[group_param].blank? end diff --git a/lib/avo/resources/items/tab_group.rb b/lib/avo/resources/items/tab_group.rb index 08d43093b..8c140c00b 100644 --- a/lib/avo/resources/items/tab_group.rb +++ b/lib/avo/resources/items/tab_group.rb @@ -37,6 +37,10 @@ def turbo_frame_id "#{Avo::Resources::Items::TabGroup.to_s.parameterize} #{index}".parameterize end + def group_param + "tab-group_#{id}" + end + class Builder include Avo::Concerns::BorrowItemsHolder diff --git a/spec/system/avo/tabs_spec.rb b/spec/system/avo/tabs_spec.rb index dc77c63b4..c4de9ce7f 100644 --- a/spec/system/avo/tabs_spec.rb +++ b/spec/system/avo/tabs_spec.rb @@ -140,4 +140,26 @@ find('a[data-selected="true"][data-tabs-tab-name-param="Posts"]') end end + + describe "tabs with names that have spaces" do + it "keeps tab on reload" do + visit avo.resources_user_path user + + find('a[data-selected="true"][data-tabs-tab-name-param="Fish"]') + find('a[data-selected="false"][data-tabs-tab-name-param="Projects"]').click + find('a[data-selected="false"][data-tabs-tab-name-param="Team memberships"]') + + refresh + + find('a[data-selected="false"][data-tabs-tab-name-param="Fish"]') + find('a[data-selected="true"][data-tabs-tab-name-param="Projects"]') + find('a[data-selected="false"][data-tabs-tab-name-param="Team memberships"]').click + + refresh + + find('a[data-selected="false"][data-tabs-tab-name-param="Fish"]') + find('a[data-selected="false"][data-tabs-tab-name-param="Projects"]') + find('a[data-selected="true"][data-tabs-tab-name-param="Team memberships"]') + end + end end