import React from "react"; import { Box, Grid, Icon, IconButton, Input, InputGroup, InputLeftElement, InputRightElement, useToast, } from "@chakra-ui/core"; import { Helmet } from "react-helmet"; import ItemsPanel from "./ItemsPanel"; import OutfitPreview from "./OutfitPreview"; import SearchPanel from "./SearchPanel"; import useOutfitState from "./useOutfitState.js"; function WardrobePage() { const { loading, error, outfitState, dispatchToOutfit } = useOutfitState(); const [searchQuery, setSearchQuery] = React.useState(""); const toast = useToast(); const searchContainerRef = React.useRef(); const searchQueryRef = React.useRef(); const firstSearchResultRef = React.useRef(); React.useEffect(() => { if (error) { console.log(error); toast({ title: "We couldn't load this outfit 😖", description: "Please reload the page to try again. Sorry!", status: "error", isClosable: true, duration: 999999999, }); } }, [error, toast]); React.useEffect(() => { if (searchContainerRef.current) { searchContainerRef.current.scrollTop = 0; } }, [searchQuery]); return ( <> {outfitState.name || "Untitled outfit"} | Dress to Impress { if (firstSearchResultRef.current) { firstSearchResultRef.current.focus(); e.preventDefault(); } }} /> {searchQuery ? ( { if (searchQueryRef.current) { searchQueryRef.current.focus(); e.preventDefault(); } }} /> ) : ( )} ); } function SearchToolbar({ query, queryRef, onChange, onMoveFocusDownToResults, }) { return ( onChange(e.target.value)} onKeyDown={(e) => { if (e.key === "Escape") { onChange(""); e.target.blur(); } else if (e.key === "ArrowDown") { onMoveFocusDownToResults(e); } }} /> {query && ( onChange("")} // Big style hacks here! height="calc(100% - 2px)" marginRight="2px" /> )} ); } export default WardrobePage;