From 9391e8e2cf37c7e05154ea9c337c052718010787 Mon Sep 17 00:00:00 2001 From: AStaroverov Date: Thu, 12 Mar 2026 19:23:45 +0100 Subject: [PATCH 01/14] refactor: update validation functions to return undefined instead of boolean --- .../ui/src/pages/MainPage.vue | 6 +- .../ui-examples/ui/src/pages/ErrorsPage.vue | 6 +- .../ui/src/pages/PlNumberFieldPage.vue | 31 ++++--- .../ui/src/pages/PlTextFieldPage.vue | 10 +-- .../PlNumberField/PlNumberField.vue | 90 ++++++++++--------- .../components/PlNumberField/parseNumber.ts | 47 ++++++++++ .../PlNumberField/pl-number-field.scss | 21 ++++- .../components/PlTextField/PlTextField.vue | 27 +++--- 8 files changed, 155 insertions(+), 83 deletions(-) diff --git a/etc/blocks/monetization-test/ui/src/pages/MainPage.vue b/etc/blocks/monetization-test/ui/src/pages/MainPage.vue index 3ab2259abe..1d59b4739e 100644 --- a/etc/blocks/monetization-test/ui/src/pages/MainPage.vue +++ b/etc/blocks/monetization-test/ui/src/pages/MainPage.vue @@ -35,11 +35,11 @@ function onProductKeyInput(key: string) { } } -function validateProductKey(key: string): boolean | string { +function validateProductKey(key: string): string | undefined { if (key.length > 0 && key.length !== PRODUCT_KEY_LENGTH) { return "Invalid product key"; } - return true; + return undefined; } const dropdownOptions: ListOption[] = [ @@ -142,7 +142,7 @@ const productOptions = [ :model-value="app.model.args.productKey" label="or enter product key" clearable - :rules="[validateProductKey]" + :validate="validateProductKey" @update:model-value="onProductKeyInput" /> diff --git a/etc/blocks/ui-examples/ui/src/pages/ErrorsPage.vue b/etc/blocks/ui-examples/ui/src/pages/ErrorsPage.vue index c70a33b167..d3803f2735 100644 --- a/etc/blocks/ui-examples/ui/src/pages/ErrorsPage.vue +++ b/etc/blocks/ui-examples/ui/src/pages/ErrorsPage.vue @@ -9,10 +9,10 @@ const data = reactive({ progressDurationMs: "10000", }); -function positiveNumberRule(v: string): boolean | string { +function positiveNumberRule(v: string): string | undefined { const n = Number(v); if (!Number.isFinite(n) || n <= 0) return "Must be a positive number"; - return true; + return undefined; } const numbers = computed({ @@ -64,7 +64,7 @@ const numbers = computed({ diff --git a/etc/blocks/ui-examples/ui/src/pages/PlNumberFieldPage.vue b/etc/blocks/ui-examples/ui/src/pages/PlNumberFieldPage.vue index 5aa9545c63..b49452ee2b 100644 --- a/etc/blocks/ui-examples/ui/src/pages/PlNumberFieldPage.vue +++ b/etc/blocks/ui-examples/ui/src/pages/PlNumberFieldPage.vue @@ -3,10 +3,16 @@ import { PlRow, PlContainer, PlCheckbox, PlNumberField, PlBlockPage } from "@pla import { reactive } from "vue"; const data = reactive({ - useIncrementButtons: true, - updateOnEnterOrClickOutside: false, number: 100, + disableSteps: false, }); + +function updateNumber(value: number) { + if (data.number == null || Number.isNaN(data.number)) { + data.number = 0; + } + data.number += value; +}