import type { HTMLAttributes } from 'vue'
import Modal from './index.vue'
export interface ModalProps {
modelValue?: boolean
title?: string
description?: string
icon?: 'info' | 'success' | 'warning' | 'error'
loading?: boolean
closable?: boolean
maximize?: boolean
maximizable?: boolean
draggable?: boolean
center?: boolean
border?: boolean
alignCenter?: boolean
overlay?: boolean
overlayBlur?: boolean
showConfirmButton?: boolean
showCancelButton?: boolean
confirmButtonText?: string
cancelButtonText?: string
confirmButtonDisabled?: boolean
confirmButtonLoading?: boolean
header?: boolean
footer?: boolean
closeOnClickOverlay?: boolean
closeOnPressEscape?: boolean
class?: HTMLAttributes['class']
headerClass?: HTMLAttributes['class']
contentClass?: HTMLAttributes['class']
footerClass?: HTMLAttributes['class']
}
export interface ModalEmits {
'update:modelValue': [value: boolean]
'open': []
'opened': []
'close': []
'closed': []
'confirm': []
'cancel': []
}
type alertOptions = Pick & {
content: string
onConfirm?: () => any
}
type confirmOptions = Pick & {
content: string
onConfirm?: () => any
onCancel?: () => any
}
export function useFaModal() {
function info(options: alertOptions) {
const container = document.createElement('div')
const app = createApp({
render() {
return h(Modal, Object.assign({
modelValue: true,
icon: 'info',
closable: false,
border: false,
alignCenter: true,
closeOnClickOverlay: false,
contentClass: 'py-0 min-h-auto',
footerClass: 'p-4',
onClosed: () => {
app.unmount()
},
}, options), options.content)
},
})
app.mount(container)
}
function success(options: alertOptions) {
const container = document.createElement('div')
const app = createApp({
render() {
return h(Modal, Object.assign({
modelValue: true,
icon: 'success',
closable: false,
border: false,
alignCenter: true,
closeOnClickOverlay: false,
contentClass: 'py-0 min-h-auto',
footerClass: 'p-4',
onClosed: () => {
app.unmount()
},
}, options), options.content)
},
})
app.mount(container)
}
function warning(options: alertOptions) {
const container = document.createElement('div')
const app = createApp({
render() {
return h(Modal, Object.assign({
modelValue: true,
icon: 'warning',
closable: false,
border: false,
alignCenter: true,
closeOnClickOverlay: false,
contentClass: 'py-0 min-h-auto',
footerClass: 'p-4',
onClosed: () => {
app.unmount()
},
}, options), options.content)
},
})
app.mount(container)
}
function error(options: alertOptions) {
const container = document.createElement('div')
const app = createApp({
render() {
return h(Modal, Object.assign({
modelValue: true,
icon: 'error',
closable: false,
border: false,
alignCenter: true,
closeOnClickOverlay: false,
contentClass: 'py-0 min-h-auto',
footerClass: 'p-4',
onClosed: () => {
app.unmount()
},
}, options), options.content)
},
})
app.mount(container)
}
function confirm(options: confirmOptions) {
const container = document.createElement('div')
const app = createApp({
render() {
return h(Modal, Object.assign({
modelValue: true,
closable: false,
border: false,
alignCenter: true,
closeOnClickOverlay: false,
contentClass: 'py-0 min-h-auto',
footerClass: 'p-4',
showCancelButton: true,
onClosed: () => {
app.unmount()
},
}, options), options.content)
},
})
app.mount(container)
}
return {
info,
success,
warning,
error,
confirm,
}
}