vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 21.5 kB
Source Map (JSON)
{"version":3,"file":"form-item.vue2.cjs","sources":["../../../components/form/form-item.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Column } from '@/components/column'\nimport { Icon } from '@/components/icon'\nimport { Tooltip } from '@/components/tooltip'\n\nimport { computed, inject, onBeforeUnmount, onMounted, provide, ref, toRef, watch } from 'vue'\n\nimport {\n makeSentence,\n useIcons,\n useId,\n useLocale,\n useNameHelper,\n useProps,\n useWordSpace,\n} from '@vexip-ui/config'\nimport { useDisplay } from '@vexip-ui/hooks'\nimport { createEventEmitter, isFunction, isNull, isObject } from '@vexip-ui/utils'\nimport { formItemProps } from './props'\nimport { validate as asyncValidate } from './validator'\nimport { getValueByPath, setValueByPath } from './helper'\nimport { FIELD_OPTIONS, FORM_ACTIONS, FORM_FIELDS, FORM_PROPS } from './symbol'\n\nimport type { ComponentState } from '@vexip-ui/config'\nimport type { Rule } from './validator'\n\ndefineOptions({ name: 'FormItem', inheritAttrs: true })\n\nconst nh = useNameHelper('form')\nconst _props = defineProps(formItemProps)\nconst props = useProps('formItem', _props, {\n locale: null,\n label: {\n default: '',\n static: true,\n },\n prop: {\n default: '',\n static: true,\n },\n name: {\n default: '',\n static: true,\n },\n rules: () => [],\n labelWidth: null,\n required: false,\n htmlFor: {\n default: null,\n static: true,\n },\n errorTransition: () => nh.ns('fade'),\n defaultValue: {\n default: null,\n static: true,\n },\n hideErrorTip: false,\n validateAll: null,\n hideAsterisk: null,\n hideLabel: null,\n action: false,\n help: '',\n pure: false,\n span: 24,\n offset: null,\n push: null,\n pull: null,\n order: null,\n xs: null,\n sm: null,\n md: null,\n lg: null,\n xl: null,\n xxl: null,\n flex: null,\n})\n\nconst slots = defineSlots<{\n default?: () => any,\n help?: () => any,\n label?: () => any,\n error?: (params: { tip: string }) => any\n}>()\n\nconst formProps = inject(FORM_PROPS, {})\nconst formActions = inject(FORM_ACTIONS, null)\nconst formFields = inject(FORM_FIELDS, null)\nconst emitter = createEventEmitter()\n\nconst locale = useLocale('form', toRef(props, 'locale'))\nconst icons = useIcons()\nconst wordSpace = useWordSpace()\n\nconst initValue = ref(props.defaultValue)\nconst isError = ref(false)\nconst errorTip = ref('')\nconst validating = ref(false)\nconst disabledValidate = ref(false)\nconst labelWidth = ref(0)\n\nconst placeholder = useDisplay(() => {\n if (placeholder.value) {\n labelWidth.value = placeholder.value.offsetWidth\n }\n})\n\nconst labelId = useId()\nconst isRequired = computed(() => formProps.allRequired || props.required)\nconst requiredTip = computed(() => {\n return makeSentence(`${props.label || props.prop} ${locale.value.notNullable}`, wordSpace.value)\n})\nconst allRules = computed(() => {\n if (!props.prop) return []\n\n const requiredRule: Rule[] = isRequired.value\n ? [{ required: isRequired.value, message: requiredTip.value }]\n : []\n const selfRules = Array.isArray(props.rules) ? props.rules : [props.rules]\n\n let formRules: Rule[] = []\n\n if (formProps.rules) {\n formRules = (getValueByPath(formProps.rules, props.prop) as Rule[]) ?? []\n }\n\n formRules = Array.isArray(formRules) ? formRules : [formRules]\n\n return requiredRule.concat(formRules, selfRules)\n})\nconst currentValue = computed(getValue)\nconst isValidateAll = computed(() => {\n return isNull(props.validateAll) ? (formProps.validateAll ?? false) : props.validateAll\n})\nconst useAsterisk = computed(() => {\n if (props.hideAsterisk === true || formProps.hideAsterisk) {\n return false\n }\n\n for (const rule of allRules.value) {\n if (rule.required) return true\n }\n\n return isRequired.value\n})\nconst hideLabel = computed(() => props.action || props.hideLabel === true || formProps.hideLabel)\nconst hasLabel = computed(() => !(hideLabel.value || !(props.label || slots.label)))\nconst labelAlign = computed(() => formProps.labelAlign)\nconst computedLabelWidth = computed(() => {\n if (labelAlign.value) {\n return getLabelWidth(\n labelAlign.value === 'top'\n ? 0\n : hideLabel.value\n ? 0\n : props.labelWidth || formProps.labelWidth || 80,\n )\n }\n\n return getLabelWidth(hideLabel.value ? 0 : props.labelWidth || 80)\n})\nconst className = computed(() => {\n return {\n [nh.be('item')]: true,\n [nh.bs('vars')]: true,\n [nh.bem('item', 'inherit')]: formFields || props.inherit,\n [nh.bem('item', 'required')]: !formProps.hideAsterisk && useAsterisk.value,\n [nh.bem('item', 'error')]: isError.value,\n [nh.bem('item', 'action')]: props.action,\n [nh.bem('item', 'padding')]: formProps.inline && labelAlign.value === 'top' && !hasLabel.value,\n }\n})\nconst controlStyle = computed(() => {\n return {\n width: labelAlign.value === 'top' ? undefined : `calc(100% - ${computedLabelWidth.value}px)`,\n marginLeft:\n hasLabel.value || labelAlign.value === 'top' ? undefined : `${computedLabelWidth.value}px`,\n }\n})\nconst inputValue = computed(() => {\n const value = currentValue.value\n\n if (Array.isArray(value) || isObject(value)) {\n return JSON.stringify(value)\n }\n\n return value\n})\nconst columnFlex = computed(() => {\n return { justify: props.action ? 'center' : 'start', align: 'middle' } as const\n})\nconst labelWidthDefined = computed(\n () => !!(formProps.labelWidth && formProps.labelWidth !== 'auto') || props.labelWidth > 0,\n)\n\nconst instances = new Set<any>()\n\nconst fieldObject = Object.freeze({\n prop: computed(() => props.prop),\n idFor: computed(() => props.prop),\n labelId,\n state: computed<ComponentState>(() => (isError.value ? 'error' : 'default')),\n disabled: computed(() => !!formProps.disabled),\n loading: computed(() => !!formProps.loading),\n size: computed(() => formProps.size || 'default'),\n emitter,\n labelWidth,\n validate,\n clearError,\n reset,\n getValue,\n setValue,\n sync: (instance: any) => {\n if (instances.size) {\n console.warn('[vexip-ui:Form]: must only be one control component under FormItem.')\n }\n\n instances.add(instance)\n },\n unSync: (instance: any) => {\n instances.delete(instance)\n },\n})\n\nprovide(FIELD_OPTIONS, fieldObject)\n\nwatch(\n () => props.defaultValue,\n value => {\n initValue.value = value\n },\n)\n\nonMounted(() => {\n const value = currentValue.value\n\n if (isNull(initValue.value)) {\n initValue.value = Array.isArray(value) ? Array.from(value) : value\n }\n\n if (formFields) {\n formFields.add(fieldObject)\n }\n})\n\nonBeforeUnmount(() => {\n if (formFields) {\n formFields.delete(fieldObject)\n }\n})\n\ndefineExpose({ isError, inputValue, computedLabelWidth })\n\nfunction getLabelWidth(width: number | 'auto') {\n return width === 'auto' ? formActions?.getLabelWidth() || 80 : width\n}\n\nlet initialized = false\n\nfunction getValue(defaultValue: unknown = initValue.value) {\n if (!formProps.model || !props.prop) return defaultValue\n\n try {\n const value = getValueByPath(formProps.model, props.prop, true)\n initialized = true\n\n return value\n } catch (e) {\n if (!initialized) {\n setValueByPath(formProps.model, props.prop, defaultValue, false)\n initialized = true\n }\n\n return defaultValue\n }\n}\n\nfunction setValue(value: unknown, strict = false) {\n if (!formProps.model || !props.prop) return\n\n try {\n return setValueByPath(formProps.model, props.prop, value, strict)\n } catch (e) {}\n}\n\nfunction validate() {\n return handleValidate()\n}\n\nfunction clearError() {\n isError.value = false\n errorTip.value = ''\n}\n\nfunction reset() {\n clearError()\n\n if (!formProps.model || !props.prop) return false\n\n const value = currentValue.value\n\n let resetValue\n\n if (Array.isArray(value)) {\n resetValue = Array.isArray(initValue.value) ? Array.from(initValue.value) : []\n } else {\n resetValue = isFunction(initValue.value) ? initValue.value() : initValue.value\n }\n\n return setValueByPath(formProps.model, props.prop, resetValue, true)\n}\n\nasync function handleValidate() {\n if (disabledValidate.value) {\n disabledValidate.value = false\n\n return handleValidateEnd(null)\n }\n\n if (!props.prop || !formProps.model || validating.value) {\n return handleValidateEnd(null)\n }\n\n validating.value = true\n\n const value = currentValue.value\n const useRules = allRules.value\n const model = formProps.model\n\n let errors: string[] | null = await asyncValidate(\n useRules,\n value,\n model,\n isValidateAll.value,\n locale.value.validateFail,\n )\n\n errors = errors.length ? errors : null\n\n return handleValidateEnd(errors)\n}\n\nfunction handleValidateEnd(errors: string[] | null) {\n validating.value = false\n\n if (!errors) {\n clearError()\n } else {\n isError.value = true\n errorTip.value = Array.isArray(errors) ? errors[0] : errors\n }\n\n return errors\n}\n\nfunction handleLabelClick() {\n emitter.emit('focus')\n}\n\nconst isNative = computed(() => !!(formProps.action && formProps.method))\n</script>\n\n<template>\n <slot v-if=\"props.pure\"></slot>\n <Column\n v-else\n v-bind=\"$attrs\"\n :class=\"className\"\n :inherit=\"props.inherit\"\n role=\"group\"\n tag=\"div\"\n :span=\"props.span\"\n :offset=\"props.offset\"\n :push=\"props.push\"\n :pull=\"props.pull\"\n :order=\"props.order\"\n :xs=\"props.xs\"\n :sm=\"props.sm\"\n :md=\"props.md\"\n :lg=\"props.lg\"\n :xl=\"props.xl\"\n :xxl=\"props.xxl\"\n :flex=\"props.flex\"\n :use-flex=\"columnFlex\"\n >\n <input\n v-if=\"isNative\"\n type=\"hidden\"\n :name=\"props.name || props.prop\"\n :value=\"inputValue\"\n style=\"display: none\"\n />\n <span\n v-if=\"hasLabel && labelAlign !== 'top' && !labelWidthDefined\"\n ref=\"placeholder\"\n :class=\"nh.be('placeholder')\"\n role=\"none\"\n >\n <Icon v-if=\"props.help || slots.help\" v-bind=\"icons.help\" :class=\"nh.be('help')\"></Icon>\n <slot name=\"label\">\n {{ props.label + (formProps.labelSuffix || '') }}\n </slot>\n </span>\n <label\n v-if=\"hasLabel\"\n :id=\"labelId\"\n :class=\"nh.be('label')\"\n :style=\"{ width: labelAlign !== 'top' ? `${computedLabelWidth}px` : undefined }\"\n :for=\"props.htmlFor || props.prop\"\n @click=\"handleLabelClick\"\n >\n <Tooltip v-if=\"props.help || slots.help\" transfer>\n <template #trigger>\n <Icon v-bind=\"icons.help\" :class=\"nh.be('help')\"></Icon>\n </template>\n <slot name=\"help\">\n <div :class=\"nh.be('help-tip')\">\n {{ props.help }}\n </div>\n </slot>\n </Tooltip>\n <slot name=\"label\">\n {{ props.label + (formProps.labelSuffix || '') }}\n </slot>\n </label>\n <div\n :class=\"{\n [nh.be('control')]: true,\n [nh.bem('control', 'no-label')]: !hasLabel,\n [nh.bem('control', 'action')]: props.action\n }\"\n role=\"alert\"\n aria-relevant=\"all\"\n :style=\"controlStyle\"\n >\n <slot></slot>\n <Transition :name=\"props.errorTransition\">\n <div v-if=\"!props.hideErrorTip && isError\" :class=\"nh.be('error-tip')\">\n <slot name=\"error\" :tip=\"errorTip\">\n {{ errorTip }}\n </slot>\n </div>\n </Transition>\n </div>\n </Column>\n</template>\n"],"names":["nh","useNameHelper","_props","__props","props","useProps","slots","_useSlots","formProps","inject","FORM_PROPS","formActions","FORM_ACTIONS","formFields","FORM_FIELDS","emitter","createEventEmitter","locale","useLocale","toRef","icons","useIcons","wordSpace","useWordSpace","initValue","ref","isError","errorTip","validating","disabledValidate","labelWidth","placeholder","useDisplay","labelId","useId","isRequired","computed","requiredTip","makeSentence","allRules","requiredRule","selfRules","formRules","getValueByPath","currentValue","getValue","isValidateAll","isNull","useAsterisk","rule","hideLabel","hasLabel","labelAlign","computedLabelWidth","getLabelWidth","className","controlStyle","inputValue","value","isObject","columnFlex","labelWidthDefined","instances","fieldObject","validate","clearError","reset","setValue","instance","provide","FIELD_OPTIONS","watch","onMounted","onBeforeUnmount","__expose","width","initialized","defaultValue","setValueByPath","strict","handleValidate","resetValue","isFunction","handleValidateEnd","useRules","model","errors","asyncValidate","handleLabelClick","isNative","_unref","_renderSlot","_ctx","_createBlock","Column","_mergeProps","$attrs","_createElementBlock","_normalizeClass","_openBlock","Icon","_createTextVNode","_toDisplayString","_normalizeStyle","Tooltip","_createVNode","_createElementVNode","_Transition"],"mappings":"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"}