UNPKG

@extclp/vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 8.91 kB
{"version":3,"file":"form.vue2.mjs","sources":["../../../components/form/form.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { Row } from '@/components/row'\r\n\r\nimport { computed, provide, reactive } from 'vue'\r\n\r\nimport { createSizeProp, emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { formProps } from './props'\r\nimport { FORM_ACTIONS, FORM_FIELDS, FORM_PROPS, labelAligns, submitMethods } from './symbol'\r\n\r\nimport type { FieldOptions } from './symbol'\r\n\r\ndefineOptions({ name: 'Form', inheritAttrs: true })\r\n\r\nconst _props = defineProps(formProps)\r\nconst props = useProps('form', _props, {\r\n method: {\r\n default: 'post',\r\n validator: value => submitMethods.includes(value),\r\n },\r\n action: null,\r\n model: {\r\n default: () => ({}),\r\n static: true,\r\n },\r\n rules: () => ({}),\r\n labelWidth: 'auto',\r\n labelAlign: {\r\n default: 'right',\r\n validator: value => labelAligns.includes(value),\r\n },\r\n allRequired: false,\r\n labelSuffix: '',\r\n hideAsterisk: false,\r\n validateAll: false,\r\n hideLabel: false,\r\n disabled: false,\r\n loading: false,\r\n size: createSizeProp(),\r\n inline: false,\r\n gap: [8, 0],\r\n justify: 'start',\r\n align: 'top',\r\n})\r\n\r\nconst nh = useNameHelper('form')\r\nconst fieldSet: Set<FieldOptions> = reactive(new Set<any>())\r\n\r\nconst className = computed(() => {\r\n return [\r\n nh.b(),\r\n nh.bs('vars'),\r\n nh.bm(`label-${props.labelAlign}`),\r\n {\r\n [nh.bm('inherit')]: props.inherit,\r\n [nh.bm('disabled')]: props.disabled,\r\n [nh.bm('loading')]: props.loading,\r\n [nh.bm(props.size)]: props.size !== 'default',\r\n [nh.bm('inline')]: props.inline,\r\n },\r\n ]\r\n})\r\nconst labelWidth = computed(() => {\r\n return Math.max(...Array.from(fieldSet).map(field => field.labelWidth.value))\r\n})\r\n\r\nprovide(FORM_PROPS, props)\r\nprovide(FORM_FIELDS, fieldSet)\r\nprovide(FORM_ACTIONS, {\r\n getLabelWidth,\r\n validate,\r\n validateFields,\r\n reset,\r\n resetFields,\r\n clearError,\r\n clearFieldsError,\r\n})\r\n\r\ndefineExpose({\r\n validate,\r\n validateFields,\r\n reset,\r\n resetFields,\r\n clearError,\r\n clearFieldsError,\r\n})\r\n\r\nfunction getLabelWidth() {\r\n if (typeof props.labelWidth === 'number') {\r\n return props.labelWidth\r\n }\r\n\r\n return labelWidth.value\r\n}\r\n\r\nfunction getPropMap() {\r\n const propMap: Record<string, FieldOptions> = {}\r\n\r\n for (const field of fieldSet) {\r\n if (field.prop.value) {\r\n propMap[field.prop.value] = field\r\n }\r\n }\r\n\r\n return propMap\r\n}\r\n\r\nfunction validate() {\r\n return validateItems(fieldSet)\r\n}\r\n\r\nfunction validateFields(props: string | string[]) {\r\n if (!Array.isArray(props)) {\r\n props = [props]\r\n }\r\n\r\n const propMap = getPropMap()\r\n const fields = new Set<FieldOptions>()\r\n\r\n props.forEach(prop => {\r\n if (propMap[prop]) {\r\n fields.add(propMap[prop])\r\n }\r\n })\r\n\r\n return validateItems(fields)\r\n}\r\n\r\nfunction validateItems(items: Set<FieldOptions>) {\r\n const validations: Promise<string[] | null>[] = []\r\n\r\n items.forEach(item => {\r\n validations.push(item.validate())\r\n })\r\n\r\n return new Promise<string[]>(resolve => {\r\n Promise.all(validations).then(errors => {\r\n resolve(errors.flat().filter(Boolean) as string[])\r\n })\r\n })\r\n}\r\n\r\nfunction reset() {\r\n fieldSet.forEach(field => {\r\n field.reset()\r\n })\r\n}\r\n\r\nfunction resetFields(props: string | string[]) {\r\n if (!Array.isArray(props)) {\r\n props = [props]\r\n }\r\n\r\n const propMap = getPropMap()\r\n\r\n props.forEach(prop => {\r\n if (propMap[prop]) {\r\n propMap[prop].reset()\r\n }\r\n })\r\n}\r\n\r\nfunction clearError() {\r\n fieldSet.forEach(field => {\r\n field.clearError()\r\n })\r\n}\r\n\r\nfunction clearFieldsError(props: string | string[]) {\r\n if (!Array.isArray(props)) {\r\n props = [props]\r\n }\r\n\r\n const propMap = getPropMap()\r\n\r\n props.forEach(prop => {\r\n if (propMap[prop]) {\r\n propMap[prop].clearError()\r\n }\r\n })\r\n}\r\n\r\nfunction handleSubmit(event: SubmitEvent) {\r\n event.stopPropagation()\r\n\r\n if (!props.action) {\r\n event.preventDefault()\r\n }\r\n\r\n emitEvent(props.onSubmit, event)\r\n}\r\n</script>\r\n\r\n<template>\r\n <Row\r\n v-bind=\"$attrs\"\r\n :class=\"className\"\r\n :inherit=\"props.inherit\"\r\n tag=\"form\"\r\n :method=\"props.action && props.method\"\r\n :action=\"props.action\"\r\n :gap=\"props.gap\"\r\n :justify=\"props.justify\"\r\n :align=\"props.align\"\r\n :column-flex=\"undefined\"\r\n @submit=\"handleSubmit\"\r\n @reset.prevent.stop\r\n >\r\n <slot></slot>\r\n </Row>\r\n</template>\r\n"],"names":["props","useProps","__props","value","submitMethods","labelAligns","createSizeProp","nh","useNameHelper","fieldSet","reactive","className","computed","labelWidth","field","provide","FORM_PROPS","FORM_FIELDS","FORM_ACTIONS","getLabelWidth","validate","validateFields","reset","resetFields","clearError","clearFieldsError","__expose","getPropMap","propMap","validateItems","fields","prop","items","validations","item","resolve","errors","handleSubmit","event","emitEvent","_createBlock","_unref","Row","_mergeProps","_ctx","_renderSlot"],"mappings":"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"}