From 1acb179851b3b52b09bd62c15c1697cec36c5d01 Mon Sep 17 00:00:00 2001 From: cryptogopher Date: Thu, 15 Jan 2026 19:00:25 +0100 Subject: [PATCH] Single select form without action buttons --- app/assets/stylesheets/application.css | 3 ++ app/helpers/quantities_helper.rb | 15 --------- app/models/quantity.rb | 5 +++ app/views/measurements/_form.html.erb | 34 ++++++--------------- app/views/readouts/discard.turbo_stream.erb | 3 +- app/views/readouts/new.turbo_stream.erb | 6 ++-- config/locales/en.yml | 8 ++--- 7 files changed, 22 insertions(+), 52 deletions(-) diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index 32dae52..d45ffea 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -563,6 +563,9 @@ form table.items td:first-child { .hflex.centered { justify-content: center; } +.vexpand { + width: 100%; +} .vflex { display: flex; gap: 0.8em; diff --git a/app/helpers/quantities_helper.rb b/app/helpers/quantities_helper.rb index cf1f741..9e6aa8b 100644 --- a/app/helpers/quantities_helper.rb +++ b/app/helpers/quantities_helper.rb @@ -1,17 +1,2 @@ module QuantitiesHelper - def quantity_option_text(quantity, checked = nil) - prefix = case checked - when true - # Use color and gray unicode emoji to assure same width. - # Avoid shapes similar to inputs (chackboxes, radio buttons etc.) - # (U+27A1 U+FE0F)/U+1F7E6/U+2705/U+1F499 U+2004 - '💙 ' - when false - # U+2B1C/U+1F90D U+2004 - '🤍 ' - else - '' - end - sanitize(' ' * quantity.depth + prefix + quantity.name) - end end diff --git a/app/models/quantity.rb b/app/models/quantity.rb index 6748492..ed81124 100644 --- a/app/models/quantity.rb +++ b/app/models/quantity.rb @@ -100,6 +100,11 @@ class Quantity < ApplicationRecord name end + def to_s_with_depth + # em space, U+2003 + ' ' * depth + name + end + def destroyable? subquantities.empty? end diff --git a/app/views/measurements/_form.html.erb b/app/views/measurements/_form.html.erb index 6e1f675..e85d036 100644 --- a/app/views/measurements/_form.html.erb +++ b/app/views/measurements/_form.html.erb @@ -1,32 +1,16 @@ <%= tabular_form_with model: Measurement.new do |form| %>
- - <%= tag.span t('.no_items'), id: :measurement_form_legend %> - <%= image_link_to '', "pencil-outline", measurements_path, - data: {turbo_stream: true} %> - - +
- - diff --git a/app/views/readouts/discard.turbo_stream.erb b/app/views/readouts/discard.turbo_stream.erb index 8f14d3e..ae275ca 100644 --- a/app/views/readouts/discard.turbo_stream.erb +++ b/app/views/readouts/discard.turbo_stream.erb @@ -1,5 +1,4 @@ <%= turbo_stream.remove dom_id(@quantity, :new, :readout) %> <%= turbo_stream.disable_all 'button[name="discard"]' if @prev_quantities.one? %> -<%= turbo_stream.update_all "#id option[value=\"#{@quantity.id}\"]", - quantity_option_text(@quantity, false) %> +<%= turbo_stream.enable_all "select.quantity option[value='#{@quantity.id}']" %> <%= render partial: 'form_repath' %> diff --git a/app/views/readouts/new.turbo_stream.erb b/app/views/readouts/new.turbo_stream.erb index bd559a6..241bc21 100644 --- a/app/views/readouts/new.turbo_stream.erb +++ b/app/views/readouts/new.turbo_stream.erb @@ -1,10 +1,8 @@ <%= render partial: 'form_repath' %> +<%# is .one? proper condition? can @readouts be empty? %> <%= turbo_stream.enable_all 'button[name="discard"]' if @prev_quantities.one? %> -<%# TODO: disable Add actions accordingly (e.g. disable Children if childless or all - children already added), then disable option once all actions unavailable %> <% @readouts.each do |r| %> - <%= turbo_stream.update_all "#id option[value=\"#{r.quantity_id}\"]", - quantity_option_text(r.quantity, true) %> + <%= turbo_stream.disable_all "select.quantity option[value='#{r.quantity_id}']" %> <% end %> <%= turbo_stream.before :readouts_form do %> <%= render partial: 'form', collection: @readouts, as: :readout %> diff --git a/config/locales/en.yml b/config/locales/en.yml index d5264db..278be59 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -66,16 +66,12 @@ en: navigation: Measurements no_items: There are no measurements taken. You can Add some now. form: - new_readout: Add - new_children: Children - new_subtree: Subtree - new_leaves: Leaves - no_items: Select and add desired quantities... - select_quantity: select quantity... + select_quantity: select the measured quantity... index: new_measurement: Add measurement readouts: form: + new_children: Children quantities: navigation: Quantities no_items: There are no configured quantities. You can Add some or Import from defaults.
- <%= select_tag :id, - options_from_collection_for_select( - @quantities, :id, ->(q){ quantity_option_text(q, false) } - ), class: 'quantity' %> - -
- <% opts = {formaction: new_readout_path, formmethod: :get, - formnovalidate: true, data: {turbo_stream: true}} %> - <%= image_button_tag t('.new_readout'), 'plus-outline', id: :new_readout, - value: nil, **opts -%> - <%= image_button_tag t('.new_children'), 'plus-multiple-outline', - value: :children, **opts -%> - <%#= image_button_tag t('.new_subtree'), 'plus-multiple-outline', - value: :subtree, **opts -%> - <%= image_button_tag t('.new_leaves'), 'plus-multiple-outline', - value: :leaves, **opts -%> -
+
+ <%= collection_select :quantity, :id, @quantities, :id, :to_s_with_depth, + {prompt: t('.select_quantity'), disabled: '', selected: ''}, + {name: :id, class: 'quantity vexpand', + onchange: "this.form.requestSubmit(new_readout_submit);"} %> + <%= form.submit id: :new_readout_submit, name: nil, value: nil, + formaction: new_readout_path, formmethod: :get, formnovalidate: true, + hidden: true, data: {turbo_stream: true} %>