From 23b970eeeb675d93d3a827fe10d16881b33446a1 Mon Sep 17 00:00:00 2001 From: Gerben Mulder Date: Sat, 28 Sep 2024 19:49:06 +0200 Subject: [PATCH 01/15] feat: add nullable modifier to input and textarea --- src/runtime/components/forms/Input.vue | 8 ++++++-- src/runtime/components/forms/Textarea.vue | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/runtime/components/forms/Input.vue b/src/runtime/components/forms/Input.vue index f91260049f..06d253a0b3 100644 --- a/src/runtime/components/forms/Input.vue +++ b/src/runtime/components/forms/Input.vue @@ -158,7 +158,7 @@ export default defineComponent({ default: () => ({}) }, modelModifiers: { - type: Object as PropType<{ trim?: boolean, lazy?: boolean, number?: boolean }>, + type: Object as PropType<{ trim?: boolean, lazy?: boolean, number?: boolean, nullable?: boolean }>, default: () => ({}) } }, @@ -172,7 +172,7 @@ export default defineComponent({ const size = computed(() => sizeButtonGroup.value ?? sizeFormGroup.value) - const modelModifiers = ref(defu({}, props.modelModifiers, { trim: false, lazy: false, number: false })) + const modelModifiers = ref(defu({}, props.modelModifiers, { trim: false, lazy: false, number: false, nullable: false })) const input = ref(null) @@ -193,6 +193,10 @@ export default defineComponent({ value = looseToNumber(value) } + if (modelModifiers.value.nullable && value === '') { + value = null + } + emit('update:modelValue', value) emitFormInput() } diff --git a/src/runtime/components/forms/Textarea.vue b/src/runtime/components/forms/Textarea.vue index 1e78f054ac..9d81fbc249 100644 --- a/src/runtime/components/forms/Textarea.vue +++ b/src/runtime/components/forms/Textarea.vue @@ -127,7 +127,7 @@ export default defineComponent({ default: () => ({}) }, modelModifiers: { - type: Object as PropType<{ trim?: boolean, lazy?: boolean, number?: boolean }>, + type: Object as PropType<{ trim?: boolean, lazy?: boolean, number?: boolean, nullable?: boolean }>, default: () => ({}) } }, @@ -137,7 +137,7 @@ export default defineComponent({ const { emitFormBlur, emitFormInput, inputId, color, size, name } = useFormGroup(props, config) - const modelModifiers = ref(defu({}, props.modelModifiers, { trim: false, lazy: false, number: false })) + const modelModifiers = ref(defu({}, props.modelModifiers, { trim: false, lazy: false, number: false, nullable: false })) const textarea = ref(null) @@ -183,6 +183,10 @@ export default defineComponent({ value = looseToNumber(value) } + if (modelModifiers.value.nullable && value === '') { + value = null + } + emit('update:modelValue', value) emitFormInput() } From 0f7319be6f4fdbc98d34d997906d551f38966da6 Mon Sep 17 00:00:00 2001 From: Gerben Mulder Date: Sat, 28 Sep 2024 19:56:37 +0200 Subject: [PATCH 02/15] fix: return null when the value is falsy (null, undefined, emtpy string) --- src/runtime/components/forms/Input.vue | 2 +- src/runtime/components/forms/Textarea.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/runtime/components/forms/Input.vue b/src/runtime/components/forms/Input.vue index 06d253a0b3..6b486a40fc 100644 --- a/src/runtime/components/forms/Input.vue +++ b/src/runtime/components/forms/Input.vue @@ -193,7 +193,7 @@ export default defineComponent({ value = looseToNumber(value) } - if (modelModifiers.value.nullable && value === '') { + if (modelModifiers.value.nullable && !value) { value = null } diff --git a/src/runtime/components/forms/Textarea.vue b/src/runtime/components/forms/Textarea.vue index 9d81fbc249..ebcd4e4141 100644 --- a/src/runtime/components/forms/Textarea.vue +++ b/src/runtime/components/forms/Textarea.vue @@ -183,7 +183,7 @@ export default defineComponent({ value = looseToNumber(value) } - if (modelModifiers.value.nullable && value === '') { + if (modelModifiers.value.nullable && !value) { value = null } From 1a38403ad4a98560354bc2279e4d44ea3fe4ad4c Mon Sep 17 00:00:00 2001 From: Gerben Mulder Date: Sat, 28 Sep 2024 20:41:24 +0200 Subject: [PATCH 03/15] feat: modelValue type to include null --- src/runtime/components/forms/Input.vue | 2 +- src/runtime/components/forms/Textarea.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/runtime/components/forms/Input.vue b/src/runtime/components/forms/Input.vue index 6b486a40fc..414eefa186 100644 --- a/src/runtime/components/forms/Input.vue +++ b/src/runtime/components/forms/Input.vue @@ -54,7 +54,7 @@ export default defineComponent({ inheritAttrs: false, props: { modelValue: { - type: [String, Number], + type: [String, Number, null] as PropType, default: '' }, type: { diff --git a/src/runtime/components/forms/Textarea.vue b/src/runtime/components/forms/Textarea.vue index ebcd4e4141..29565df9c5 100644 --- a/src/runtime/components/forms/Textarea.vue +++ b/src/runtime/components/forms/Textarea.vue @@ -39,7 +39,7 @@ export default defineComponent({ inheritAttrs: false, props: { modelValue: { - type: [String, Number], + type: [String, Number, null] as PropType, default: '' }, id: { From ecc83490e9c65677d852b315744aae1c8bbd350a Mon Sep 17 00:00:00 2001 From: Gerben Mulder Date: Mon, 30 Sep 2024 13:52:53 +0200 Subject: [PATCH 04/15] fix(Input): modelValue type Co-authored-by: Romain Hamel --- src/runtime/components/forms/Input.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/components/forms/Input.vue b/src/runtime/components/forms/Input.vue index d079a5ebfb..922cdf2b72 100644 --- a/src/runtime/components/forms/Input.vue +++ b/src/runtime/components/forms/Input.vue @@ -54,7 +54,7 @@ export default defineComponent({ inheritAttrs: false, props: { modelValue: { - type: [String, Number, null] as PropType, + type: [String, Number] as PropType, default: '' }, type: { From e4bcf1f843b3f9dc090891d60e4783c760b7cce7 Mon Sep 17 00:00:00 2001 From: Gerben Mulder Date: Mon, 30 Sep 2024 13:53:14 +0200 Subject: [PATCH 05/15] fix(Textarea): modelValue type Co-authored-by: Romain Hamel --- src/runtime/components/forms/Textarea.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/components/forms/Textarea.vue b/src/runtime/components/forms/Textarea.vue index c4deef4757..924d8d19f5 100644 --- a/src/runtime/components/forms/Textarea.vue +++ b/src/runtime/components/forms/Textarea.vue @@ -39,7 +39,7 @@ export default defineComponent({ inheritAttrs: false, props: { modelValue: { - type: [String, Number, null] as PropType, + type: [String, Number] as PropType, default: '' }, id: { From 30abfd778b4d744f8539edb4b79a819dc9b1ed2d Mon Sep 17 00:00:00 2001 From: Gerben Mulder Date: Mon, 30 Sep 2024 14:31:44 +0200 Subject: [PATCH 06/15] fix(Input): remove model modifier --- src/runtime/components/forms/Input.vue | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/runtime/components/forms/Input.vue b/src/runtime/components/forms/Input.vue index 922cdf2b72..73dacb9fe5 100644 --- a/src/runtime/components/forms/Input.vue +++ b/src/runtime/components/forms/Input.vue @@ -158,7 +158,7 @@ export default defineComponent({ default: () => ({}) }, modelModifiers: { - type: Object as PropType<{ trim?: boolean, lazy?: boolean, number?: boolean, nullable?: boolean }>, + type: Object as PropType<{ trim?: boolean, lazy?: boolean, number?: boolean }>, default: () => ({}) } }, @@ -172,7 +172,7 @@ export default defineComponent({ const size = computed(() => sizeButtonGroup.value ?? sizeFormGroup.value) - const modelModifiers = ref(defu({}, props.modelModifiers, { trim: false, lazy: false, number: false, nullable: false })) + const modelModifiers = ref(defu({}, props.modelModifiers, { trim: false, lazy: false, number: false })) const input = ref(null) @@ -193,10 +193,6 @@ export default defineComponent({ value = looseToNumber(value) } - if (modelModifiers.value.nullable && !value) { - value = null - } - emit('update:modelValue', value) emitFormInput() } From 3b704842d4474c9f2c4371d824c4191ea7ec11e8 Mon Sep 17 00:00:00 2001 From: Gerben Mulder Date: Mon, 30 Sep 2024 14:31:57 +0200 Subject: [PATCH 07/15] fix(Textarea): remove model modifier --- src/runtime/components/forms/Textarea.vue | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/runtime/components/forms/Textarea.vue b/src/runtime/components/forms/Textarea.vue index 924d8d19f5..921f05e6f0 100644 --- a/src/runtime/components/forms/Textarea.vue +++ b/src/runtime/components/forms/Textarea.vue @@ -127,7 +127,7 @@ export default defineComponent({ default: () => ({}) }, modelModifiers: { - type: Object as PropType<{ trim?: boolean, lazy?: boolean, number?: boolean, nullable?: boolean }>, + type: Object as PropType<{ trim?: boolean, lazy?: boolean, number?: boolean }>, default: () => ({}) } }, @@ -137,7 +137,7 @@ export default defineComponent({ const { emitFormBlur, emitFormInput, inputId, color, size, name } = useFormGroup(props, config) - const modelModifiers = ref(defu({}, props.modelModifiers, { trim: false, lazy: false, number: false, nullable: false })) + const modelModifiers = ref(defu({}, props.modelModifiers, { trim: false, lazy: false, number: false })) const textarea = ref(null) @@ -183,10 +183,6 @@ export default defineComponent({ value = looseToNumber(value) } - if (modelModifiers.value.nullable && !value) { - value = null - } - emit('update:modelValue', value) emitFormInput() } From dfa3cf76173d213a8876c0119cb4fe0b97cf816e Mon Sep 17 00:00:00 2001 From: Gerben Mulder Date: Mon, 30 Sep 2024 14:47:57 +0200 Subject: [PATCH 08/15] feat(Radio): allow `null` as inital value --- src/runtime/components/forms/Radio.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/components/forms/Radio.vue b/src/runtime/components/forms/Radio.vue index ffda283a48..471e62d70e 100644 --- a/src/runtime/components/forms/Radio.vue +++ b/src/runtime/components/forms/Radio.vue @@ -56,7 +56,7 @@ export default defineComponent({ default: null }, modelValue: { - type: [String, Number, Boolean, Object], + type: [String, Number, Boolean, Object] as PropType, default: null }, name: { From 25d62f0c79591e79d8efd5b306f69ba1ab50b7de Mon Sep 17 00:00:00 2001 From: Gerben Mulder Date: Mon, 30 Sep 2024 14:48:05 +0200 Subject: [PATCH 09/15] feat(RadioGroup): allow `null` as inital value --- src/runtime/components/forms/RadioGroup.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/components/forms/RadioGroup.vue b/src/runtime/components/forms/RadioGroup.vue index da2d246bf3..bd6d3863f5 100644 --- a/src/runtime/components/forms/RadioGroup.vue +++ b/src/runtime/components/forms/RadioGroup.vue @@ -52,7 +52,7 @@ export default defineComponent({ inheritAttrs: false, props: { modelValue: { - type: [String, Number, Object, Boolean], + type: [String, Number, Object, Boolean] as PropType, default: '' }, name: { From a112fd8bcf02f19cc124dece012b05902774dd02 Mon Sep 17 00:00:00 2001 From: Gerben Mulder Date: Mon, 30 Sep 2024 14:48:13 +0200 Subject: [PATCH 10/15] feat(InputMenu): allow `null` as inital value --- src/runtime/components/forms/InputMenu.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/components/forms/InputMenu.vue b/src/runtime/components/forms/InputMenu.vue index 243b17fed7..206bd037db 100644 --- a/src/runtime/components/forms/InputMenu.vue +++ b/src/runtime/components/forms/InputMenu.vue @@ -134,7 +134,7 @@ export default defineComponent({ inheritAttrs: false, props: { modelValue: { - type: [String, Number, Object, Array], + type: [String, Number, Object, Array] as PropType | null>, default: '' }, query: { From e4d4dd41cad8dd2edb0385be2a50670ae838ea56 Mon Sep 17 00:00:00 2001 From: Gerben Mulder Date: Mon, 30 Sep 2024 14:48:26 +0200 Subject: [PATCH 11/15] feat(Checkbox): allow `null` as inital value --- src/runtime/components/forms/Checkbox.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/components/forms/Checkbox.vue b/src/runtime/components/forms/Checkbox.vue index 2afb423e6a..f7ce36a525 100644 --- a/src/runtime/components/forms/Checkbox.vue +++ b/src/runtime/components/forms/Checkbox.vue @@ -57,7 +57,7 @@ export default defineComponent({ default: null }, modelValue: { - type: [Boolean, Array], + type: [Boolean, Array] as PropType | null>, default: null }, name: { From f052795b67f030d7a4534b1e2299124e4675c4b2 Mon Sep 17 00:00:00 2001 From: Gerben Mulder Date: Mon, 30 Sep 2024 14:48:41 +0200 Subject: [PATCH 12/15] feat(Range): allow `null` as inital value --- src/runtime/components/forms/Range.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/components/forms/Range.vue b/src/runtime/components/forms/Range.vue index e3023ae01b..e33270a9d4 100644 --- a/src/runtime/components/forms/Range.vue +++ b/src/runtime/components/forms/Range.vue @@ -37,7 +37,7 @@ export default defineComponent({ inheritAttrs: false, props: { modelValue: { - type: Number, + type: Number as PropType, default: 0 }, id: { From f6a6ed1309ebb464b245357dd927c1e2c31c3e37 Mon Sep 17 00:00:00 2001 From: Gerben Mulder Date: Mon, 30 Sep 2024 14:48:47 +0200 Subject: [PATCH 13/15] feat(Select): allow `null` as inital value --- src/runtime/components/forms/Select.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/components/forms/Select.vue b/src/runtime/components/forms/Select.vue index 92925ee46e..5abe361566 100644 --- a/src/runtime/components/forms/Select.vue +++ b/src/runtime/components/forms/Select.vue @@ -75,7 +75,7 @@ export default defineComponent({ inheritAttrs: false, props: { modelValue: { - type: [String, Number, Object], + type: [String, Number, Object] as PropType, default: '' }, id: { From 6e491b3e64d469b6ef27948b5ae55698c6d8b1a2 Mon Sep 17 00:00:00 2001 From: Gerben Mulder Date: Mon, 30 Sep 2024 14:48:54 +0200 Subject: [PATCH 14/15] feat(SelectMenu): allow `null` as inital value --- src/runtime/components/forms/SelectMenu.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/components/forms/SelectMenu.vue b/src/runtime/components/forms/SelectMenu.vue index 8d089e2c2b..be48112a78 100644 --- a/src/runtime/components/forms/SelectMenu.vue +++ b/src/runtime/components/forms/SelectMenu.vue @@ -174,7 +174,7 @@ export default defineComponent({ inheritAttrs: false, props: { modelValue: { - type: [String, Number, Object, Array, Boolean], + type: [String, Number, Object, Array, Boolean] as PropType | boolean | null>, default: '' }, query: { From fa27e2bd6a4631ff9d8bf1fae675b167233f7ff2 Mon Sep 17 00:00:00 2001 From: Gerben Mulder Date: Mon, 30 Sep 2024 14:49:00 +0200 Subject: [PATCH 15/15] feat(Toggle): allow `null` as inital value --- src/runtime/components/forms/Toggle.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/components/forms/Toggle.vue b/src/runtime/components/forms/Toggle.vue index 24b90cac64..59f5af2d97 100644 --- a/src/runtime/components/forms/Toggle.vue +++ b/src/runtime/components/forms/Toggle.vue @@ -62,7 +62,7 @@ export default defineComponent({ default: null }, modelValue: { - type: Boolean, + type: Boolean as PropType, default: false }, disabled: {