import { Ionicons } from '@expo/vector-icons'; import { useState } from 'react'; export interface DialogConfig { title: string; message?: string; confirmText?: string; cancelText?: string; destructive?: boolean; icon?: keyof typeof Ionicons.glyphMap; iconColor?: string; } export interface ActionSheetConfig { title?: string; subtitle?: string; cancelText?: string; } export interface ActionSheetOption { id: string; title: string; subtitle?: string; icon?: keyof typeof Ionicons.glyphMap; iconColor?: string; destructive?: boolean; onPress: () => void; } export function useDialog() { // 确认弹窗状态 const [confirmDialog, setConfirmDialog] = useState<{ visible: boolean; config: DialogConfig; onConfirm: () => void; }>({ visible: false, config: { title: '' }, onConfirm: () => {}, }); // ActionSheet状态 const [actionSheet, setActionSheet] = useState<{ visible: boolean; config: ActionSheetConfig; options: ActionSheetOption[]; }>({ visible: false, config: {}, options: [], }); // 显示确认弹窗 const showConfirm = (config: DialogConfig, onConfirm: () => void) => { setConfirmDialog({ visible: true, config, onConfirm, }); }; // 显示ActionSheet const showActionSheet = (config: ActionSheetConfig, options: ActionSheetOption[]) => { setActionSheet({ visible: true, config, options, }); }; // 关闭确认弹窗 const hideConfirm = () => { setConfirmDialog(prev => ({ ...prev, visible: false })); }; // 关闭ActionSheet const hideActionSheet = () => { setActionSheet(prev => ({ ...prev, visible: false })); }; return { // 确认弹窗 confirmDialog, showConfirm, hideConfirm, // ActionSheet actionSheet, showActionSheet, hideActionSheet, }; }