Allow sorting by highest %
This commit is contained in:
parent
57b74a5d09
commit
1f6cab8cb4
|
@ -8,6 +8,8 @@ import {
|
|||
usePersistentState,
|
||||
urlParamStore,
|
||||
} from 'web/hooks/use-persistent-state'
|
||||
import { getProbability } from 'common/calculate'
|
||||
import { BinaryContract, PseudoNumericContract } from 'common/contract'
|
||||
|
||||
const MAX_CONTRACTS_RENDERED = 100
|
||||
|
||||
|
@ -18,13 +20,17 @@ export default function ContractSearchFirestore(props: {
|
|||
excludeContractIds?: string[]
|
||||
groupSlug?: string
|
||||
}
|
||||
defaultSort?: string
|
||||
}) {
|
||||
const { additionalFilter } = props
|
||||
const contracts = useContracts()
|
||||
const router = useRouter()
|
||||
const store = urlParamStore(router)
|
||||
const [query, setQuery] = usePersistentState('', { key: 'q', store })
|
||||
const [sort, setSort] = usePersistentState('score', { key: 'sort', store })
|
||||
const [sort, setSort] = usePersistentState(props.defaultSort ?? 'score', {
|
||||
key: 'sort',
|
||||
store,
|
||||
})
|
||||
|
||||
let matches = (contracts ?? []).filter((c) =>
|
||||
searchInAny(
|
||||
|
@ -51,6 +57,10 @@ export default function ContractSearchFirestore(props: {
|
|||
// Use lodash for stable sort, so previous sort breaks all ties.
|
||||
matches = sortBy(matches, ({ volume7Days }) => -1 * volume7Days)
|
||||
matches = sortBy(matches, ({ volume24Hours }) => -1 * volume24Hours)
|
||||
} else if (sort === 'highest-percent') {
|
||||
matches = sortBy(matches, (c) =>
|
||||
getProbability(c as BinaryContract | PseudoNumericContract)
|
||||
).reverse()
|
||||
}
|
||||
|
||||
if (additionalFilter) {
|
||||
|
@ -99,6 +109,7 @@ export default function ContractSearchFirestore(props: {
|
|||
value={sort}
|
||||
onChange={(e) => setSort(e.target.value)}
|
||||
>
|
||||
<option value="highest-percent">Highest %</option>
|
||||
<option value="score">Trending</option>
|
||||
<option value="newest">Newest</option>
|
||||
<option value="most-traded">Most traded</option>
|
||||
|
|
|
@ -52,6 +52,8 @@ import { Post } from 'common/post'
|
|||
import { Spacer } from 'web/components/layout/spacer'
|
||||
import { usePost } from 'web/hooks/use-post'
|
||||
import { useAdmin } from 'web/hooks/use-admin'
|
||||
import { isTournament } from 'web/pages/tournaments'
|
||||
import ContractSearchFirestore from 'web/pages/contract-search-firestore'
|
||||
|
||||
export const getStaticProps = fromPropz(getStaticPropz)
|
||||
export async function getStaticPropz(props: { params: { slugs: string[] } }) {
|
||||
|
@ -220,7 +222,13 @@ export default function GroupPage(props: {
|
|||
</Col>
|
||||
)
|
||||
|
||||
const questionsTab = (
|
||||
// Use Firestore search for Tournament groups, so they can sort by highest
|
||||
const questionsTab = isTournament(group.id) ? (
|
||||
<ContractSearchFirestore
|
||||
additionalFilter={{ groupSlug: group.slug }}
|
||||
defaultSort="highest-percent"
|
||||
/>
|
||||
) : (
|
||||
<ContractSearch
|
||||
user={user}
|
||||
defaultSort={'newest'}
|
||||
|
|
|
@ -107,6 +107,10 @@ const tourneys: Tourney[] = [
|
|||
// },
|
||||
]
|
||||
|
||||
export function isTournament(groupId: string) {
|
||||
return tourneys.map((t) => t.groupId).includes(groupId)
|
||||
}
|
||||
|
||||
export async function getStaticProps() {
|
||||
const groupIds = tourneys
|
||||
.map((data) => data.groupId)
|
||||
|
|
Loading…
Reference in New Issue
Block a user