{"version":3,"file":"form-submit.vue2.mjs","sources":["../../../components/form/form-submit.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { Button } from '@/components/button'\r\nimport { FIELD_OPTIONS } from '@/components/form/symbol'\r\n\r\nimport { computed, inject, ref, toRef } from 'vue'\r\n\r\nimport { createIconProp, emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useSetTimeout } from '@vexip-ui/hooks'\r\nimport { isPromise } from '@vexip-ui/utils'\r\nimport { formSubmitProps } from './props'\r\nimport { FORM_ACTIONS, FORM_PROPS } from './symbol'\r\n\r\ndefineOptions({ name: 'FormSubmit' })\r\n\r\nconst _props = defineProps(formSubmitProps)\r\nconst props = useProps('form-submit', _props, {\r\n  size: null,\r\n  locale: null,\r\n  type: 'primary',\r\n  label: null,\r\n  dashed: null,\r\n  text: null,\r\n  simple: null,\r\n  ghost: null,\r\n  disabled: null,\r\n  circle: null,\r\n  loadingIcon: createIconProp(),\r\n  loadingEffect: null,\r\n  icon: createIconProp(),\r\n  color: null,\r\n  buttonType: null,\r\n  block: null,\r\n  onBeforeSubmit: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n})\r\n\r\nconst slots = defineSlots<{\r\n  default?: () => any,\r\n  icon?: () => any,\r\n  loading?: () => any,\r\n}>()\r\n\r\nconst fieldActions = inject(FIELD_OPTIONS, null)\r\n\r\nconst formProps = inject(FORM_PROPS, {})\r\nconst actions = inject(FORM_ACTIONS, null)\r\n\r\nconst nh = useNameHelper('form')\r\nconst locale = useLocale('form', toRef(props, 'locale'))\r\n\r\nconst { timer } = useSetTimeout()\r\n\r\nconst loading = ref(false)\r\n\r\nconst submit = ref<HTMLElement>()\r\n\r\nconst isNative = computed(() => formProps.method && formProps.action)\r\nconst isInherit = computed(() => !!actions || props.inherit)\r\nconst isLoading = computed(() => {\r\n  return loading.value || (fieldActions ? fieldActions.loading.value : false)\r\n})\r\n\r\ndefineExpose({ submit, isNative, isLoading })\r\n\r\nasync function handleSubmit() {\r\n  if (props.disabled || loading.value || !actions) return\r\n\r\n  loading.value = true\r\n\r\n  const errors = await actions.validate()\r\n\r\n  if (errors.length) {\r\n    emitEvent(props.onError, errors)\r\n  } else {\r\n    let result: unknown = true\r\n\r\n    if (typeof props.onBeforeSubmit === 'function') {\r\n      result = props.onBeforeSubmit()\r\n\r\n      if (isPromise(result)) {\r\n        result = await result\r\n      }\r\n    }\r\n\r\n    if (result !== false) {\r\n      emitEvent(props.onSubmit)\r\n\r\n      if (isNative.value) {\r\n        submit.value?.click()\r\n      }\r\n    }\r\n  }\r\n\r\n  timer.loading = setTimeout(() => {\r\n    loading.value = false\r\n  }, 300)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <Button\r\n    v-bind=\"$attrs\"\r\n    :inherit=\"isInherit\"\r\n    :class=\"nh.be('submit')\"\r\n    :size=\"props.size\"\r\n    :type=\"props.type\"\r\n    :simple=\"props.simple\"\r\n    :ghost=\"props.ghost\"\r\n    :dashed=\"props.dashed\"\r\n    :text=\"props.text\"\r\n    :disabled=\"props.disabled\"\r\n    :loading=\"isLoading\"\r\n    :circle=\"props.circle\"\r\n    :loading-icon=\"props.loadingIcon\"\r\n    :loading-effect=\"props.loadingEffect\"\r\n    :icon=\"props.icon\"\r\n    :color=\"props.color\"\r\n    :button-type=\"props.buttonType\"\r\n    :block=\"props.block\"\r\n    :tag=\"props.tag\"\r\n    @click=\"handleSubmit\"\r\n  >\r\n    <slot>\r\n      {{ props.label || locale.submit }}\r\n    </slot>\r\n    <template v-if=\"slots.icon\" #icon>\r\n      <slot name=\"icon\"></slot>\r\n    </template>\r\n    <template v-if=\"slots.loading\" #loading>\r\n      <slot name=\"loading\"></slot>\r\n    </template>\r\n    <button\r\n      v-if=\"isNative\"\r\n      ref=\"submit\"\r\n      type=\"submit\"\r\n      style=\"display: none\"\r\n      @click.stop\r\n    ></button>\r\n  </Button>\r\n</template>\r\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","_createBlock","_unref","Button","_mergeProps","_ctx","_renderSlot","_createTextVNode","_toDisplayString","_createElementBlock"],"mappings":"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"}