From 290d567145ea97c14bd3c81173d74028c272bc73 Mon Sep 17 00:00:00 2001 From: Ian Philips Date: Tue, 19 Apr 2022 16:33:39 -0600 Subject: [PATCH] Move use save shares to own file --- web/components/use-save-shares.ts | 59 +++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 web/components/use-save-shares.ts diff --git a/web/components/use-save-shares.ts b/web/components/use-save-shares.ts new file mode 100644 index 00000000..467e19ae --- /dev/null +++ b/web/components/use-save-shares.ts @@ -0,0 +1,59 @@ +import { Binary, CPMM, DPM, FullContract } from '../../common/contract' +import { Bet } from '../../common/bet' +import { useEffect, useState } from 'react' +import _ from 'lodash' + +export const useSaveShares = ( + contract: FullContract, + userBets: Bet[] | undefined +) => { + const [savedShares, setSavedShares] = useState< + | { + yesShares: number + noShares: number + yesFloorShares: number + noFloorShares: number + } + | undefined + >() + + const [yesBets, noBets] = _.partition( + userBets ?? [], + (bet) => bet.outcome === 'YES' + ) + const [yesShares, noShares] = [ + _.sumBy(yesBets, (bet) => bet.shares), + _.sumBy(noBets, (bet) => bet.shares), + ] + + const [yesFloorShares, noFloorShares] = [ + Math.floor(yesShares), + Math.floor(noShares), + ] + + useEffect(() => { + // Save yes and no shares to local storage. + const savedShares = localStorage.getItem(`${contract.id}-shares`) + if (!userBets && savedShares) { + setSavedShares(JSON.parse(savedShares)) + } + + if (userBets) { + const updatedShares = { yesShares, noShares } + localStorage.setItem( + `${contract.id}-shares`, + JSON.stringify(updatedShares) + ) + } + }, [contract.id, userBets, noShares, yesShares]) + + if (userBets) return { yesShares, noShares, yesFloorShares, noFloorShares } + return ( + savedShares ?? { + yesShares: 0, + noShares: 0, + yesFloorShares: 0, + noFloorShares: 0, + } + ) +}