UNPKG

vexip-ui

Version:

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

1 lines 15.2 kB
{"version":3,"file":"confirm.vue2.mjs","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 onConfirm = () => {\n resolve(true)\n beforeConfirmR = null\n }\n onCancel = () => {\n resolve(false)\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 >\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","useProps","__props","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","result","isPromise","_createElementBlock","_unref","_createVNode","Modal","_createBlock","Renderer","_Fragment","_normalizeClass","_createElementVNode","_createTextVNode","_toDisplayString","_renderSlot","_ctx","Icon","_mergeProps","_openBlock","Button"],"mappings":"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"}