diff options
Diffstat (limited to 'src/composable/validation.ts')
-rw-r--r-- | src/composable/validation.ts | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/composable/validation.ts b/src/composable/validation.ts new file mode 100644 index 0000000..09b1fce --- /dev/null +++ b/src/composable/validation.ts @@ -0,0 +1,27 @@ +import { reactive, watch, type Ref } from 'vue'; + +type UseValidationRule<T> = { + validator: (value: T) => boolean + message: string +} + +export function useValidation<T>({ source, rules }: { source: Ref<T>; rules: UseValidationRule<T>[] }) { + const state = reactive<{ + message: string, + status: undefined | 'error' + }>({ + message: '', + status: undefined + }) + + watch([source], () => { + for(const rule of rules) { + if(!rule.validator(source.value)){ + state.message = rule.message + state.status = 'error' + } + } + }) + + return state; +} |