34 lines
845 B
TypeScript
34 lines
845 B
TypeScript
import type { ModalFuncProps } from 'antd'
|
|
|
|
type ConfirmApi = {
|
|
confirm: (props: ModalFuncProps) => unknown
|
|
}
|
|
|
|
/**
|
|
* AntD v5 的 modal.confirm 返回控制对象而不是 Promise,直接 await 会立刻得到真值。
|
|
* 这里包一层 Promise,确保「取消」时不会继续执行危险操作。
|
|
*/
|
|
export function confirmModal(modal: ConfirmApi, props: ModalFuncProps): Promise<boolean> {
|
|
return new Promise(resolve => {
|
|
let settled = false
|
|
const finish = (value: boolean) => {
|
|
if (settled) return
|
|
settled = true
|
|
resolve(value)
|
|
}
|
|
|
|
modal.confirm({
|
|
...props,
|
|
onOk: async () => {
|
|
finish(true)
|
|
await props.onOk?.()
|
|
},
|
|
onCancel: (...args) => {
|
|
finish(false)
|
|
props.onCancel?.(...args)
|
|
},
|
|
afterClose: () => finish(false),
|
|
})
|
|
})
|
|
}
|