From 720467363f3183679ca00ee55ff76e58c66278ec Mon Sep 17 00:00:00 2001 From: Gurkenglas Date: Tue, 9 Aug 2022 02:49:51 +0200 Subject: [PATCH] fix races by short-circuiting setAsked --- web/components/contract/contract-tabs.tsx | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/web/components/contract/contract-tabs.tsx b/web/components/contract/contract-tabs.tsx index 073054f6..6f20d429 100644 --- a/web/components/contract/contract-tabs.tsx +++ b/web/components/contract/contract-tabs.tsx @@ -16,7 +16,7 @@ import { Avatar } from 'web/components/avatar' import { Grid, _ } from 'gridjs-react' import 'gridjs/dist/theme/mermaid.css' import { useState, useEffect } from 'react' -import { maxBy } from 'lodash' +import { maxBy, uniq } from 'lodash' export function ContractTabs(props: { contract: Contract @@ -101,15 +101,13 @@ export function ContractTabs(props: { ) const [users, setUsers] = useState({} as {[key: string]: User}) - const [asked, setAsked] = useState({} as {[key: string]: boolean}) + const [asked, _setAsked] = useState(new Set()) + useEffect(() => { - bets.map((bet) => { - if (!asked[bet.userId]) { - getUser(bet.userId).then((user) => { - setUsers({ ...users, [bet.userId]: user }) - }) - setAsked({ ...asked, [bet.userId]: true }) - } + uniq(bets.map((bet:Bet) => bet.userId)).filter((uid) => !asked.has(uid)).forEach((uid) => { + console.log("adding",uid) + asked.add(uid) + getUser(uid).then((u) => setUsers((users) => ({...users, [uid]: u}))) }) }, [bets])