RSS Git Download  Clone
Raw Blame History 2kB 57 lines
import { Button, IconButton, Tooltip, useMediaQuery } from '@mui/material'
import { Done, Cancel } from '@mui/icons-material'
import { useI18nStore } from '../stores/i18n.store'
import { useCommonStore } from '../stores/common.store'
import P3xrDialog from './P3xrDialog'

export default function ConfirmDialog() {
    const strings = useI18nStore(s => s.strings)
    const { confirmOpen, confirmOptions, resolveConfirm } = useCommonStore()
    const isWide = useMediaQuery('(min-width: 600px)')

    if (!confirmOpen || !confirmOptions) return null

    const isAlert = confirmOptions.disableCancel === true
    const okLabel = isAlert ? strings?.intention?.ok : strings?.intention?.sure
    const cancelLabel = strings?.intention?.cancel

    return (
        <P3xrDialog
            open
            onClose={() => resolveConfirm?.(false)}
            title={confirmOptions.title}
            width="600px"
            actions={
                <>
                    {!isAlert && (
                        isWide ? (
                            <Button variant="contained" color="error" onClick={() => resolveConfirm?.(false)}>
                                <Cancel fontSize="small" /><span>{cancelLabel}</span>
                            </Button>
                        ) : (
                            <Tooltip title={cancelLabel} placement="top">
                                <IconButton color="error" onClick={() => resolveConfirm?.(false)} sx={{ borderRadius: '4px' }}>
                                    <Cancel fontSize="small" />
                                </IconButton>
                            </Tooltip>
                        )
                    )}
                    {isWide ? (
                        <Button variant="contained" color="primary" onClick={() => resolveConfirm?.(true)}>
                            <Done fontSize="small" /><span>{okLabel}</span>
                        </Button>
                    ) : (
                        <Tooltip title={okLabel} placement="top">
                            <IconButton color="primary" onClick={() => resolveConfirm?.(true)} sx={{ borderRadius: '4px' }}>
                                <Done fontSize="small" />
                            </IconButton>
                        </Tooltip>
                    )}
                </>
            }
        >
            <div dangerouslySetInnerHTML={{ __html: confirmOptions.message }} />
        </P3xrDialog>
    )
}