feat: sorting on explore view (#220)
* chore: add orderBy params on query * feat: add sorting on explore view
This commit is contained in:
parent
361855946a
commit
c4ced2ff93
|
|
@ -1,9 +1,15 @@
|
||||||
query lastNFAsPaginated($pageSize: Int, $skip: Int, $searchValue: String) {
|
query lastNFAsPaginated(
|
||||||
|
$pageSize: Int
|
||||||
|
$skip: Int
|
||||||
|
$orderBy: Token_orderBy
|
||||||
|
$orderDirection: OrderDirection
|
||||||
|
$searchValue: String
|
||||||
|
) {
|
||||||
tokens(
|
tokens(
|
||||||
first: $pageSize
|
first: $pageSize
|
||||||
skip: $skip
|
skip: $skip
|
||||||
orderDirection: desc
|
orderDirection: $orderDirection
|
||||||
orderBy: tokenId
|
orderBy: $orderBy
|
||||||
where: { name_contains_nocase: $searchValue }
|
where: { name_contains_nocase: $searchValue }
|
||||||
) {
|
) {
|
||||||
id
|
id
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ const client = new ApolloClient({
|
||||||
Query: {
|
Query: {
|
||||||
fields: {
|
fields: {
|
||||||
tokens: {
|
tokens: {
|
||||||
keyArgs: ['where'],
|
keyArgs: ['where', 'orderBy', 'orderDirection'],
|
||||||
merge: mergeByKey('id'),
|
merge: mergeByKey('id'),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,15 @@ const LoadingSkeletons: React.FC = () => (
|
||||||
);
|
);
|
||||||
|
|
||||||
export const NFAListFragment: React.FC = () => {
|
export const NFAListFragment: React.FC = () => {
|
||||||
const { endReached, pageNumber, search, setEndReached, setPageNumber } =
|
const {
|
||||||
Explore.useContext();
|
endReached,
|
||||||
|
orderBy,
|
||||||
|
orderDirection,
|
||||||
|
pageNumber,
|
||||||
|
search,
|
||||||
|
setEndReached,
|
||||||
|
setPageNumber,
|
||||||
|
} = Explore.useContext();
|
||||||
|
|
||||||
const {
|
const {
|
||||||
data: { tokens } = { tokens: [] },
|
data: { tokens } = { tokens: [] },
|
||||||
|
|
@ -31,6 +38,8 @@ export const NFAListFragment: React.FC = () => {
|
||||||
variables: {
|
variables: {
|
||||||
pageSize,
|
pageSize,
|
||||||
searchValue: search,
|
searchValue: search,
|
||||||
|
orderBy,
|
||||||
|
orderDirection,
|
||||||
skip: pageNumber * pageSize, //skip is for the pagination
|
skip: pageNumber * pageSize, //skip is for the pagination
|
||||||
},
|
},
|
||||||
onCompleted: (data) => {
|
onCompleted: (data) => {
|
||||||
|
|
|
||||||
|
|
@ -7,15 +7,50 @@ import { Explore } from '../explore.context';
|
||||||
import { ResultsContainer, ResultsNumber, ResultsText } from './results.styles';
|
import { ResultsContainer, ResultsNumber, ResultsText } from './results.styles';
|
||||||
|
|
||||||
const orderResults: DropdownItem[] = [
|
const orderResults: DropdownItem[] = [
|
||||||
{ value: 'a-z', label: 'Sort A-Z' },
|
{ value: 'newest', label: 'Newest' },
|
||||||
{ value: 'z-a', label: 'Sort Z-A' },
|
{ value: 'oldest', label: 'Oldest' },
|
||||||
|
{ value: 'a-z', label: 'Name A-Z' },
|
||||||
|
{ value: 'z-a', label: 'Name Z-A' },
|
||||||
];
|
];
|
||||||
|
|
||||||
export const NFASearchFragment: React.FC = () => {
|
export const NFASearchFragment: React.FC = () => {
|
||||||
const { setSearch } = Explore.useContext();
|
const {
|
||||||
|
setEndReached,
|
||||||
|
setOrderBy,
|
||||||
|
setOrderDirection,
|
||||||
|
setSearch,
|
||||||
|
setPageNumber,
|
||||||
|
} = Explore.useContext();
|
||||||
const [selectedValue, setSelectedValue] = useState<DropdownItem>(
|
const [selectedValue, setSelectedValue] = useState<DropdownItem>(
|
||||||
orderResults[0]
|
orderResults[0]
|
||||||
); //TODO replace for context
|
);
|
||||||
|
|
||||||
|
const handleSortChange = (item: DropdownItem): void => {
|
||||||
|
setSelectedValue(item);
|
||||||
|
setPageNumber(0);
|
||||||
|
setEndReached(false);
|
||||||
|
|
||||||
|
switch (item.value) {
|
||||||
|
case 'newest':
|
||||||
|
setOrderBy('tokenId');
|
||||||
|
setOrderDirection('desc');
|
||||||
|
break;
|
||||||
|
case 'oldest':
|
||||||
|
setOrderBy('tokenId');
|
||||||
|
setOrderDirection('asc');
|
||||||
|
break;
|
||||||
|
case 'a-z':
|
||||||
|
setOrderBy('name');
|
||||||
|
setOrderDirection('asc');
|
||||||
|
break;
|
||||||
|
case 'z-a':
|
||||||
|
setOrderBy('name');
|
||||||
|
setOrderDirection('desc');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const handleSearch = useDebounce(
|
const handleSearch = useDebounce(
|
||||||
(searchValue: string) => setSearch(searchValue),
|
(searchValue: string) => setSearch(searchValue),
|
||||||
|
|
@ -42,7 +77,7 @@ export const NFASearchFragment: React.FC = () => {
|
||||||
<Dropdown
|
<Dropdown
|
||||||
items={orderResults}
|
items={orderResults}
|
||||||
selectedValue={selectedValue}
|
selectedValue={selectedValue}
|
||||||
onChange={setSelectedValue}
|
onChange={handleSortChange}
|
||||||
backgroundColor="slate4"
|
backgroundColor="slate4"
|
||||||
textColor="slate11"
|
textColor="slate11"
|
||||||
optionsWidth="40"
|
optionsWidth="40"
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
|
|
||||||
import { OrderDirection } from '@/../.graphclient';
|
import { OrderDirection, Token_orderBy } from '@/graphclient';
|
||||||
import { createContext } from '@/utils';
|
import { createContext } from '@/utils';
|
||||||
|
|
||||||
export type ExploreContext = {
|
export type ExploreContext = {
|
||||||
search: string;
|
search: string;
|
||||||
orderBy: string;
|
orderBy: Token_orderBy;
|
||||||
orderDirection: OrderDirection;
|
orderDirection: OrderDirection;
|
||||||
pageNumber: number;
|
pageNumber: number;
|
||||||
endReached: boolean;
|
endReached: boolean;
|
||||||
|
|
@ -29,7 +29,7 @@ export abstract class Explore {
|
||||||
children,
|
children,
|
||||||
}: Explore.ProviderProps) => {
|
}: Explore.ProviderProps) => {
|
||||||
const [search, setSearch] = useState('');
|
const [search, setSearch] = useState('');
|
||||||
const [orderBy, setOrderBy] = useState('');
|
const [orderBy, setOrderBy] = useState('tokenId');
|
||||||
const [orderDirection, setOrderDirection] =
|
const [orderDirection, setOrderDirection] =
|
||||||
useState<OrderDirection>('desc');
|
useState<OrderDirection>('desc');
|
||||||
const [pageNumber, setPageNumber] = useState(0);
|
const [pageNumber, setPageNumber] = useState(0);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue