Sort the games

This commit is contained in:
Mosh Hamedani 2023-03-03 09:00:14 -08:00
parent d62ca49e21
commit e2941cfba3
4 changed files with 32 additions and 13 deletions

View file

@ -12,6 +12,7 @@ import { Genre } from "./hooks/useGenres";
export interface GameQuery {
genre: Genre | null;
platform: Platform | null;
sortOrder: string;
}
function App() {
@ -39,7 +40,7 @@ function App() {
<GridItem area="main">
<HStack spacing={5} paddingLeft={2} marginBottom={5}>
<PlatformSelector selectedPlatform={gameQuery.platform} onSelectPlatform={(platform) => setGameQuery({ ...gameQuery, platform}) } />
<SortSelector />
<SortSelector sortOrder={gameQuery.sortOrder} onSelectSortOrder={(sortOrder) => setGameQuery({ ...gameQuery, sortOrder })} />
</HStack>
<GameGrid gameQuery={gameQuery} />
</GridItem>

View file

@ -1,22 +1,37 @@
import { Button, Menu, MenuButton, MenuItem, MenuList } from '@chakra-ui/react';
import { BsChevronDown } from 'react-icons/bs';
import { Button, Menu, MenuButton, MenuItem, MenuList } from "@chakra-ui/react";
import { BsChevronDown } from "react-icons/bs";
interface Props {
onSelectSortOrder: (sortOrder: string) => void;
sortOrder: string;
}
const SortSelector = ({ onSelectSortOrder, sortOrder }: Props) => {
const sortOrders = [
{ value: "", label: "Relevance" },
{ value: "-added", label: "Date added" },
{ value: "name", label: "Name" },
{ value: "-released", label: "Release date" },
{ value: "-metacritic", label: "Popularity" },
{ value: "-rating", label: "Average rating" },
];
const currentSortOrder = sortOrders.find(order => order.value === sortOrder);
const SortSelector = () => {
return (
<Menu>
<MenuButton as={Button} rightIcon={<BsChevronDown />}>
Order by: Relevance
Order by: {currentSortOrder?.label || 'Relevance'}
</MenuButton>
<MenuList>
<MenuItem>Relevance</MenuItem>
<MenuItem>Date added</MenuItem>
<MenuItem>Name</MenuItem>
<MenuItem>Release date</MenuItem>
<MenuItem>Popularity</MenuItem>
<MenuItem>Average rating</MenuItem>
{sortOrders.map((order) => (
<MenuItem onClick={() => onSelectSortOrder(order.value)} key={order.value} value={order.value}>
{order.label}
</MenuItem>
))}
</MenuList>
</Menu>
);
}
};
export default SortSelector
export default SortSelector;

View file

@ -23,6 +23,7 @@ const useGames = (gameQuery: GameQuery) =>
params: {
genres: gameQuery.genre?.id,
platforms: gameQuery.platform?.id,
ordering: gameQuery.sortOrder
},
},
[gameQuery]

View file

@ -1,5 +1,7 @@
const getCroppedImageUrl = (url: string) => {
if (!url) return '';
const target = 'media/';
const index = url.indexOf(target) + target.length;
return url.slice(0, index) + 'crop/600/400/' + url.slice(index);