blowfish/src/renderer/store/PriceProvider.jsx

54 lines
1.4 KiB
React
Raw Normal View History

2020-02-25 04:10:06 +01:00
import React, { useEffect, useState } from 'react'
import PropTypes from 'prop-types'
import ms from 'ms'
import { PriceContext } from './createContext'
import { refreshInterval, conversions } from '../../config'
2020-02-25 16:46:04 +01:00
import { fetchAndSetPrices } from './helpers'
2020-02-25 04:10:06 +01:00
export default function PriceProvider({ children }) {
// construct initial prices Map to get consistent
// order for Ticker and Touchbar
let pricesMap = new Map()
pricesMap.set('ocean', 1)
conversions.map(key => pricesMap.set(key, 0))
const [prices, setPrices] = useState(pricesMap)
const [priceChanges, setPriceChanges] = useState(
Object.assign(
...conversions.map(key => ({
[key]: 0
}))
)
)
useEffect(() => {
async function init() {
2020-02-25 15:16:44 +01:00
try {
2020-02-25 16:46:04 +01:00
const { newPrices, newPriceChanges } = await fetchAndSetPrices(prices)
2020-02-25 15:16:44 +01:00
setPrices(newPrices)
setPriceChanges(newPriceChanges)
global.ipcRenderer.send('prices-updated', Array.from(newPrices)) // convert Map to array, ipc messages seem to kill it
} catch (error) {
console.error(error.message)
}
2020-02-25 04:10:06 +01:00
}
init()
setInterval(init, ms(refreshInterval))
return () => {
clearInterval(init)
}
}, [])
return (
<PriceContext.Provider value={{ prices, priceChanges }}>
{children}
</PriceContext.Provider>
)
}
PriceProvider.propTypes = {
children: PropTypes.any.isRequired
}