From 279f9bd6aca08216252f185d777ea1a1a08d1407 Mon Sep 17 00:00:00 2001 From: cryptogopher Date: Fri, 22 Nov 2024 03:10:08 +0100 Subject: [PATCH] Display Defaults hierarchy including same base Units --- app/helpers/application_helper.rb | 4 ++++ app/models/unit.rb | 11 +++++------ app/views/default/units/_unit.html.erb | 26 ++++++++++++++------------ 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 4007d3a..aac55b6 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -123,6 +123,10 @@ module ApplicationHelper "Turbo.renderStreamMessage('#{j(render partial: partial, locals: locals)}'); return false;" end + def disabled_attributes(disabled) + disabled ? {disabled: true, aria: {disabled: true}, tabindex: -1} : {} + end + private # Converts value to HTML formatted scientific notation diff --git a/app/models/unit.rb b/app/models/unit.rb index 872d0b7..29c05fb 100644 --- a/app/models/unit.rb +++ b/app/models/unit.rb @@ -57,13 +57,12 @@ class Unit < ApplicationRecord ) ).as('portable') ), - # TODO: replace AS and MIN with Arel - # TODO: turn off ONLY_FULL_GROUP_BY - # Add missing base Units. Duplicates will be removed by final group(), as - # actionable Units will differ on 'portable' column and can't be UNION-ed. + # NOTE: turn off ONLY_FULL_GROUP_BY or is it incompatible with other DBs? + # Fill base Units to display proper hierarchy. Duplicates will be removed + # by final group() - can't be deduplicated with UNION due to 'portable' field. arel_table.join(actionable_units).on(actionable_units[:base_id].eq(arel_table[:id])) - .project(arel_table[Arel.star], 'NULL AS portable') - ]).select(units: column_names)#, 'MIN(units.portable)' => :portable) + .project(arel_table[Arel.star], Arel::Nodes.build_quoted(nil).as('portable')) + ]).select(units: column_names).select(units[:portable].minimum.as('portable')) .from(units).group(Unit.column_names) } scope :ordered, ->{ diff --git a/app/views/default/units/_unit.html.erb b/app/views/default/units/_unit.html.erb index 19af7a3..1c1ec2d 100644 --- a/app/views/default/units/_unit.html.erb +++ b/app/views/default/units/_unit.html.erb @@ -1,20 +1,22 @@ <%= tag.tr do %> - + <%= unit.symbol %> - <% if current_user.at_least(:active) && unit.default? %> - <%= image_button_to t('.import'), 'download-outline', import_default_unit_path(unit), - !unit.portable? ? {disabled: true, aria: {disabled: true}, tabindex: -1} : {} %> - <% end %> - <% if current_user.at_least(:admin) %> - <% if !unit.default? %> - <%= image_button_to t('.export'), 'upload-outline', export_default_unit_path(unit), - !unit.portable? ? {disabled: true, aria: {disabled: true}, tabindex: -1} : {} %> - <% else %> - <%= image_button_to t('.delete'), 'delete-outline', unit_path(unit), - method: :delete %> + <% unless unit.portable.nil? %> + <% if current_user.at_least(:active) && unit.default? %> + <%= image_button_to t('.import'), 'download-outline', import_default_unit_path(unit), + disabled_attributes(!unit.portable?) %> + <% end %> + <% if current_user.at_least(:admin) %> + <% if unit.default? %> + <%= image_button_to t('.delete'), 'delete-outline', unit_path(unit), method: :delete %> + <% else %> + <%= image_button_to t('.export'), 'upload-outline', export_default_unit_path(unit), + disabled_attributes(!unit.portable?) %> + <% end %> <% end %> <% end %>