|
| 1 | +<script lang="ts"> |
| 2 | +import { |
| 3 | + CheckboxField, |
| 4 | + FormValidator, |
| 5 | + Validator, |
| 6 | + email, |
| 7 | + pattern, |
| 8 | + EmailField, |
| 9 | + required, |
| 10 | + PasswordField, |
| 11 | +} from '/@/' |
| 12 | +import { computed, defineComponent, ref } from 'vue' |
| 13 | +
|
| 14 | +export default defineComponent({ |
| 15 | + name: 'ResetFormDemo', |
| 16 | + setup() { |
| 17 | + const formValues = ref({}) |
| 18 | + const formRef = ref(null) |
| 19 | +
|
| 20 | + const emailValidator: FormValidator = Validator({ |
| 21 | + validator: email, |
| 22 | + text: 'Email format is incorrect', |
| 23 | + }) |
| 24 | +
|
| 25 | + const passwordValidator: FormValidator = Validator({ |
| 26 | + validator: pattern( |
| 27 | + '^(?=.*[a-z])(?=.*[A-Z])(?=.*)(?=.*[#$^+=!*()@%&]).{8,10}$', |
| 28 | + ), |
| 29 | + text: 'Password must contain at least 1 Uppercase, 1 Lowercase, 1 number, 1 special character and min 8 characters max 10', |
| 30 | + }) |
| 31 | +
|
| 32 | + const form = computed(() => ({ |
| 33 | + id: 'basic-demo', |
| 34 | + fields: { |
| 35 | + email: EmailField({ |
| 36 | + label: 'Email', |
| 37 | + validations: [ |
| 38 | + Validator({ validator: required, text: 'This field is required' }), |
| 39 | + emailValidator, |
| 40 | + ], |
| 41 | + }), |
| 42 | + password: PasswordField({ |
| 43 | + label: 'Password', |
| 44 | + autocomplete: 'current-password', |
| 45 | + validations: [ |
| 46 | + Validator({ validator: required, text: 'This field is required' }), |
| 47 | + passwordValidator, |
| 48 | + ], |
| 49 | + }), |
| 50 | + rememberMe: CheckboxField({ |
| 51 | + label: 'Remember Me', |
| 52 | + }), |
| 53 | + }, |
| 54 | + })) |
| 55 | +
|
| 56 | + function handleSubmit(values) { |
| 57 | + console.log('Values Submitted', values) |
| 58 | + } |
| 59 | +
|
| 60 | + function valueChanged(values) { |
| 61 | + Object.assign(formValues.value, values) |
| 62 | + console.log('Values', values) |
| 63 | + } |
| 64 | +
|
| 65 | + function handleError(errors) { |
| 66 | + console.error('Errors', errors) |
| 67 | + } |
| 68 | +
|
| 69 | + function resetForm() { |
| 70 | + formRef.value.resetForm() |
| 71 | + formValues.value = {} |
| 72 | + } |
| 73 | +
|
| 74 | + return { |
| 75 | + form, |
| 76 | + handleSubmit, |
| 77 | + formValues, |
| 78 | + valueChanged, |
| 79 | + handleError, |
| 80 | + formRef, |
| 81 | + resetForm, |
| 82 | + } |
| 83 | + }, |
| 84 | +}) |
| 85 | +</script> |
| 86 | +<template> |
| 87 | + <div class="page container"> |
| 88 | + <div class="mx-auto w-full sm:w-1/2 relative mb-24"> |
| 89 | + <div |
| 90 | + class=" |
| 91 | + absolute |
| 92 | + inset-0 |
| 93 | + bg-gradient-to-r |
| 94 | + from-blue-400 |
| 95 | + to-green-200 |
| 96 | + shadow-xl |
| 97 | + transform |
| 98 | + -skew-y-3 |
| 99 | + sm:skew-y-0 sm:-rotate-3 sm:rounded-3xl |
| 100 | + " |
| 101 | + ></div> |
| 102 | + <div class="relative card p-6 bg-white"> |
| 103 | + <DynamicForm |
| 104 | + ref="formRef" |
| 105 | + :form="form" |
| 106 | + @submitted="handleSubmit" |
| 107 | + @change="valueChanged" |
| 108 | + @error="handleError" |
| 109 | + /> |
| 110 | + <button |
| 111 | + data-cy="submit" |
| 112 | + class="btn mr-4 bg-green-500 text-white hover:bg-green-700 mt-4" |
| 113 | + submit="true" |
| 114 | + :form="form?.id" |
| 115 | + > |
| 116 | + Try me |
| 117 | + </button> |
| 118 | + |
| 119 | + <button |
| 120 | + class="btn bg-green-500 text-white hover:bg-green-700 mt-4" |
| 121 | + @click="resetForm" |
| 122 | + > |
| 123 | + Reset Me |
| 124 | + </button> |
| 125 | + </div> |
| 126 | + </div> |
| 127 | + <div class="mx-auto w-full sm:w-1/2"> |
| 128 | + <Console :content="formValues" /> |
| 129 | + </div> |
| 130 | + </div> |
| 131 | +</template> |
| 132 | + |
| 133 | +<style lang="scss"> |
| 134 | +@import '/@/styles/themes/default.scss'; |
| 135 | +</style> |
0 commit comments