49 lines
979 B
TypeScript
49 lines
979 B
TypeScript
import { useContext, useEffect } from "react";
|
|
import { PromptContext } from "../providers/prompt-provider";
|
|
|
|
type SelectData = {
|
|
label: string;
|
|
value: string;
|
|
};
|
|
|
|
export const useSelectPrompt = (data?: SelectData[]) => {
|
|
const {
|
|
selectData,
|
|
selectionGuide,
|
|
resolve,
|
|
setResolve,
|
|
setSelectData,
|
|
setSelectionGuide,
|
|
} = useContext(PromptContext);
|
|
|
|
const prompt = (message: string) => {
|
|
setSelectionGuide(message);
|
|
return new Promise<{ resolved: boolean; value?: string }>((resolve) => {
|
|
setResolve(() => resolve);
|
|
});
|
|
};
|
|
|
|
const onSubmit = (value: string) => {
|
|
resolve?.({ resolved: true, value });
|
|
setSelectionGuide("");
|
|
};
|
|
|
|
const onCancel = () => {
|
|
resolve?.({ resolved: false });
|
|
setSelectionGuide("");
|
|
};
|
|
|
|
useEffect(() => {
|
|
if (data) setSelectData(data);
|
|
}, [data]);
|
|
|
|
return {
|
|
selectData,
|
|
selectionGuide,
|
|
isOpen: !!selectionGuide,
|
|
prompt,
|
|
onSubmit,
|
|
onCancel,
|
|
};
|
|
};
|