tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 10 kB
Source Map (JSON)
{"version":3,"file":"useAction.mjs","sources":["../../../../components/dialog/hooks/useAction.tsx"],"sourcesContent":["import { getCurrentInstance } from 'vue';\nimport { omit, isString, isObject } from 'lodash-es';\n\nimport { useTNodeJSX } from '@tdesign/shared-hooks';\nimport TButton, { ButtonProps } from '../../button';\nimport { PopconfirmConfig, DialogConfig, DrawerConfig } from '../../config-provider';\nimport type { ClassName } from '../../common';\nimport type { TdDialogProps } from '../type';\nimport { getPropertyValFromObj } from '@tdesign/common-js/utils/general';\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 confirmLoading?: boolean;\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 = getPropertyValFromObj(omit(globalConfirmBtnTheme, ['info']), theme) || 'primary';\n let props: ButtonProps = {\n // @ts-ignore\n // TODO: fix type of globalConfirmBtnTheme\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 = (\n button: string | ButtonProps,\n params: {\n defaultButtonProps: ButtonProps;\n className?: ClassName;\n confirmLoading?: boolean;\n },\n ) => {\n const { defaultButtonProps, className, confirmLoading } = params;\n let newOptions = defaultButtonProps;\n if (isString(button)) {\n newOptions.content = button;\n } else if (isObject(button)) {\n newOptions = { ...newOptions, ...button };\n }\n if (confirmLoading !== undefined) {\n newOptions.loading = confirmLoading;\n }\n return <TButton class={className} {...newOptions} />;\n };\n const getConfirmBtn = (options: MixinsConfirmBtn) => {\n const { confirmBtn, className, confirmLoading } = 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} loading={confirmLoading} {...defaultButtonProps} />;\n }\n // 如果属性存在,优先返回属性配置\n if (confirmBtn && ['string', 'object'].includes(typeof confirmBtn)) {\n return getButtonByProps(confirmBtn as string | ButtonProps, {\n defaultButtonProps,\n className,\n confirmLoading,\n });\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, className });\n }\n // 渲染插槽 或 function 类型的 confirmBtn,属性优先级更高\n return renderTNodeJSX('cancelBtn');\n };\n return { getConfirmBtn, getCancelBtn };\n}\n"],"names":["useAction","action","instance","getCurrentInstance","renderTNodeJSX","useTNodeJSX","getDefaultConfirmBtnProps","options","globalConfirm","theme","globalConfirmBtnTheme","defaultTheme","getPropertyValFromObj","omit","props","size","onClick","e","confirmBtnAction","isString","content","isObject","_objectSpread","getDefaultCancelBtnProps","globalCancel","cancelBtnAction","getButtonByProps","button","params","defaultButtonProps","className","confirmLoading","newOptions","loading","_createVNode","TButton","_mergeProps","getConfirmBtn","confirmBtn","slots","console","warn","includes","_typeof","getCancelBtn","cancelBtn"],"mappings":"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"}