Files
MyNote/apps/desktop/src/renderer/features/dialog/dialog-store.ts
T

23 lines
1015 B
TypeScript

import { create } from 'zustand';
type Mode = 'input' | 'confirm';
interface DialogState {
open: boolean;
mode: Mode;
title: string;
message: string;
placeholder: string;
resolve: ((value: string | null) => void) | null;
showInput: (title: string, placeholder?: string) => Promise<string | null>;
showConfirm: (title: string, message: string) => Promise<boolean>;
close: (value: string | null) => void;
}
export const useDialog = create<DialogState>((set, get) => ({
open: false, mode: 'input', title: '', message: '', placeholder: '', resolve: null,
showInput: (title, placeholder = '') => new Promise<string | null>((resolve) => { set({ open: true, mode: 'input', title, placeholder, resolve }); }),
showConfirm: (title, message) => new Promise<boolean>((resolve) => { set({ open: true, mode: 'confirm', title, message, resolve: ((v: string | null) => resolve(v === 'yes')) }); }),
close: (value) => { const r = get().resolve; set({ open: false, resolve: null }); r?.(value); },
}));