Skip to content

Commit 48fb335

Browse files
authored
Merge pull request #418 from PrefectHQ/use-validation--getters
[useValidation] Add support for getters for value in useValidation.
2 parents ab261be + 96ddc4d commit 48fb335

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

src/useValidation/useValidation.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ describe('useValidation', () => {
1818
it.each([
1919
{ value: 1, valueType: 'plain value' },
2020
{ value: ref(1), valueType: 'ref' },
21+
{ value: () => 1, valueType: 'getter' },
2122
])('sets valid to true when the rules pass (with $valueType)', async ({ value }) => {
2223
const { valid, error, validate } = useValidation(
2324
value,
@@ -33,6 +34,7 @@ describe('useValidation', () => {
3334
it.each([
3435
{ value: 0, valueType: 'plain value' },
3536
{ value: ref(0), valueType: 'ref' },
37+
{ value: () => 1, valueType: 'getter' },
3638
])('sets valid to false with an error message when the rules do not pass (with $valueType)', async ({ value }) => {
3739
const errorMessage = 'Validation did not pass'
3840
const validationRule: ValidationRule<number> = () => errorMessage

src/useValidation/useValidation.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { computed, onMounted, onUnmounted, reactive, ref, ToRefs, watch, unref, Ref, WatchStopHandle } from 'vue'
1+
import { computed, onMounted, onUnmounted, reactive, ref, ToRefs, watch, unref, Ref, WatchStopHandle, toRef } from 'vue'
22
import { NoInfer } from '@/types/generics'
3-
import { MaybeArray, MaybePromise, MaybeRef } from '@/types/maybe'
3+
import { MaybeArray, MaybePromise, MaybeRefOrGetter, MaybeRef } from '@/types/maybe'
44
import { isValidationAbortedError } from '@/useValidation/ValidationAbortedError'
55
import { ValidationRuleExecutor } from '@/useValidation/ValidationExecutor'
66
import { ValidationObserverUnregister, VALIDATION_OBSERVER_INJECTION_KEY } from '@/useValidationObserver/useValidationObserver'
@@ -61,10 +61,10 @@ function isRules<T>(value: MaybeRef<string> | RulesArg<T>): value is RulesArg<T>
6161
return typeof unref(value) !== 'string'
6262
}
6363

64-
export function useValidation<T>(value: MaybeRef<T>, rules: RulesArg<NoInfer<T>>): UseValidation
65-
export function useValidation<T>(value: MaybeRef<T>, name: MaybeRef<string>, rules: RulesArg<NoInfer<T>>): UseValidation
64+
export function useValidation<T>(value: MaybeRefOrGetter<T>, rules: RulesArg<NoInfer<T>>): UseValidation
65+
export function useValidation<T>(value: MaybeRefOrGetter<T>, name: MaybeRef<string>, rules: RulesArg<NoInfer<T>>): UseValidation
6666
export function useValidation<T>(
67-
value: MaybeRef<T>,
67+
value: MaybeRefOrGetter<T>,
6868
nameOrRules: MaybeRef<string> | RulesArg<NoInfer<T>>,
6969
maybeRules?: RulesArg<NoInfer<T>>,
7070
): UseValidation {
@@ -77,7 +77,7 @@ export function useValidation<T>(
7777
throw new Error('Invalid useValidation arguments')
7878
}
7979

80-
const valueRef = ref(value) as Ref<T>
80+
const valueRef = toRef(value)
8181
const nameRef = ref(nameOrRules)
8282
const rulesRef = computed(() => asArray(unref(maybeRules)))
8383
const previousValueRef = ref() as Ref<T>

0 commit comments

Comments
 (0)