diff --git a/packages/web/components/Quest/QuestFilter.tsx b/packages/web/components/Quest/QuestFilter.tsx index 06509a9a..eccb1e46 100644 --- a/packages/web/components/Quest/QuestFilter.tsx +++ b/packages/web/components/Quest/QuestFilter.tsx @@ -1,7 +1,8 @@ import { Flex, MetaButton, - MetaSelect, + MetaFilterSelectSearch, + metaFilterSelectStyles, Switch, Text, Wrap, @@ -13,7 +14,7 @@ import { QuestFragmentFragment, QuestStatus_Enum, } from 'graphql/autogen/types'; -import React from 'react'; +import React, { useState } from 'react'; import { useUser } from '../../lib/hooks'; import { QueryVariableSetter, QuestAggregates } from '../../lib/hooks/quests'; @@ -25,6 +26,8 @@ type Props = { setQueryVariable: QueryVariableSetter; }; +type ValueType = { value: string; label: string }; + /* TODO - text search - remove limit @@ -38,85 +41,168 @@ export const QuestFilter: React.FC = ({ const { user } = useUser(); const myId = user?.id; - return ( - - - - - - setQueryVariable('limit', Number(e.target.value)) - } - > - - - - - - - setQueryVariable('order', e.target.value)} - > - - - - - - setQueryVariable('status', e.target.value)} - > - - - - - - setQueryVariable('guild_id', e.target.value)} - > - - {aggregates.guilds && - aggregates.guilds.map((g: { id: string; name: string }) => ( - - ))} - - + const limitOptions = [ + { + label: '10', + value: '10', + }, + { + label: '20', + value: '20', + }, + { + label: '50', + value: '50', + }, + ]; - {myId && ( - - - - setQueryVariable( - 'created_by_player_id', - queryVariables.created_by_player_id ? '' : myId, - ) + const orderOptions = [ + { + label: 'Newest', + value: Order_By.Desc, + }, + { + label: 'Oldest', + value: Order_By.Asc, + }, + ]; + + const statusOptions = [ + { + label: 'Open', + value: QuestStatus_Enum.Open, + }, + { + label: 'Closed', + value: QuestStatus_Enum.Closed, + }, + ]; + + const guildOptions = [ + { + label: 'All guilds', + value: '', + }, + ].concat( + aggregates.guilds.map(({ name, id }) => ({ + label: name, + value: id, + })), + ); + + const [limit, setLimit] = useState(limitOptions[0]); + const [order, setOrder] = useState(orderOptions[0]); + const [status, setStatus] = useState(statusOptions[0]); + const [guild, setGuild] = useState(guildOptions[0]); + + return ( + + + { + const values = value as ValueType[]; + const v = values[values.length - 1]; + setLimit(v); + setQueryVariable('limit', Number(v.value)); + }} + options={limitOptions} + /> + { + const values = value as ValueType[]; + const o = values[values.length - 1]; + + setOrder(o); + setQueryVariable('order', o.value); + }} + options={orderOptions} + /> + { + const values = value as ValueType[]; + const s = values[values.length - 1]; + + setStatus(s); + setQueryVariable('status', s.value); + }} + options={statusOptions} + /> + {aggregates.guilds.length && ( + { + const values = value as ValueType[]; + const g = values[values.length - 1]; + + setGuild(g); + setQueryVariable('guild_id', g.value); + }} + options={guildOptions} + /> + )} + + {myId && ( + + + + setQueryVariable( + 'created_by_player_id', + queryVariables.created_by_player_id ? '' : myId, + ) + } + > + Created by me + - Created by me - - - - - )} - - + /> + + + + )} + {quests && (