23 lines
1015 B
TypeScript
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); },
|
|
}));
|