vuetify
Version:
Vue Material Component Framework
80 lines • 2.27 kB
JavaScript
import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode } 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, {
slots,
emit
}) {
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(({
valid
}) => {
if (valid) {
formRef.value?.submit();
}
});
}
e.preventDefault();
}
useRender(() => _createElementVNode("form", {
"ref": formRef,
"class": _normalizeClass(['v-form', props.class]),
"style": _normalizeStyle(props.style),
"novalidate": true,
"onReset": onReset,
"onSubmit": onSubmit
}, [slots.default?.({
get errors() {
return form.errors.value;
},
get isDisabled() {
return form.isDisabled.value;
},
get isReadonly() {
return form.isReadonly.value;
},
get isValidating() {
return form.isValidating.value;
},
get isValid() {
return form.isValid.value;
},
get items() {
return form.items.value;
},
validate: form.validate,
reset: form.reset,
resetValidation: form.resetValidation
})]));
return forwardRefs(form, formRef);
}
});
//# sourceMappingURL=VForm.js.map