'use client' import { AlertDialog } from '@heroui/react' import React, { createContext, useState } from 'react' import type { AlertModalContextType, ShowAlertOptions } from '@/types' import ConsumerModal from '@/components/consumer/ConsumerModal' import Button from '@/components/formElements/Button' import { useMediaQuery } from '@/hooks/useMediaQuery' import { cn } from '@/lib/cn' export const AlertModalContext = createContext(undefined) interface AlertModalProviderProps { children: React.ReactNode variant?: 'default' | 'consumer' } export const AlertModalProvider = ({ children, variant = 'default' }: AlertModalProviderProps) => { const isMobile = useMediaQuery('(max-width: 768px)') const [isVisible, setIsVisible] = useState(false) const [isConfirming, setIsConfirming] = useState(false) const [message, setMessage] = useState('') const [onConfirm, setOnConfirm] = useState<((data?: unknown) => unknown) | undefined>(undefined) const [confirmData, setConfirmData] = useState(undefined) const [dangerAccept, setDangerAccept] = useState(false) const showAlert = (msg: string, confirmCallback?: (data?: unknown) => unknown, data?: unknown, options?: ShowAlertOptions) => { setMessage(msg) setOnConfirm(() => confirmCallback) setConfirmData(data) setDangerAccept(Boolean(options?.dangerAccept)) setIsVisible(true) } const hideAlert = () => { if (isConfirming) return setIsVisible(false) setMessage('') setOnConfirm(undefined) setConfirmData(undefined) setDangerAccept(false) } const confirmAlert = async () => { setIsConfirming(true) try { if (onConfirm) await onConfirm(confirmData) } finally { setIsConfirming(false) setIsVisible(false) setMessage('') setOnConfirm(undefined) setConfirmData(undefined) setDangerAccept(false) } } return ( {children} {variant === 'consumer' ? ( { if (!isOpen) hideAlert() }} onSubmit={confirmAlert} >

{message}

) : ( { if (!isOpen) hideAlert() }} >

{message}

)}
) }