UNPKG

@extclp/vexip-ui

Version:

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

1 lines 5.37 kB
{"version":3,"file":"form-submit.vue2.mjs","sources":["../../../components/form/form-submit.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { FIELD_OPTIONS } from '@/components/form/symbol'\n\nimport { computed, inject, ref, toRef } from 'vue'\n\nimport { createIconProp, emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useSetTimeout } from '@vexip-ui/hooks'\nimport { isPromise } from '@vexip-ui/utils'\nimport { formSubmitProps } from './props'\nimport { FORM_ACTIONS, FORM_PROPS } from './symbol'\n\ndefineOptions({ name: 'FormSubmit' })\n\nconst _props = defineProps(formSubmitProps)\nconst props = useProps('form-submit', _props, {\n size: null,\n locale: null,\n type: 'primary',\n label: null,\n dashed: null,\n text: null,\n simple: null,\n ghost: null,\n disabled: null,\n circle: null,\n loadingIcon: createIconProp(),\n loadingEffect: null,\n icon: createIconProp(),\n color: null,\n buttonType: null,\n block: null,\n onBeforeSubmit: {\n default: null,\n isFunc: true\n }\n})\n\nconst slots = defineSlots<{\n default?: () => any,\n icon?: () => any,\n loading?: () => any\n}>()\n\nconst fieldActions = inject(FIELD_OPTIONS, null)\n\nconst formProps = inject(FORM_PROPS, {})\nconst actions = inject(FORM_ACTIONS, null)\n\nconst nh = useNameHelper('form')\nconst locale = useLocale('form', toRef(props, 'locale'))\n\nconst { timer } = useSetTimeout()\n\nconst loading = ref(false)\n\nconst submit = ref<HTMLElement>()\n\nconst isNative = computed(() => formProps.method && formProps.action)\nconst isInherit = computed(() => !!actions || props.inherit)\nconst isLoading = computed(() => {\n return loading.value || (fieldActions ? fieldActions.loading.value : false)\n})\n\ndefineExpose({ submit, isNative, isLoading })\n\nasync function handleSubmit() {\n if (props.disabled || loading.value || !actions) return\n\n loading.value = true\n\n const errors = await actions.validate()\n\n if (errors.length) {\n emitEvent(props.onError, errors)\n } else {\n let result: unknown = true\n\n if (typeof props.onBeforeSubmit === 'function') {\n result = props.onBeforeSubmit()\n\n if (isPromise(result)) {\n result = await result\n }\n }\n\n if (result !== false) {\n emitEvent(props.onSubmit)\n\n if (isNative.value) {\n submit.value?.click()\n }\n }\n }\n\n timer.loading = setTimeout(() => {\n loading.value = false\n }, 300)\n}\n</script>\n\n<template>\n <Button\n v-bind=\"$attrs\"\n :inherit=\"isInherit\"\n :class=\"nh.be('submit')\"\n :size=\"props.size\"\n :type=\"props.type\"\n :simple=\"props.simple\"\n :ghost=\"props.ghost\"\n :dashed=\"props.dashed\"\n :text=\"props.text\"\n :disabled=\"props.disabled\"\n :loading=\"isLoading\"\n :circle=\"props.circle\"\n :loading-icon=\"props.loadingIcon\"\n :loading-effect=\"props.loadingEffect\"\n :icon=\"props.icon\"\n :color=\"props.color\"\n :button-type=\"props.buttonType\"\n :block=\"props.block\"\n :tag=\"props.tag\"\n @click=\"handleSubmit\"\n >\n <slot>\n {{ props.label || locale.submit }}\n </slot>\n <template v-if=\"slots.icon\" #icon>\n <slot name=\"icon\"></slot>\n </template>\n <template v-if=\"slots.loading\" #loading>\n <slot name=\"loading\"></slot>\n </template>\n <button\n v-if=\"isNative\"\n ref=\"submit\"\n type=\"submit\"\n style=\"display: none\"\n @click.stop\n ></button>\n </Button>\n</template>\n"],"names":["props","useProps","__props","createIconProp","slots","_useSlots","fieldActions","inject","FIELD_OPTIONS","formProps","FORM_PROPS","actions","FORM_ACTIONS","nh","useNameHelper","locale","useLocale","toRef","timer","useSetTimeout","loading","ref","submit","isNative","computed","isInherit","isLoading","__expose","handleSubmit","errors","emitEvent","result","isPromise","_a"],"mappings":";;;;;;;;;;;;;AAeM,UAAAA,IAAQC,EAAS,eADRC,GAC+B;AAAA,MAC5C,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,aAAaC,EAAe;AAAA,MAC5B,eAAe;AAAA,MACf,MAAMA,EAAe;AAAA,MACrB,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,gBAAgB;AAAA,QACd,SAAS;AAAA,QACT,QAAQ;AAAA,MAAA;AAAA,IACV,CACD,GAEKC,IAAQC,EAAA,GAMRC,IAAeC,EAAOC,GAAe,IAAI,GAEzCC,IAAYF,EAAOG,GAAY,EAAE,GACjCC,IAAUJ,EAAOK,GAAc,IAAI,GAEnCC,IAAKC,EAAc,MAAM,GACzBC,IAASC,EAAU,QAAQC,EAAMjB,GAAO,QAAQ,CAAC,GAEjD,EAAE,OAAAkB,EAAM,IAAIC,EAAc,GAE1BC,IAAUC,EAAI,EAAK,GAEnBC,IAASD,EAAiB,GAE1BE,IAAWC,EAAS,MAAMf,EAAU,UAAUA,EAAU,MAAM,GAC9DgB,IAAYD,EAAS,MAAM,CAAC,CAACb,KAAWX,EAAM,OAAO,GACrD0B,IAAYF,EAAS,MAClBJ,EAAQ,UAAUd,IAAeA,EAAa,QAAQ,QAAQ,GACtE;AAED,IAAAqB,EAAa,EAAE,QAAAL,GAAQ,UAAAC,GAAU,WAAAG,EAAA,CAAW;AAE5C,mBAAeE,IAAe;;AAC5B,UAAI5B,EAAM,YAAYoB,EAAQ,SAAS,CAACT,EAAS;AAEjD,MAAAS,EAAQ,QAAQ;AAEV,YAAAS,IAAS,MAAMlB,EAAQ,SAAS;AAEtC,UAAIkB,EAAO;AACC,QAAAC,EAAA9B,EAAM,SAAS6B,CAAM;AAAA,WAC1B;AACL,YAAIE,IAAkB;AAElB,QAAA,OAAO/B,EAAM,kBAAmB,eAClC+B,IAAS/B,EAAM,eAAe,GAE1BgC,EAAUD,CAAM,MAClBA,IAAS,MAAMA,KAIfA,MAAW,OACbD,EAAU9B,EAAM,QAAQ,GAEpBuB,EAAS,WACXU,IAAAX,EAAO,UAAP,QAAAW,EAAc;AAAA,MAElB;AAGI,MAAAf,EAAA,UAAU,WAAW,MAAM;AAC/B,QAAAE,EAAQ,QAAQ;AAAA,SACf,GAAG;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}