diff --git a/apps/demo/src/components/Section.tsx b/apps/demo/src/components/Section.tsx index 65fc6b4c..3eda80e0 100644 --- a/apps/demo/src/components/Section.tsx +++ b/apps/demo/src/components/Section.tsx @@ -30,7 +30,7 @@ export function SlideSection({ stuff, children, ...rest }: SectionProps) { const ref = React.useRef(null!) const scroll = (x: number) => { - ref.current.scrollBy({ left: ref.current.clientWidth * x, behavior: 'smooth' }) + ref.current.scrollBy({ left: ref.current.clientWidth / 2 * x, behavior: 'smooth' }) } return ( diff --git a/apps/demo/src/ui/Home.tsx b/apps/demo/src/ui/Home.tsx index 1f7a9daa..971d7967 100644 --- a/apps/demo/src/ui/Home.tsx +++ b/apps/demo/src/ui/Home.tsx @@ -12,37 +12,17 @@ export function Home() { Gamba Demo

- A decentralized, provably-fair casino built on . + A decentralized, provably-fair casino built on Gamba.

- -
diff --git a/apps/demo/src/ui/RecentPlays.tsx b/apps/demo/src/ui/RecentPlays.tsx index 9a0e6c04..90e86ba0 100644 --- a/apps/demo/src/ui/RecentPlays.tsx +++ b/apps/demo/src/ui/RecentPlays.tsx @@ -1,5 +1,5 @@ import { GameResult, lamportsToSol } from 'gamba' -import { useEventFetcher, useGamba } from 'gamba/react' +import { useGamba, useGambaEvents } from 'gamba/react' import { formatLamports } from 'gamba/react-ui' import React from 'react' import { Icon } from '../components/Icon' @@ -69,51 +69,23 @@ function RecentPlay({ time, signature, result, isSelf }: RecentPlayProps) { export function RecentPlays() { const gamba = useGamba() - const events = useEventFetcher() - - React.useEffect( - () => { - events.fetch({ signatureLimit: 40 }) - return events.listen() - } - , [events], - ) - - const results = React.useMemo(() => { - return events.transactions.filter((x) => !!x.event.gameResult) - }, [events.transactions]) + const events = useGambaEvents() return ( -
- {/* - */} - - } - > +
- {results.map((transaction) => ( + {events.map((transaction) => ( ))} - {!events.latestSig ? Array.from({ length: 5 }).map((_, i) => ( + {!events.length && Array.from({ length: 5 }).map((_, i) => (
- )) : !results.length && ( -
- No events -
- )} + ))}
) diff --git a/packages/gamba-core/src/EventFetcher.ts b/packages/gamba-core/src/EventFetcher.ts index 49d001f8..824ffe4a 100644 --- a/packages/gamba-core/src/EventFetcher.ts +++ b/packages/gamba-core/src/EventFetcher.ts @@ -72,7 +72,10 @@ export class EventFetcher { this.latestTime = latest.time } - const eventTransactions = transactions.filter((x) => !!x.event.gameResult) + // todo + const eventTransactions = transactions.filter((x) => { + return !!x.event.gameResult && (x.event.gameResult.creator.equals(this.params.address) || this.params.address.equals(PROGRAM_ID)) + }) if (this.params.storeTransactions) { this.transactions = [ @@ -130,6 +133,7 @@ export class EventFetcher { } const events = parseTransactionEvents(logs.logs) const gameResult = events.gameResult ?? events.gameResultOld + console.log(gameResult) this.handleEvents([{ signature: logs.signature, time: Date.now(), diff --git a/packages/gamba-react/src/hooks/index.ts b/packages/gamba-react/src/hooks/index.ts index 6557499e..355060de 100644 --- a/packages/gamba-react/src/hooks/index.ts +++ b/packages/gamba-react/src/hooks/index.ts @@ -2,4 +2,4 @@ export { useBalances } from './useBalances' export { useBonusToken } from './useBonusToken' export { useGamba, useGambaError } from './useGamba' export { useGambaClient } from './useGambaClient' -export { useEventFetcher } from './useEventFetcher' +export { useEventFetcher, useGambaEvents } from './useEventFetcher' diff --git a/packages/gamba-react/src/hooks/useEventFetcher.ts b/packages/gamba-react/src/hooks/useEventFetcher.ts index 813c8174..40196465 100644 --- a/packages/gamba-react/src/hooks/useEventFetcher.ts +++ b/packages/gamba-react/src/hooks/useEventFetcher.ts @@ -1,5 +1,5 @@ import { useConnection } from '@solana/wallet-adapter-react' -import { EventFetcher, EventFetcherParams } from 'gamba-core' +import { EventFetcher, EventFetcherParams, GameResult, ParsedGambaTransaction } from 'gamba-core' import React from 'react' import { useRerender } from './useRerender' @@ -13,3 +13,41 @@ export function useEventFetcher(params?: EventFetcherParams) { return fetcher } + +interface UseGambaEventsParams { + // creator?: PublicKey + signatureLimit?: number + listen?: boolean +} + +type GambaTransactionWithGameResult = Omit & {event: {gameResult: GameResult}} + +export function useGambaEvents(props: UseGambaEventsParams = {}) { + const { + listen = true, + signatureLimit = 20, + // creator, + } = props + const events = useEventFetcher() + + const results = React.useMemo(() => + events.transactions.filter((x) => !!x.event.gameResult) as GambaTransactionWithGameResult[] + , [events.transactions]) + + React.useEffect( + () => { + if (signatureLimit) { + events.fetch({ signatureLimit: signatureLimit }) + } + } + , [events, signatureLimit], + ) + + React.useEffect(() => { + if (listen) { + return events.listen() + } + }, [events, listen]) + + return results +} diff --git a/packages/gamba-react/src/hooks/useGamba.ts b/packages/gamba-react/src/hooks/useGamba.ts index 3c1dcdcd..6379cbb1 100644 --- a/packages/gamba-react/src/hooks/useGamba.ts +++ b/packages/gamba-react/src/hooks/useGamba.ts @@ -58,6 +58,7 @@ export function useGamba() { return { connection, + creator, wallet, seed, updateSeed,