bw-expo-app/utils/alert.ts

45 lines
1.1 KiB
TypeScript

import { Alert as RNAlert, Platform } from 'react-native';
interface AlertButton {
text: string;
onPress?: () => void;
style?: 'default' | 'cancel' | 'destructive';
}
class PlatformAlert {
alert(title: string, message?: string, buttons?: AlertButton[]) {
if (Platform.OS === 'web') {
this.webAlert(title, message, buttons);
} else {
RNAlert.alert(title, message, buttons);
}
}
private webAlert(title: string, message?: string, buttons?: AlertButton[]) {
const fullMessage = message ? `${title}\n\n${message}` : title;
if (!buttons || buttons.length === 0) {
window.alert(fullMessage);
return;
}
if (buttons.length === 1) {
window.alert(fullMessage);
buttons[0].onPress?.();
return;
}
const confirmed = window.confirm(fullMessage);
if (confirmed) {
const confirmButton = buttons.find(btn => btn.style !== 'cancel');
confirmButton?.onPress?.();
} else {
const cancelButton = buttons.find(btn => btn.style === 'cancel');
cancelButton?.onPress?.();
}
}
}
export const Alert = new PlatformAlert();