From ae1fabae38f5bef1423c50b45cdf4be88497796e Mon Sep 17 00:00:00 2001 From: David Cook Date: Thu, 25 Jan 2024 15:02:13 +1100 Subject: [PATCH 1/8] Tweak padding according to design --- app/components/vertical_ellipsis_menu/component.scss | 2 +- app/webpacker/css/admin_v3/globals/variables.scss | 2 +- app/webpacker/css/admin_v3/shared/forms.scss | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/components/vertical_ellipsis_menu/component.scss b/app/components/vertical_ellipsis_menu/component.scss index 9e8bc9d878..dd698ee331 100644 --- a/app/components/vertical_ellipsis_menu/component.scss +++ b/app/components/vertical_ellipsis_menu/component.scss @@ -7,7 +7,7 @@ text-align: center; border-radius: 3px; background-color: white; - padding: 10px 14px; + padding: 9px 14px; } .vertical-ellipsis-menu-content { diff --git a/app/webpacker/css/admin_v3/globals/variables.scss b/app/webpacker/css/admin_v3/globals/variables.scss index 29d4342278..bbd8fde650 100644 --- a/app/webpacker/css/admin_v3/globals/variables.scss +++ b/app/webpacker/css/admin_v3/globals/variables.scss @@ -40,7 +40,7 @@ $color-tbl-thead-txt: $color-headers !default; $color-tbl-thead-bg: $light-grey !default; $color-tbl-border: $pale-blue !default; $padding-tbl-cell: 12px; -$padding-tbl-cell-condensed: 10px 12px; +$padding-tbl-cell-condensed: 4px 12px; $padding-tbl-cell-relaxed: 12px 12px; // Button colors diff --git a/app/webpacker/css/admin_v3/shared/forms.scss b/app/webpacker/css/admin_v3/shared/forms.scss index 4a4980f0ec..b6dfa00240 100644 --- a/app/webpacker/css/admin_v3/shared/forms.scss +++ b/app/webpacker/css/admin_v3/shared/forms.scss @@ -16,10 +16,12 @@ input[type="number"], textarea, fieldset { @include border-radius($border-radius); - padding: $vpadding-txt $hpadding-txt; + padding: ($vpadding-txt - 1px) ($hpadding-txt - 1px); // Minus 1px for border border: 1px solid $lighter-grey; color: $color-txt-text; background-color: $lighter-grey; + font-size: 14px; + line-height: 22px; &:focus { outline: none; From 3d941dcc1f9f49d35b55cfc0235708b9f0522adf Mon Sep 17 00:00:00 2001 From: David Cook Date: Thu, 25 Jan 2024 15:27:06 +1100 Subject: [PATCH 2/8] Adjust popout position Now it's lined up perfectly with the number input. --- app/webpacker/css/admin/products_v3.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/webpacker/css/admin/products_v3.scss b/app/webpacker/css/admin/products_v3.scss index 2ac6a85eff..11df0a7dd8 100644 --- a/app/webpacker/css/admin/products_v3.scss +++ b/app/webpacker/css/admin/products_v3.scss @@ -354,8 +354,8 @@ &__popout { position: absolute; - top: -1em; - left: -1em; + top: -0.6em; + left: -0.2em; z-index: 1; // Cover below row when hover width: 9em; From da82b12ca75123feb06416d9d1decad1ffaeeac5 Mon Sep 17 00:00:00 2001 From: David Cook Date: Wed, 31 Jan 2024 17:13:30 +1100 Subject: [PATCH 3/8] Prevent negative values for stock on hand Using browser validation. I didn't use model validation because the on_hand pseudo-attribute doesn't support it. But.. it turned out to not be so simple. Browser validation can't work if the field is hidden, and breaks the javascript. So now I made the javascript smarter, and the end result is more helpful I think. --- app/views/admin/products_v3/_table.html.haml | 2 +- app/webpacker/controllers/popout_controller.js | 6 ++++++ spec/javascripts/stimulus/popout_controller_test.js | 10 +++++++++- spec/system/admin/products_v3/products_spec.rb | 10 ++++++++-- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/app/views/admin/products_v3/_table.html.haml b/app/views/admin/products_v3/_table.html.haml index faf517bd3e..df1108a4df 100644 --- a/app/views/admin/products_v3/_table.html.haml +++ b/app/views/admin/products_v3/_table.html.haml @@ -106,7 +106,7 @@ = variant.on_demand ? t(:on_demand) : variant.on_hand %div.on-hand__popout{ style: 'display: none;', 'data-controller': 'toggle-control', 'data-popout-target': "dialog" } .field - = variant_form.number_field :on_hand, 'aria-label': t('admin.products_page.columns.on_hand'), 'data-toggle-control-target': 'control', disabled: variant_form.object.on_demand + = variant_form.number_field :on_hand, min: 0, 'aria-label': t('admin.products_page.columns.on_hand'), 'data-toggle-control-target': 'control', disabled: variant_form.object.on_demand = error_message_on variant, :on_hand .field.checkbox = variant_form.label :on_demand do diff --git a/app/webpacker/controllers/popout_controller.js b/app/webpacker/controllers/popout_controller.js index 0e430ce1a9..49530e7e26 100644 --- a/app/webpacker/controllers/popout_controller.js +++ b/app/webpacker/controllers/popout_controller.js @@ -42,6 +42,12 @@ export default class PopoutController extends Controller { close() { // Close if not already closed if (this.dialogTarget.style.display != "none") { + // Check every element for browser-side validation, before the fields get hidden. + if (!this.#enabledDisplayElements().every((element) => element.reportValidity())) { + // If any fail, don't close + return; + } + // Update button to represent any changes this.buttonTarget.innerText = this.#displayValue(); this.buttonTarget.classList.toggle("changed", this.#isChanged()); diff --git a/spec/javascripts/stimulus/popout_controller_test.js b/spec/javascripts/stimulus/popout_controller_test.js index 60b6f8ce89..c90e6a90ab 100644 --- a/spec/javascripts/stimulus/popout_controller_test.js +++ b/spec/javascripts/stimulus/popout_controller_test.js @@ -16,7 +16,7 @@ describe("PopoutController", () => {