Skip to content

Commit 727366b

Browse files
committed
Split delivery cycles collection helpers for selects vs checkboxes
The grouped-by-visibility format works well for select dropdowns (optgroups) but checkboxes need a flat list. Added admin_delivery_cycles_collection_by_visibility for selects/filters, while admin_delivery_cycles_collection returns a flat list for checkbox inputs.
1 parent 5d339ec commit 727366b

File tree

4 files changed

+30
-19
lines changed

4 files changed

+30
-19
lines changed

app/admin/depot.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
as: :string
1717
filter :delivery_cycles,
1818
as: :select,
19-
collection: -> { admin_delivery_cycles_collection }
19+
collection: -> { admin_delivery_cycles_collection_by_visibility }
2020

2121
includes :memberships, :delivery_cycles
2222
index do

app/admin/member.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,7 @@
587587
f.input :waiting_delivery_cycle,
588588
label: DeliveryCycle.model_name.human,
589589
as: :select,
590-
collection: admin_delivery_cycles_collection
590+
collection: admin_delivery_cycles_collection_by_visibility
591591
f.input :waiting_billing_year_division,
592592
label: Membership.human_attribute_name(:billing_year_division),
593593
as: :select,

app/admin/membership.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
filter :depot, as: :select, collection: -> { admin_depots_collection }
4848
filter :delivery_cycle,
4949
as: :select,
50-
collection: -> { admin_delivery_cycles_collection }
50+
collection: -> { admin_delivery_cycles_collection_by_visibility }
5151
filter :absences_included,
5252
if: proc { feature?("absence") }
5353
filter :renewal_state,
@@ -859,7 +859,7 @@
859859
end
860860
ol "data-controller" => "form-reset", class: "mt-6" do
861861
f.input :delivery_cycle,
862-
collection: admin_delivery_cycles_collection,
862+
collection: admin_delivery_cycles_collection_by_visibility,
863863
as: :select,
864864
prompt: true,
865865
input_html: {
@@ -913,7 +913,7 @@
913913
ff.input :quantity
914914
ff.input :delivery_cycle,
915915
as: :select,
916-
collection: admin_delivery_cycles_collection,
916+
collection: admin_delivery_cycles_collection_by_visibility,
917917
include_blank: true,
918918
hint: true
919919
end

app/helpers/admin_helper.rb

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,27 @@ def admin_basket_complements_collection(options = nil)
2525
grouped_by_visibility(admin_basket_complements, options)
2626
end
2727

28+
def admin_delivery_cycles
29+
DeliveryCycle.kept.ordered
30+
end
31+
2832
def admin_delivery_cycles_collection
29-
cycles = DeliveryCycle.kept.ordered
30-
if DeliveryCycle.visible?
31-
[
32-
[ t("active_admin.scopes.visible"), cycles_option_for_select(cycles.visible) ],
33-
[ t("active_admin.scopes.hidden"), cycles_option_for_select(cycles.where.not(id: cycles.visible)) ]
34-
]
35-
else
36-
cycles_option_for_select(cycles)
37-
end
33+
delivery_cycles_option_for_select(admin_delivery_cycles)
3834
end
3935

40-
def cycles_option_for_select(cycles)
41-
cycles.map { |cycle|
36+
def admin_delivery_cycles_collection_by_visibility
37+
cycles = admin_delivery_cycles
38+
visible_cycles = cycles.visible.to_a
39+
hidden_cycles = cycles.to_a - visible_cycles
40+
41+
if hidden_cycles.empty?
42+
delivery_cycles_option_for_select(cycles)
43+
else
4244
[
43-
"#{cycle.name} (#{t('helpers.deliveries_count', count: cycle.deliveries_count)})",
44-
cycle.id
45+
[ t("active_admin.scopes.visible"), delivery_cycles_option_for_select(visible_cycles) ],
46+
[ t("active_admin.scopes.hidden"), delivery_cycles_option_for_select(hidden_cycles) ]
4547
]
46-
}
48+
end
4749
end
4850

4951
def member_cities_collection
@@ -84,6 +86,15 @@ def grouped_by_visibility(relation, options)
8486

8587
private
8688

89+
def delivery_cycles_option_for_select(cycles)
90+
cycles.map { |cycle|
91+
[
92+
"#{cycle.name} (#{t('helpers.deliveries_count', count: cycle.deliveries_count)})",
93+
cycle.id
94+
]
95+
}
96+
end
97+
8798
def option_for_select(records, options = nil)
8899
records.map { |a| [ a.display_name, a.id, options&.call(a) ].compact }
89100
end

0 commit comments

Comments
 (0)