suisuyy
Rename project to xpaintai_zh in package.json and metadata.json; integrate translation support in various components and hooks
69ae4e4 | import React, { useState, useCallback } from 'react'; | |
| import { TFunction } from '../types'; | |
| 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 = (t: TFunction): 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 ?? t('confirm'), | |
| cancelText: options.cancelText ?? t('cancel'), | |
| }); | |
| }, | |
| [t] | |
| ); | |
| const closeConfirmModal = useCallback(() => { | |
| setConfirmModalInfo(prev => ({ ...prev, isOpen: false })); | |
| }, []); | |
| return { confirmModalInfo, requestConfirmation, closeConfirmModal }; | |
| }; | |