Files
frontend/src/services/dialogService.ts

56 lines
1.2 KiB
TypeScript
Raw Normal View History

import type { AlertButton, AlertOptions } from 'react-native';
export interface DialogPayload {
title?: string;
message?: string;
actions: AlertButton[];
options?: AlertOptions;
}
type DialogListener = (payload: DialogPayload) => void;
let dialogListener: DialogListener | null = null;
export const bindDialogListener = (listener: DialogListener) => {
dialogListener = listener;
return () => {
if (dialogListener === listener) {
dialogListener = null;
}
};
};
export const showDialog = (payload: DialogPayload) => {
dialogListener?.(payload);
};
export interface ConfirmOptions {
title: string;
message?: string;
confirmText?: string;
cancelText?: string;
destructive?: boolean;
onConfirm?: () => void;
onCancel?: () => void;
}
export const showConfirm = (options: ConfirmOptions) => {
showDialog({
title: options.title,
message: options.message,
actions: [
{
text: options.cancelText ?? '取消',
style: 'cancel',
onPress: options.onCancel,
},
{
text: options.confirmText ?? '确认',
style: options.destructive ? 'destructive' : 'default',
onPress: options.onConfirm,
},
],
options: { cancelable: true },
});
};