vuetify
Version:
Vue Material Component Framework
56 lines • 1.47 kB
JavaScript
import { createVNode as _createVNode } from "vue";
// Composables
import { createForm, makeFormProps } from "../../composables/form.mjs";
import { forwardRefs } from "../../composables/forwardRefs.mjs"; // Utilities
import { ref } from 'vue';
import { genericComponent, useRender } from "../../util/index.mjs"; // Types
export const VForm = genericComponent()({
name: 'VForm',
props: {
...makeFormProps()
},
emits: {
'update:modelValue': val => true,
submit: e => true
},
setup(props, _ref) {
let {
slots,
emit
} = _ref;
const form = createForm(props);
const formRef = ref();
function onReset(e) {
e.preventDefault();
form.reset();
}
function onSubmit(_e) {
const e = _e;
const ready = form.validate();
e.then = ready.then.bind(ready);
e.catch = ready.catch.bind(ready);
e.finally = ready.finally.bind(ready);
emit('submit', e);
if (!e.defaultPrevented) {
ready.then(_ref2 => {
let {
valid
} = _ref2;
if (valid) {
formRef.value?.submit();
}
});
}
e.preventDefault();
}
useRender(() => _createVNode("form", {
"ref": formRef,
"class": "v-form",
"novalidate": true,
"onReset": onReset,
"onSubmit": onSubmit
}, [slots.default?.(form)]));
return forwardRefs(form, formRef);
}
});
//# sourceMappingURL=VForm.mjs.map