Skip to content

Commit

Permalink
support passing multiple payload queries to indexing diviner
Browse files Browse the repository at this point in the history
  • Loading branch information
jonesmac committed Jan 3, 2024
1 parent b099de0 commit e66aba6
Show file tree
Hide file tree
Showing 7 changed files with 17 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export const usePollingFunction = <T extends Payload = Payload>(
functionToPoll?: FunctionToPoll,
onResult?: (result: T[] | null) => void,
) => {
const { indexedQuery, processIndexedResults } = config ?? {}
const { indexedQueries, processIndexedResults } = config ?? {}
const { isFresh } = processIndexedResults ?? {}
const { maxDelay = 10_000, maxRetries, initialDelay = 100 } = pollDivinerConfig

Expand Down Expand Up @@ -64,7 +64,7 @@ export const usePollingFunction = <T extends Payload = Payload>(
}
onResult?.(result as T[] | null)
} else {
console.warn('Exceeded maximum retries.', JSON.stringify(indexedQuery))
console.warn('Exceeded maximum retries.', JSON.stringify(indexedQueries))
onResult?.(result as T[] | null)
}
} catch (e) {
Expand All @@ -76,7 +76,7 @@ export const usePollingFunction = <T extends Payload = Payload>(
return await pollDivinersWithDelayInner(newDelay, functionToPoll)
}
},
[activePolling, maxRetries, maxDelay, freshTest, indexedQuery, onResult],
[activePolling, maxRetries, maxDelay, freshTest, indexedQueries, onResult],
)

/** A polling function that runs indefinitely on a set interval */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ import { useFetchDivinersFromNode } from './useFetchDivinersFromNode'

export const useTryDiviners = <T extends Payload = Payload>(config?: IndexedResultsConfig): (() => Promise<Payload[] | undefined | null>) => {
const { diviners } = useFetchDivinersFromNode(config)
const { indexedQuery, processIndexedResults } = config ?? {}
const { indexedQueries, processIndexedResults } = config ?? {}
const parseIndexedResults = processIndexedResults?.parseIndexedResults

const tryDiviner = useCallback(
async (diviner: DivinerInstance, indexedQuery: Payload, parseIndexedResults?: ProcessIndexedResults['parseIndexedResults']) => {
const divinedResult = await diviner.divine([indexedQuery])
async (diviner: DivinerInstance, indexedQueries: Payload[], parseIndexedResults?: ProcessIndexedResults['parseIndexedResults']) => {
const divinedResult = await diviner.divine(indexedQueries)
let results: Payload[] | undefined
if (divinedResult) {
results = parseIndexedResults ? await parseIndexedResults(divinedResult) : divinedResult
Expand All @@ -26,8 +26,8 @@ export const useTryDiviners = <T extends Payload = Payload>(config?: IndexedResu
let result: T[] | undefined | null
let divinerCount = 0
if (diviners && diviners?.length > 0) {
while (divinerCount < diviners?.length && indexedQuery) {
const divinerResult = await tryDiviner(diviners[divinerCount], indexedQuery, parseIndexedResults)
while (divinerCount < diviners?.length && indexedQueries) {
const divinerResult = await tryDiviner(diviners[divinerCount], indexedQueries, parseIndexedResults)
if (divinerResult && divinerResult?.length) {
result = divinerResult as T[]
break
Expand All @@ -36,7 +36,7 @@ export const useTryDiviners = <T extends Payload = Payload>(config?: IndexedResu
}
return result ?? null
}
}, [diviners, indexedQuery, parseIndexedResults, tryDiviner])
}, [diviners, indexedQueries, parseIndexedResults, tryDiviner])

return tryDiviners
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export interface IndexedResultsConfig<TPayload extends Payload = Payload> {
/** diviner that can check the the archivist for the latest results */
diviners: string[]
/** query to search for indexed results */
indexedQuery: Payload
indexedQueries: Payload[]
/** Functions to process indexedResults */
processIndexedResults: ProcessIndexedResults
/** Budget */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const address = '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D'

const supportedTokenInterfaces = [
'ERC721',
'ERC1155',
// 'ERC1155',
// Waiting on a Sentinel for these types
// 'ERC721TokenReceiver',
// 'ERC721Metadata',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ export const UseFreshIndexedResult: React.FC<UseIndexedResultsProps> = ({ addres
const [node] = useNode()

const config: UseIndexedResultsConfig = useMemo(() => {
const indexedQuery = { address, chainId, implemented: true, schema: PayloadDivinerQuerySchema, tokenInterface }
const indexedQueries = [{ address, chainId, implemented: true, schema: PayloadDivinerQuerySchema, tokenInterface }]
const config: UseIndexedResultsConfig = {
indexedResultsConfig: {
diviners,
indexedQuery,
indexedQueries,
processIndexedResults: {
parseIndexedResults: async (payloads: Payload[]) => {
return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ export const UseIndexedResults: React.FC<UseIndexedResultsProps> = ({ address, c
const [archivist] = useArchivistFromNode('Archivist')

const config = useMemo(() => {
const indexedQuery = { address, chainId, implemented: true, schema: PayloadDivinerQuerySchema, tokenInterface }
const indexedQueries = [{ address, chainId, implemented: true, schema: PayloadDivinerQuerySchema, tokenInterface }]
const config: UseIndexedResultsConfig = {
indexedResultsConfig: {
diviners,
indexedQuery,
indexedQueries,
processIndexedResults: {
parseIndexedResults: async (payloads: Payload[]) => {
return await Promise.all(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ export const UseIndexedResultsNoPoll: React.FC<UseIndexedResultsProps> = ({ addr
const [archivist] = useArchivistFromNode('Archivist')

const config = useMemo(() => {
const indexedQuery = { address, chainId, implemented: true, schema: PayloadDivinerQuerySchema, tokenInterface }
const indexedQueries = [{ address, chainId, implemented: true, schema: PayloadDivinerQuerySchema, tokenInterface }]
const config: UseIndexedResultsConfig = {
indexedResultsConfig: {
diviners,
indexedQuery,
indexedQueries,
processIndexedResults: {
parseIndexedResults: async (payloads: Payload[]) => {
return await Promise.all(
Expand Down

0 comments on commit e66aba6

Please sign in to comment.