Spaces:
Configuration error
Configuration error
| import React, { FormEvent, useRef, useState } from 'react' | |
| import { useClickAway } from 'react-use' | |
| import { useRecoilState, useRecoilValue } from 'recoil' | |
| import emitter, { EVENT_PROMPT } from '../../event' | |
| import { appState, isInpaintingState, propmtState } from '../../store/Atoms' | |
| import Button from '../shared/Button' | |
| import TextInput from '../shared/Input' | |
| // TODO: show progress in input | |
| const PromptInput = () => { | |
| const [app, setAppState] = useRecoilState(appState) | |
| const [prompt, setPrompt] = useRecoilState(propmtState) | |
| const isInpainting = useRecoilValue(isInpaintingState) | |
| const ref = useRef(null) | |
| const handleOnInput = (evt: FormEvent<HTMLInputElement>) => { | |
| evt.preventDefault() | |
| evt.stopPropagation() | |
| const target = evt.target as HTMLInputElement | |
| setPrompt(target.value) | |
| } | |
| const handleRepaintClick = () => { | |
| if (prompt.length !== 0 && !app.isInpainting) { | |
| emitter.emit(EVENT_PROMPT) | |
| } | |
| } | |
| useClickAway<MouseEvent>(ref, () => { | |
| if (ref?.current) { | |
| const input = ref.current as HTMLInputElement | |
| input.blur() | |
| } | |
| }) | |
| const onKeyUp = (e: React.KeyboardEvent) => { | |
| if (e.key === 'Enter' && !isInpainting) { | |
| handleRepaintClick() | |
| } | |
| } | |
| return ( | |
| <div className="prompt-wrapper"> | |
| <TextInput | |
| ref={ref} | |
| value={prompt} | |
| onInput={handleOnInput} | |
| onKeyUp={onKeyUp} | |
| placeholder="I want to repaint of..." | |
| /> | |
| <Button | |
| border | |
| onClick={handleRepaintClick} | |
| disabled={prompt.length === 0 || app.isInpainting} | |
| > | |
| Dream | |
| </Button> | |
| </div> | |
| ) | |
| } | |
| export default PromptInput | |