Download hooks/useConfirmModal.ts from im1111/xpaintdev: direct link, hf CLI and curl.
- Browser
- Download file 1.89 kB
-
https://huggingface.co/spaces/im1111/xpaintdev/resolve/main/hooks/useConfirmModal.ts
- Command line
-
hf download hf://spaces/im1111/xpaintdev/hooks/useConfirmModal.ts
-
curl -L -o useConfirmModal.ts https://huggingface.co/spaces/im1111/xpaintdev/resolve/main/hooks/useConfirmModal.ts
1.89 kB
| import React, { useState, useCallback } from 'react'; | |
| export interface ConfirmModalInfo { | |
| isOpen: boolean; | |
| title: string; | |
| message: string | React.ReactNode; | |
| onConfirmAction: () => void; | |
| isDestructive?: boolean; | |
| confirmText?: string; | |
| cancelText?: string; | |
| } | |
| const initialConfirmModalState: ConfirmModalInfo = { | |
| isOpen: false, | |
| title: '', | |
| message: '', | |
| onConfirmAction: () => {}, | |
| isDestructive: false, | |
| confirmText: 'Confirm', | |
| cancelText: 'Cancel', | |
| }; | |
| export interface ConfirmModalHook { | |
| confirmModalInfo: ConfirmModalInfo; | |
| requestConfirmation: ( | |
| title: string, | |
| message: string | React.ReactNode, | |
| onConfirm: () => void, | |
| options?: { | |
| isDestructive?: boolean; | |
| confirmText?: string; | |
| cancelText?: string; | |
| } | |
| ) => void; | |
| closeConfirmModal: () => void; | |
| } | |
| export const useConfirmModal = (): ConfirmModalHook => { | |
| const [confirmModalInfo, setConfirmModalInfo] = useState<ConfirmModalInfo>(initialConfirmModalState); | |
| const requestConfirmation = useCallback( | |
| ( | |
| title: string, | |
| message: string | React.ReactNode, | |
| onConfirm: () => void, | |
| options: { | |
| isDestructive?: boolean; | |
| confirmText?: string; | |
| cancelText?: string; | |
| } = {} | |
| ) => { | |
| setConfirmModalInfo({ | |
| isOpen: true, | |
| title, | |
| message, | |
| onConfirmAction: () => { | |
| onConfirm(); | |
| setConfirmModalInfo(prev => ({ ...prev, isOpen: false })); // Close modal after action | |
| }, | |
| isDestructive: options.isDestructive ?? false, | |
| confirmText: options.confirmText ?? 'Confirm', | |
| cancelText: options.cancelText ?? 'Cancel', | |
| }); | |
| }, | |
| [] | |
| ); | |
| const closeConfirmModal = useCallback(() => { | |
| setConfirmModalInfo(prev => ({ ...prev, isOpen: false })); | |
| }, []); | |
| return { confirmModalInfo, requestConfirmation, closeConfirmModal }; | |
| }; | |