From 1d8ed67b0bd5657f62e6e689fd4d02fbc1bdaed6 Mon Sep 17 00:00:00 2001 From: David Cook Date: Thu, 21 Mar 2024 17:19:23 +1100 Subject: [PATCH] Handle unit scale changes As discussed, this is the desired behaviour. The current screen appears to do this, but fails to save the changes. --- app/views/admin/products_v3/_variant_row.html.haml | 2 +- app/webpacker/controllers/variant_controller.js | 2 +- spec/system/admin/products_v3/products_spec.rb | 12 ++++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/views/admin/products_v3/_variant_row.html.haml b/app/views/admin/products_v3/_variant_row.html.haml index 73a1385f32..661776db96 100644 --- a/app/views/admin/products_v3/_variant_row.html.haml +++ b/app/views/admin/products_v3/_variant_row.html.haml @@ -19,7 +19,7 @@ = f.hidden_field :unit_description -# todo: create a method for value_with_description = f.text_field :unit_value_with_description, - value: [number_with_precision(variant.unit_value, precision: nil,strip_insignificant_zeros: true), variant.unit_description].compact_blank.join(" "), + value: [number_with_precision((variant.unit_value || 1) / (variant.product.variant_unit_scale || 1), precision: nil, strip_insignificant_zeros: true), variant.unit_description].compact_blank.join(" "), 'aria-label': t('admin.products_page.columns.unit_value'), required: true .field = f.label :display_as, t('admin.products_page.columns.display_as') diff --git a/app/webpacker/controllers/variant_controller.js b/app/webpacker/controllers/variant_controller.js index 1ab401163a..07780e2531 100644 --- a/app/webpacker/controllers/variant_controller.js +++ b/app/webpacker/controllers/variant_controller.js @@ -57,7 +57,7 @@ export default class VariantController extends Controller { if (match) { let unit_value = parseFloat(match[1].replace(",", ".")); unit_value = isNaN(unit_value) ? null : unit_value; - unit_value *= this.variantUnitScale.value ? this.variantUnitScale.value : 1; + unit_value *= this.variantUnitScale.value ? this.variantUnitScale.value : 1; // Normalise to default scale this.unitValue.value = unit_value; this.unitDescription.value = match[3]; diff --git a/spec/system/admin/products_v3/products_spec.rb b/spec/system/admin/products_v3/products_spec.rb index c9b00987f6..1d1674459b 100644 --- a/spec/system/admin/products_v3/products_spec.rb +++ b/spec/system/admin/products_v3/products_spec.rb @@ -270,6 +270,18 @@ describe 'As an admin, I can manage products', feature: :admin_style_v3 do # New scale is visible immediately expect(page).to have_button "Unit", text: "1kg" end + + click_button "Save changes" + + expect(page).to have_content "Changes saved" + product_a.reload + expect(product_a.variant_unit).to eq "weight" + expect(product_a.variant_unit_scale).to eq 1000 # kg + expect(variant_a1.reload.unit_value).to eq 1000 # 1kg + + within row_containing_name("Medium box") do + expect(page).to have_button "Unit", text: "1kg" + end end it "saves a custom item unit name" do