'use client'; import chatOperations, { IStory } from 'operations/chatOperations'; import { PropsWithChildren, createContext, useCallback, useContext, useMemo, useState } from 'react'; export interface IGenerateStoryContext { story?: IStory; loading: boolean; } const GenerateStoryContext = createContext({ story: undefined, loading: false }); function GenerateStoryContextProvider({ children }: { children: PropsWithChildren }) { const [loading, setLoading] = useState(false); const [story, setStory] = useState(); const value = useMemo(() => ({ story, loading }), [story, loading]); /* TODO(Benson -> Patricio): Make network call to get images TODO(Benson -> Patricio): Write a helper function in this directory /generate/utils.ts called mergeImages(story: IStory, images: string[]): IStory; */ const getStoryAsync = useCallback(async () => { setLoading(true); const story = await chatOperations.createStoryAsync(); // const images = await imageOperations.getStoryImagesAsync(story); setStory(story); setLoading(false); }, []); return ( <> {typeof children === 'function' ? children(value) : children} ); } export const useGenerateStoryContext = (): IGenerateStoryContext => useContext(GenerateStoryContext); export default GenerateStoryContextProvider;