UNPKG

@varlet/ui

Version:

A Vue3 component library based on Material Design 2 and 3, supporting mobile and desktop.

117 lines (116 loc) 3.73 kB
var __async = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; import { computed, defineComponent } from "vue"; import { call, find, preventDefault } from "@varlet/shared"; import { createNamespace } from "../utils/components.mjs"; import { getParentScroller, getTop, scrollTo, toPxNum } from "../utils/elements.mjs"; import { linear } from "../utils/shared.mjs"; import { props } from "./props.mjs"; import { useFormItems } from "./provide.mjs"; const { name, n } = createNamespace("form"); import { renderSlot as _renderSlot, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue"; function __render__(_ctx, _cache) { return _openBlock(), _createElementBlock( "form", { class: _normalizeClass(_ctx.n()), onSubmit: _cache[0] || (_cache[0] = (...args) => _ctx.handleSubmit && _ctx.handleSubmit(...args)), onReset: _cache[1] || (_cache[1] = (...args) => _ctx.handleReset && _ctx.handleReset(...args)) }, [ _renderSlot(_ctx.$slots, "default") ], 34 /* CLASS, NEED_HYDRATION */ ); } const __sfc__ = defineComponent({ name, props, setup(props2) { const disabled = computed(() => props2.disabled); const readonly = computed(() => props2.readonly); const { formItems, bindFormItems } = useFormItems(); const formProvider = { disabled, readonly }; bindFormItems(formProvider); function scroll(formItemElement) { setTimeout(() => { const scroller = getParentScroller(formItemElement); const scrollerTop = scroller === window ? 0 : getTop(scroller); const top = getTop(formItemElement) - scrollerTop - toPxNum(props2.scrollToErrorOffsetY); scrollTo(scroller, { top, animation: linear }); }, 300); } function handleSubmit(event) { return __async(this, null, function* () { preventDefault(event); const valid = yield validate(); call(props2.onSubmit, valid); }); } function handleReset(event) { preventDefault(event); reset(); call(props2.onReset); } function validate() { return __async(this, null, function* () { var _a; const res = yield Promise.all(formItems.map(({ validate: validate2 }) => validate2())); if (props2.scrollToError) { const [, errorIndex] = find(res, (r) => r === false, props2.scrollToError); const hasError = errorIndex > -1; if (hasError) { const formItemElement = (_a = formItems[errorIndex].instance.proxy) == null ? void 0 : _a.$el; scroll(formItemElement); } return !hasError; } return res.every((result) => result === true); }); } function reset() { return formItems.forEach(({ reset: reset2 }) => reset2()); } function resetValidation() { return formItems.forEach(({ resetValidation: resetValidation2 }) => resetValidation2()); } return { n, handleSubmit, handleReset, validate, reset, resetValidation }; } }); __sfc__.render = __render__; var stdin_default = __sfc__; export { stdin_default as default };