Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | import { styled, useMediaQuery } from "@mui/material";
import CenteredSpinner from "components/CenteredSpinner/CenteredSpinner";
import ResizeableDrawer from "components/ResizeableDrawer";
import { RpcError } from "grpc-web";
import { SearchUser } from "proto/search_pb";
import { theme } from "theme";
import PreviousNextPagination from "./PreviousNextPagination";
import SearchResultListContent from "./SearchResultListContent";
import { useMapSearchState } from "./state/mapSearchContext";
import { MapViews } from "./utils/constants";
interface MapSearchResultsListProps {
error: RpcError | null;
drawerWidth: number;
hasNextPage?: boolean;
hasPreviousPage?: boolean;
isLoading?: boolean;
mapView: MapViews;
currentRange: string;
onDrawerWidthChange: (width: number) => void;
onLoadPreviousPage: () => void;
onLoadNextPage: () => void;
onSetMapView: (view: MapViews) => void;
onUserCardClick: (userId: number) => void;
totalItems?: number;
users: SearchUser.AsObject[] | undefined;
}
const DrawerContainer = styled("div")(({ theme }) => ({
height: "100%",
width: "100%",
display: "flex",
flexDirection: "column",
}));
const SpinnerWrapper = styled("div")(({ theme }) => ({
paddingTop: theme.spacing(8),
}));
const MapSearchResultsList = ({
error,
drawerWidth,
hasPreviousPage,
hasNextPage,
isLoading,
mapView,
currentRange,
onDrawerWidthChange,
onLoadPreviousPage,
onLoadNextPage,
onSetMapView,
onUserCardClick,
totalItems,
users,
}: MapSearchResultsListProps) => {
const isMobile = useMediaQuery(theme.breakpoints.down("md"));
const {
hasActiveFilters,
search: { bbox, query },
shouldSearchByUserId,
} = useMapSearchState();
const meetsSearchCriteria =
hasActiveFilters ||
bbox !== undefined ||
query !== undefined ||
shouldSearchByUserId;
return (
<DrawerContainer>
<ResizeableDrawer
onDrawerWidthChange={onDrawerWidthChange}
showDragger={!isMobile && mapView !== MapViews.LIST_ONLY}
nonScrollableChildren={
<PreviousNextPagination
hasPreviousPage={hasPreviousPage}
hasNextPage={hasNextPage}
onPreviousClick={onLoadPreviousPage}
onNextClick={onLoadNextPage}
/>
}
>
{isLoading ? (
<SpinnerWrapper>
<CenteredSpinner />
</SpinnerWrapper>
) : (
<SearchResultListContent
error={error}
mapView={mapView}
currentRange={currentRange}
onSetMapView={onSetMapView}
onUserCardClick={onUserCardClick}
showAlert={!isLoading && !meetsSearchCriteria}
showTopSpace={
!isMobile &&
(mapView === MapViews.LIST_ONLY ||
(mapView === MapViews.MAP_AND_LIST &&
drawerWidth > window.innerWidth / 2))
}
totalItems={totalItems}
users={users}
/>
)}
</ResizeableDrawer>
</DrawerContainer>
);
};
export default MapSearchResultsList;
|