62 lines
1.4 KiB
TypeScript
62 lines
1.4 KiB
TypeScript
import { createContext, useState } from "react";
|
|
|
|
type SelectData = {
|
|
label: string;
|
|
value: string;
|
|
};
|
|
|
|
interface PromptContext {
|
|
message?: string;
|
|
selectData?: SelectData[];
|
|
selectionGuide?: string;
|
|
resolve?: ({
|
|
resolved,
|
|
value,
|
|
}: {
|
|
resolved: boolean;
|
|
value?: string;
|
|
}) => void;
|
|
setMessage: (message: string) => void;
|
|
setSelectData: (selectData: SelectData[]) => void;
|
|
setSelectionGuide: (message: string) => void;
|
|
setResolve: (resolve: () => void) => void;
|
|
}
|
|
|
|
export const PromptContext = createContext<PromptContext>({
|
|
message: "",
|
|
selectData: [],
|
|
selectionGuide: "",
|
|
resolve() {},
|
|
setMessage() {},
|
|
setSelectData() {},
|
|
setSelectionGuide() {},
|
|
setResolve() {},
|
|
});
|
|
|
|
export const PromptProvider = ({ children }: { children: React.ReactNode }) => {
|
|
const [message, setMessage] = useState<string>();
|
|
const [selectData, setSelectData] = useState<SelectData[]>([]);
|
|
const [selectionGuide, setSelectionGuide] = useState<string>();
|
|
const [resolve, setResolve] =
|
|
useState<
|
|
({ resolved, value }: { resolved: boolean; value?: string }) => void
|
|
>();
|
|
|
|
return (
|
|
<PromptContext.Provider
|
|
value={{
|
|
message,
|
|
selectData,
|
|
selectionGuide,
|
|
resolve,
|
|
setMessage,
|
|
setSelectData,
|
|
setSelectionGuide,
|
|
setResolve,
|
|
}}
|
|
>
|
|
{children}
|
|
</PromptContext.Provider>
|
|
);
|
|
};
|