UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 8.79 kB
{"version":3,"file":"hooks.mjs","sources":["../../src/dialog/hooks.tsx"],"sourcesContent":["import { getCurrentInstance } from 'vue';\nimport isString from 'lodash/isString';\nimport isObject from 'lodash/isObject';\nimport omit from 'lodash/omit';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport TButton, { ButtonProps } from '../button';\nimport { PopconfirmConfig, DialogConfig, DrawerConfig } from '../config-provider';\nimport type { ClassName } from '../common';\nimport type { TdDialogProps } from './type';\n\nexport interface MixinsConfirmBtn {\n theme?: MixinsThemeType;\n className?: ClassName;\n confirmBtn: TdDialogProps['confirmBtn'];\n globalConfirm: PopconfirmConfig['confirm'] | DrawerConfig['confirm'] | DialogConfig['confirm'];\n globalConfirmBtnTheme?: PopconfirmConfig['confirmBtnTheme'] | DialogConfig['confirmBtnTheme'];\n size?: ButtonProps['size'];\n}\n\nexport interface MixinsCancelBtn {\n className?: ClassName;\n cancelBtn: TdDialogProps['cancelBtn'];\n globalCancel: PopconfirmConfig['cancel'] | DrawerConfig['cancel'] | DialogConfig['cancel'];\n size?: ButtonProps['size'];\n}\n\nexport type MixinsThemeType = keyof (PopconfirmConfig['confirmBtnTheme'] & DialogConfig['confirmBtnTheme']);\n\nexport interface BtnAction {\n confirmBtnAction: (e: MouseEvent) => void;\n cancelBtnAction: (e: MouseEvent) => void;\n}\n\nexport function useAction(action: BtnAction) {\n const instance = getCurrentInstance();\n const renderTNodeJSX = useTNodeJSX();\n // 全局配置属性综合\n const getDefaultConfirmBtnProps = (options: MixinsConfirmBtn): ButtonProps => {\n const { globalConfirm, theme, globalConfirmBtnTheme } = options;\n const defaultTheme = omit(globalConfirmBtnTheme, ['info'])?.[theme] || 'primary';\n let props: ButtonProps = {\n theme: defaultTheme,\n size: options.size,\n onClick: (e) => {\n action.confirmBtnAction(e);\n },\n };\n if (isString(globalConfirm)) {\n props.content = globalConfirm;\n } else if (isObject(globalConfirm)) {\n props = { ...props, ...globalConfirm };\n }\n return props;\n };\n // 全局配置属性综合\n const getDefaultCancelBtnProps = (options: MixinsCancelBtn): ButtonProps => {\n const { globalCancel } = options;\n let props: ButtonProps = {\n theme: 'default',\n size: options.size,\n onClick: (e) => {\n action.cancelBtnAction(e);\n },\n };\n if (isString(globalCancel)) {\n props.content = globalCancel;\n } else if (isObject(globalCancel)) {\n props = { ...props, ...globalCancel };\n }\n return props;\n };\n const getButtonByProps = (button: string | ButtonProps, defaultButton: ButtonProps, className?: ClassName) => {\n let newOptions = defaultButton;\n if (isString(button)) {\n newOptions.content = button;\n } else if (isObject(button)) {\n newOptions = { ...newOptions, ...button };\n }\n return <TButton class={className} {...newOptions} />;\n };\n const getConfirmBtn = (options: MixinsConfirmBtn) => {\n const { confirmBtn, className } = options;\n if (confirmBtn === null) return null;\n if (confirmBtn && instance.slots.confirmBtn) {\n console.warn('Both $props.confirmBtn and $scopedSlots.confirmBtn exist, $props.confirmBtn is preferred.');\n }\n const defaultButtonProps = getDefaultConfirmBtnProps(options);\n // 属性和插槽都不存在,就返回全局默认配置\n if (!confirmBtn && !instance.slots.confirmBtn) {\n return <TButton class={className} {...defaultButtonProps} />;\n }\n // 如果属性存在,优先返回属性配置\n if (confirmBtn && ['string', 'object'].includes(typeof confirmBtn)) {\n return getButtonByProps(confirmBtn as string | ButtonProps, defaultButtonProps, className);\n }\n // 渲染插槽 或 function 类型的 confirmBtn,属性优先级更高\n return renderTNodeJSX('confirmBtn');\n };\n const getCancelBtn = (options: MixinsCancelBtn) => {\n const { cancelBtn, className } = options;\n if (cancelBtn === null) return null;\n if (cancelBtn && instance.slots.cancelBtn) {\n console.warn('Both $props.cancelBtn and $scopedSlots.cancelBtn exist, $props.cancelBtn is preferred.');\n }\n const defaultButtonProps: ButtonProps = getDefaultCancelBtnProps(options);\n // 属性和插槽都不存在,就返回全局默认配置\n if (!cancelBtn && !instance.slots.cancelBtn) {\n return <TButton class={className} {...defaultButtonProps} />;\n }\n // 如果属性存在,优先返回属性配置\n if (cancelBtn && ['string', 'object'].includes(typeof cancelBtn)) {\n return getButtonByProps(cancelBtn as string | ButtonProps, defaultButtonProps);\n }\n // 渲染插槽 或 function 类型的 confirmBtn,属性优先级更高\n return renderTNodeJSX('cancelBtn');\n };\n return { getConfirmBtn, getCancelBtn };\n}\n\nexport function useSameTarget(handleClick?: (e: MouseEvent) => void) {\n // 判断 click 事件的起点和落点所在元素是否一致\n let MOUSEDOWN_TARGET = false;\n let MOUSEUP_TARGET = false;\n\n const onClick = (e: MouseEvent) => {\n if (MOUSEDOWN_TARGET && MOUSEUP_TARGET) {\n handleClick(e);\n }\n MOUSEDOWN_TARGET = false;\n MOUSEUP_TARGET = false;\n };\n\n const onMousedown = (e: MouseEvent) => {\n MOUSEDOWN_TARGET = e.target === e.currentTarget;\n };\n const onMouseup = (e: MouseEvent) => {\n MOUSEUP_TARGET = e.target === e.currentTarget;\n };\n\n return { onClick, onMousedown, onMouseup };\n}\n"],"names":["theme","onClick","action","isString","isObject","_createVNode","TButton","_mergeProps","console","getConfirmBtn","getCancelBtn","MOUSEDOWN_TARGET","MOUSEUP_TARGET","onMousedown","onMouseup"],"mappings":"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"}