vuetify
Version:
Vue Material Component Framework
60 lines • 1.68 kB
JavaScript
import { createVNode as _createVNode } from "vue";
// Composables
import { makeComponentProps } from "../../composables/component.js";
import { createForm, makeFormProps } from "../../composables/form.js";
import { forwardRefs } from "../../composables/forwardRefs.js"; // Utilities
import { ref } from 'vue';
import { genericComponent, propsFactory, useRender } from "../../util/index.js"; // Types
export const makeVFormProps = propsFactory({
...makeComponentProps(),
...makeFormProps()
}, 'VForm');
export const VForm = genericComponent()({
name: 'VForm',
props: makeVFormProps(),
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', props.class],
"style": props.style,
"novalidate": true,
"onReset": onReset,
"onSubmit": onSubmit
}, [slots.default?.(form)]));
return forwardRefs(form, formRef);
}
});
//# sourceMappingURL=VForm.js.map