manifold/web/hooks/use-seen-contracts.ts

46 lines
1.0 KiB
TypeScript
Raw Permalink Normal View History

import _ from 'lodash'
import { useEffect, RefObject, useState } from 'react'
import { Contract } from 'common/contract'
import { trackView } from 'web/lib/firebase/tracking'
import { useIsVisible } from './use-is-visible'
export const useSeenContracts = () => {
const [seenContracts, setSeenContracts] = useState<{
[contractId: string]: number
}>({})
useEffect(() => {
setSeenContracts(getSeenContracts())
}, [])
return seenContracts
}
export const useSaveSeenContract = (
ref: RefObject<Element>,
2022-04-19 05:16:08 +00:00
contract: Contract
) => {
const isVisible = useIsVisible(ref)
useEffect(() => {
if (isVisible) {
const newSeenContracts = {
...getSeenContracts(),
[contract.id]: Date.now(),
}
localStorage.setItem(key, JSON.stringify(newSeenContracts))
2022-04-05 03:28:38 +00:00
2022-04-19 05:16:08 +00:00
trackView(contract.id)
}
2022-04-19 05:16:08 +00:00
}, [isVisible, contract])
}
const key = 'feed-seen-contracts'
const getSeenContracts = () => {
return _.mapValues(
JSON.parse(localStorage.getItem(key) ?? '{}'),
(time) => +time
)
}