UNPKG

@extclp/vexip-ui

Version:

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

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