import { useCallback, useEffect, useState } from 'react'; import Image from 'next/image'; import { Box, Text, Flex, VStack, Textarea, Link, Kbd, Spinner, HStack, } from '@chakra-ui/react'; import buildspaceLogo from '../assets/buildspace-logo.png'; const Home = () => { const [input, setInput] = useState(''); const [finishReason, setFinishReason] = useState(''); const [isGenerating, setIsGenerating] = useState(false); const onChange = (event) => { setInput(event.target.value); }; const generateAction = useCallback(async () => { setIsGenerating(true); const response = await fetch('/api/generate', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ input }), }); const data = await response.json(); const { choice } = data; setIsGenerating(false); setFinishReason(choice.finish_reason); if (choice.finish_reason === 'stop') { console.log('end of the completion!'); } setInput((prevState) => { return prevState + choice.text; }); }, [input]); useEffect(() => { const scratchPadText = localStorage.getItem('scratchpad'); setInput(scratchPadText); }, []); useEffect(() => { const keydownHandler = async (event) => { if ((event.metaKey || event.ctrlKey) && event.code === 'Enter') { event.preventDefault(); await generateAction(); } localStorage.setItem('scratchpad', input); }; window.addEventListener('keydown', keydownHandler); return () => { window.removeEventListener('keydown', keydownHandler); }; }, [input, generateAction]); return ( Scratchpad Write your own song, movie script, or anime in 2 minutes. {isGenerating && ( )} {!isGenerating && finishReason === 'stop' && ( Keep writing to generate more! )}