UNPKG

vexip-ui

Version:

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

1 lines 14.8 kB
{"version":3,"file":"confirm.vue2.cjs","sources":["../../../components/confirm/confirm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Modal } from '@/components/modal'\nimport { Renderer } from '@/components/renderer'\n\nimport { nextTick, onMounted, reactive, ref, toRef } from 'vue'\n\nimport { useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { isFunction, isPromise } from '@vexip-ui/utils'\nimport { confirmProps } from './props'\n\nimport type { ConfirmButtonType, ConfirmOptions, ConfirmRenderFn, ConfirmState } from './symbol'\n\nconst positionValidator = (value: string | number) => {\n return value === 'auto' || !Number.isNaN(parseFloat(value as string))\n}\nconst positionProp = {\n default: 'auto',\n validator: positionValidator,\n}\n\nconst confirmButtonTypes = Object.freeze<ConfirmButtonType[]>([\n 'default',\n 'primary',\n 'info',\n 'success',\n 'warning',\n 'error',\n])\n\ndefineOptions({ name: 'Confirm' })\n\nconst _props = defineProps(confirmProps)\nconst props = useProps('confirm', _props, {\n locale: null,\n width: {\n default: 420,\n validator: positionValidator,\n },\n height: positionProp,\n top: positionProp,\n left: positionProp,\n right: positionProp,\n bottom: positionProp,\n maskClose: false,\n confirmType: {\n default: 'primary',\n validator: value => confirmButtonTypes.includes(value),\n },\n cancelType: {\n default: 'default',\n validator: value => confirmButtonTypes.includes(value),\n },\n confirmText: null,\n cancelText: null,\n icon: {\n isFunc: true,\n default: false,\n },\n className: null,\n style: null,\n renderer: {\n default: null,\n isFunc: true,\n static: true,\n },\n iconProps: () => ({}),\n closable: false,\n parseHtml: false,\n contentAlign: 'left',\n actionsAlign: 'right',\n cancelable: true,\n xOffset: 0,\n yOffset: 0,\n})\n\nconst nh = useNameHelper('confirm')\nconst icons = useIcons()\nconst locale = useLocale('confirm', toRef(props, 'locale'))\n\nconst commonProps = [\n 'className',\n 'style',\n 'icon',\n 'iconProps',\n 'maskClose',\n 'confirmType',\n 'cancelType',\n 'confirmText',\n 'cancelText',\n 'parseHtml',\n 'closable',\n 'contentAlign',\n 'actionsAlign',\n 'cancelable',\n 'width',\n 'height',\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'xOffset',\n 'yOffset',\n] as const\n\nconst state = reactive<ConfirmState>({\n ...commonProps.reduce((prev, current) => ((prev[current] = props[current]), prev), {} as any),\n visible: false,\n loading: false,\n title: '',\n content: '',\n raw: {},\n})\n\nconst rendererR = ref<ConfirmRenderFn | null>(props.renderer)\n\nlet beforeConfirmR: (() => unknown) | null = null\n\nlet onConfirm: (() => void) | null = null\nlet onCancel: (() => void) | null = null\n\nconst mountedPromise = new Promise<void>(resolve => {\n onMounted(() => {\n nextTick(resolve)\n })\n})\n\ndefineExpose({ state, openConfirm, closeConfirm: handleCancel, handleReset })\n\nasync function openConfirm(options: ConfirmOptions) {\n await mountedPromise\n\n return await new Promise<boolean>(resolve => {\n for (const prop of commonProps) {\n ;(state as any)[prop] = options[prop] ?? props[prop]\n }\n\n state.title = options.title ?? ''\n state.content = options.content ?? ''\n\n state.raw = options\n\n rendererR.value = isFunction(options.renderer) ? options.renderer : props.renderer\n beforeConfirmR = isFunction(options.onBeforeConfirm) ? options.onBeforeConfirm : null\n\n if (isFunction(rendererR.value)) {\n const render = rendererR.value\n\n rendererR.value = () => render(state, handleConfirm, handleCancel)\n }\n\n state.visible = true\n\n let resolved = false\n\n onConfirm = () => {\n !resolved && resolve(true)\n resolved = true\n beforeConfirmR = null\n }\n onCancel = () => {\n !resolved && resolve(false)\n resolved = true\n beforeConfirmR = null\n }\n })\n}\n\nasync function handleConfirm() {\n state.loading = true\n\n if (isFunction(beforeConfirmR)) {\n let result = beforeConfirmR()\n\n if (isPromise(result)) {\n result = await result\n }\n\n if (result === false) {\n state.loading = false\n\n return\n }\n }\n\n state.visible = false\n state.loading = false\n\n if (isFunction(onConfirm)) {\n onConfirm()\n onConfirm = null\n }\n}\n\nfunction handleCancel() {\n state.visible = false\n\n if (isFunction(onCancel)) {\n onCancel()\n onCancel = null\n }\n}\n\nfunction handleReset() {\n for (const prop of commonProps) {\n ;(state as any)[prop] = props[prop]\n }\n\n state.visible = false\n state.loading = false\n state.title = ''\n state.content = ''\n\n state.raw = {}\n\n rendererR.value = props.renderer\n}\n</script>\n\n<template>\n <!-- eslint-disable vue/no-v-html -->\n <div :class=\"[nh.b(), nh.bs('vars')]\">\n <Modal\n no-footer\n :auto-remove=\"false\"\n :transfer=\"false\"\n :closable=\"false\"\n :active=\"state.visible\"\n :modal-class=\"state.className\"\n :modal-style=\"state.style\"\n :width=\"state.width\"\n :height=\"state.height\"\n :top=\"state.top\"\n :left=\"state.left\"\n :right=\"state.right\"\n :bottom=\"state.bottom\"\n :x-offset=\"state.xOffset\"\n :y-offset=\"state.yOffset\"\n :mask-close=\"state.maskClose\"\n @hide=\"handleReset\"\n @close=\"handleCancel\"\n >\n <Renderer v-if=\"isFunction(rendererR)\" :renderer=\"rendererR\"></Renderer>\n <template v-else>\n <div v-if=\"state.title\" :class=\"nh.be('header')\">\n <div :class=\"nh.be('title')\">\n <Renderer v-if=\"typeof state.title === 'function'\" :renderer=\"state.title\"></Renderer>\n <template v-else>\n {{ state.title }}\n </template>\n </div>\n <button\n v-if=\"state.closable\"\n type=\"button\"\n :class=\"nh.be('close')\"\n @mousedown.stop\n @click=\"handleCancel\"\n >\n <slot name=\"close\">\n <Icon\n v-bind=\"icons.close\"\n :scale=\"+(icons.close.scale || 1) * 1.2\"\n label=\"close\"\n ></Icon>\n </slot>\n </button>\n </div>\n <div\n :class=\"[\n nh.be('body'),\n nh.bem('body', state.contentAlign),\n !state.title && nh.bem('body', 'no-title'),\n ]\"\n >\n <div v-if=\"state.icon !== false\" :class=\"nh.be('icon')\">\n <Icon\n v-if=\"typeof state.icon !== 'boolean'\"\n v-bind=\"state.iconProps\"\n :icon=\"state.icon\"\n ></Icon>\n <Icon\n v-else\n :scale=\"2.2\"\n v-bind=\"{\n ...(state.cancelable ? icons.question : icons.warning),\n ...state.iconProps,\n }\"\n :icon=\"(state.cancelable ? icons.question : icons.warning).icon\"\n ></Icon>\n </div>\n <Renderer v-if=\"typeof state.content === 'function'\" :renderer=\"state.content\"></Renderer>\n <template v-else>\n <div v-if=\"state.parseHtml\" :class=\"nh.be('content')\" v-html=\"state.content\"></div>\n <div v-else :class=\"nh.be('content')\">\n {{ state.content }}\n </div>\n </template>\n </div>\n <div :class=\"[nh.be('footer'), nh.bem('footer', state.actionsAlign)]\">\n <Button\n v-if=\"state.cancelable\"\n :class=\"[nh.be('button'), nh.bem('button', 'cancel')]\"\n inherit\n no-pulse\n :type=\"state.cancelType\"\n @click=\"handleCancel\"\n >\n {{ state.cancelText || locale.cancel }}\n </Button>\n <Button\n :class=\"[nh.be('button'), nh.bem('button', 'confirm')]\"\n inherit\n no-pulse\n :type=\"state.confirmType\"\n :loading=\"state.loading\"\n @click=\"handleConfirm\"\n >\n {{ state.confirmText || locale.confirm }}\n </Button>\n </div>\n </template>\n </Modal>\n </div>\n</template>\n"],"names":["positionValidator","value","positionProp","confirmButtonTypes","_props","__props","props","useProps","nh","useNameHelper","icons","useIcons","locale","useLocale","toRef","commonProps","state","reactive","prev","current","rendererR","ref","beforeConfirmR","onConfirm","onCancel","mountedPromise","resolve","onMounted","nextTick","__expose","openConfirm","handleCancel","handleReset","options","prop","isFunction","render","handleConfirm","resolved","result","isPromise","_createElementBlock","_unref","_createVNode","Modal","_createBlock","Renderer","_Fragment","_normalizeClass","_createElementVNode","_createTextVNode","_toDisplayString","_renderSlot","_ctx","Icon","_mergeProps","_openBlock","Button"],"mappings":"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"}