mirror of
https://github.com/router-for-me/Cli-Proxy-API-Management-Center.git
synced 2026-02-18 18:50:49 +08:00
feat(ui): implement global ConfirmationModal to replace native window.confirm
This commit is contained in:
@@ -8,15 +8,38 @@ import type { Notification, NotificationType } from '@/types';
|
||||
import { generateId } from '@/utils/helpers';
|
||||
import { NOTIFICATION_DURATION_MS } from '@/utils/constants';
|
||||
|
||||
interface ConfirmationOptions {
|
||||
title?: string;
|
||||
message: string;
|
||||
confirmText?: string;
|
||||
cancelText?: string;
|
||||
variant?: 'danger' | 'primary' | 'secondary';
|
||||
onConfirm: () => void | Promise<void>;
|
||||
onCancel?: () => void;
|
||||
}
|
||||
|
||||
interface NotificationState {
|
||||
notifications: Notification[];
|
||||
confirmation: {
|
||||
isOpen: boolean;
|
||||
isLoading: boolean;
|
||||
options: ConfirmationOptions | null;
|
||||
};
|
||||
showNotification: (message: string, type?: NotificationType, duration?: number) => void;
|
||||
removeNotification: (id: string) => void;
|
||||
clearAll: () => void;
|
||||
showConfirmation: (options: ConfirmationOptions) => void;
|
||||
hideConfirmation: () => void;
|
||||
setConfirmationLoading: (loading: boolean) => void;
|
||||
}
|
||||
|
||||
export const useNotificationStore = create<NotificationState>((set) => ({
|
||||
notifications: [],
|
||||
confirmation: {
|
||||
isOpen: false,
|
||||
isLoading: false,
|
||||
options: null
|
||||
},
|
||||
|
||||
showNotification: (message, type = 'info', duration = NOTIFICATION_DURATION_MS) => {
|
||||
const id = generateId();
|
||||
@@ -49,5 +72,34 @@ export const useNotificationStore = create<NotificationState>((set) => ({
|
||||
|
||||
clearAll: () => {
|
||||
set({ notifications: [] });
|
||||
},
|
||||
|
||||
showConfirmation: (options) => {
|
||||
set({
|
||||
confirmation: {
|
||||
isOpen: true,
|
||||
isLoading: false,
|
||||
options
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
hideConfirmation: () => {
|
||||
set((state) => ({
|
||||
confirmation: {
|
||||
...state.confirmation,
|
||||
isOpen: false,
|
||||
options: null // Cleanup
|
||||
}
|
||||
}));
|
||||
},
|
||||
|
||||
setConfirmationLoading: (loading) => {
|
||||
set((state) => ({
|
||||
confirmation: {
|
||||
...state.confirmation,
|
||||
isLoading: loading
|
||||
}
|
||||
}));
|
||||
}
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user