import React from "react"; import { Box, Flex, useBreakpointValue } from "@chakra-ui/react"; import * as Sentry from "@sentry/react"; import ItemsPanel from "./ItemsPanel"; import SearchToolbar, { searchQueryIsEmpty } from "./SearchToolbar"; import SearchPanel from "./SearchPanel"; import { MajorErrorMessage, TestErrorSender, useLocalStorage } from "../util"; /** * ItemsAndSearchPanels manages the shared layout and state for: * - ItemsPanel, which shows the items in the outfit now, and * - SearchPanel, which helps you find new items to add. * * These panels don't share a _lot_ of concerns; they're mainly intertwined by * the fact that they share the SearchToolbar at the top! * * We try to keep the search concerns in the search components, by avoiding * letting any actual _logic_ live at the root here; and instead just * performing some wiring to help them interact with each other via simple * state and refs. */ function ItemsAndSearchPanels({ loading, searchQuery, onChangeSearchQuery, outfitState, outfitSaving, dispatchToOutfit, }) { const scrollContainerRef = React.useRef(); const searchQueryRef = React.useRef(); const firstSearchResultRef = React.useRef(); const hasRoomForSearchFooter = useBreakpointValue({ base: false, md: true }); const [canUseSearchFooter] = useLocalStorage( "DTIFeatureFlagCanUseSearchFooter", false, ); const isShowingSearchFooter = canUseSearchFooter && hasRoomForSearchFooter; return ( {isShowingSearchFooter && } {!isShowingSearchFooter && ( )} {!isShowingSearchFooter && !searchQueryIsEmpty(searchQuery) ? ( ) : ( )} ); } export default ItemsAndSearchPanels;