Support Firestore search over a reduced set of contracts
This commit is contained in:
		
							parent
							
								
									9a101601fb
								
							
						
					
					
						commit
						2b71e299d3
					
				|  | @ -3,13 +3,18 @@ import { Answer } from 'common/answer' | |||
| import { searchInAny } from 'common/util/parse' | ||||
| import { sortBy } from 'lodash' | ||||
| import { ContractsGrid } from 'web/components/contract/contracts-grid' | ||||
| import { useContracts } from 'web/hooks/use-contracts' | ||||
| import { | ||||
|   usePersistentState, | ||||
|   urlParamStore, | ||||
| } from 'web/hooks/use-persistent-state' | ||||
| import { getProbability } from 'common/calculate' | ||||
| import { BinaryContract, PseudoNumericContract } from 'common/contract' | ||||
| import { | ||||
|   BinaryContract, | ||||
|   Contract, | ||||
|   PseudoNumericContract, | ||||
| } from 'common/contract' | ||||
| import { useEffect, useState } from 'react' | ||||
| import { listAllContracts } from 'web/lib/firebase/contracts' | ||||
| 
 | ||||
| const MAX_CONTRACTS_RENDERED = 100 | ||||
| 
 | ||||
|  | @ -21,9 +26,10 @@ export default function ContractSearchFirestore(props: { | |||
|     groupSlug?: string | ||||
|   } | ||||
|   defaultSort?: string | ||||
|   getContracts?: () => Promise<Contract[]> | ||||
| }) { | ||||
|   const { additionalFilter } = props | ||||
|   const contracts = useContracts() | ||||
|   const { additionalFilter, getContracts } = props | ||||
|   const [contracts, setContracts] = useState<Contract[]>([]) | ||||
|   const router = useRouter() | ||||
|   const store = urlParamStore(router) | ||||
|   const [query, setQuery] = usePersistentState('', { key: 'q', store }) | ||||
|  | @ -32,6 +38,15 @@ export default function ContractSearchFirestore(props: { | |||
|     store, | ||||
|   }) | ||||
| 
 | ||||
|   useEffect(() => { | ||||
|     // Either set contracts from getContracts, or fallback to getting all of them
 | ||||
|     if (getContracts) { | ||||
|       getContracts().then(setContracts) | ||||
|     } else { | ||||
|       listAllContracts(100000).then(setContracts) | ||||
|     } | ||||
|   }, [getContracts]) | ||||
| 
 | ||||
|   let matches = (contracts ?? []).filter((c) => | ||||
|     searchInAny( | ||||
|       query, | ||||
|  |  | |||
|  | @ -227,6 +227,10 @@ export default function GroupPage(props: { | |||
|     <ContractSearchFirestore | ||||
|       additionalFilter={{ groupSlug: group.slug }} | ||||
|       defaultSort="highest-percent" | ||||
|       getContracts={async () => { | ||||
|         const contracts = await listContractsByGroupSlug(group.slug) | ||||
|         return contracts.filter((c) => !c.isResolved) | ||||
|       }} | ||||
|     /> | ||||
|   ) : ( | ||||
|     <ContractSearch | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user