lodash#sumBy JavaScript Examples
The following examples show how to use
lodash#sumBy.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: dataProvider.js From acy-dex-interface with MIT License | 5 votes |
export function useFeesData({ from = FIRST_DATE_TS, to = NOW_TS, chainName = "arbitrum" } = {}) {
const PROPS = 'margin liquidation swap mint burn'.split(' ')
const feesQuery = `{
feeStats(
first: 1000
orderBy: id
orderDirection: desc
where: { period: daily, id_gte: ${from}, id_lte: ${to} }
) {
id
margin
marginAndLiquidation
swap
mint
burn
${chainName === "avalanche" ? "timestamp" : ""}
}
}`
let [feesData, loading, error] = useGraph(feesQuery, {
chainName
})
const feesChartData = useMemo(() => {
if (!feesData) {
return null
}
let chartData = sortBy(feesData.feeStats, 'id').map(item => {
const ret = { timestamp: item.timestamp || item.id };
PROPS.forEach(prop => {
if (item[prop]) {
ret[prop] = item[prop] / 1e30
}
})
ret.liquidation = item.marginAndLiquidation / 1e30 - item.margin / 1e30
ret.all = PROPS.reduce((memo, prop) => memo + ret[prop], 0)
return ret
})
let cumulative = 0
const cumulativeByTs = {}
return chain(chartData)
.groupBy(item => item.timestamp)
.map((values, timestamp) => {
const all = sumBy(values, 'all')
cumulative += all
let movingAverageAll
const movingAverageTs = timestamp - MOVING_AVERAGE_PERIOD
if (movingAverageTs in cumulativeByTs) {
movingAverageAll = (cumulative - cumulativeByTs[movingAverageTs]) / MOVING_AVERAGE_DAYS
}
const ret = {
timestamp: Number(timestamp),
all,
cumulative,
movingAverageAll
}
PROPS.forEach(prop => {
ret[prop] = sumBy(values, prop)
})
cumulativeByTs[timestamp] = cumulative
return ret
})
.value()
.filter(item => item.timestamp >= from)
}, [feesData])
return [feesChartData, loading, error]
}
Example #2
Source File: dataProvider.js From acy-dex-interface with MIT License | 5 votes |
export function useVolumesData({ from = FIRST_DATE_TS, to = NOW_TS, chainName = "arbitrum" } = {}) {
const PROPS = 'margin liquidation swap mint burn'.split(' ')
const feesQuery = `{
volumeStats(
first: 1000
orderBy: id
orderDirection: desc
where: { period: daily, id_gte: ${from}, id_lte: ${to} }
) {
id
margin
liquidation
swap
mint
burn
${chainName === "avalanche" ? "timestamp" : ""}
}
}`
let [feesData, loading, error] = useGraph(feesQuery, {
chainName
})
const feesChartData = useMemo(() => {
if (!feesData) {
return null
}
let chartData = sortBy(feesData.feeStats, 'id').map(item => {
const ret = { timestamp: item.timestamp || item.id };
PROPS.forEach(prop => {
if (item[prop]) {
ret[prop] = item[prop] / 1e30
}
})
ret.liquidation = item.liquidation / 1e30 - item.margin / 1e30
ret.all = PROPS.reduce((memo, prop) => memo + ret[prop], 0)
return ret
})
let cumulative = 0
const cumulativeByTs = {}
return chain(chartData)
.groupBy(item => item.timestamp)
.map((values, timestamp) => {
const all = sumBy(values, 'all')
cumulative += all
let movingAverageAll
const movingAverageTs = timestamp - MOVING_AVERAGE_PERIOD
if (movingAverageTs in cumulativeByTs) {
movingAverageAll = (cumulative - cumulativeByTs[movingAverageTs]) / MOVING_AVERAGE_DAYS
}
const ret = {
timestamp: Number(timestamp),
all,
cumulative,
movingAverageAll
}
PROPS.forEach(prop => {
ret[prop] = sumBy(values, prop)
})
cumulativeByTs[timestamp] = cumulative
return ret
})
.value()
.filter(item => item.timestamp >= from)
}, [feesData])
return [feesChartData, loading, error]
}
Example #3
Source File: covid-tests-statistics.js From covid19-dashboard with MIT License | 4 votes |
CovidTestsStatistics = () => {
const {date, forcedDate, selectedLocation, setSelectedLocation, isMobileDevice} = useContext(AppContext)
const {selectedStat, setSelectedStat} = useContext(CovidTestsContext)
const selectedDate = forcedDate || date
const stat = selectedStat || 'mixed'
const [report, setReport] = useState(null)
const [statistics, setStatistics] = useState(null)
const [showVariations, setShowVariations] = useState(false)
const Chart = getChart(stat, showVariations)
const toggleable = useCallback(chartName => {
if (chartName) {
return charts[stat].type === 'indicateur'
}
return false
}, [stat])
const chartOptions = useCallback(chartName => {
if (chartName) {
return charts[stat].options || {}
}
}, [stat])
const isToggleable = toggleable(stat)
const selectedChartOptions = chartOptions(stat)
useEffect(() => {
async function fetchReport() {
const report = await getReport(selectedDate, selectedLocation)
setReport(report)
const filteredHistory = report.history.filter(r => selectedDate >= r.date)
const testsPositifs = sumBy(filteredHistory, 'testsPositifs')
const testsRealises = sumBy(filteredHistory, 'testsRealises')
const testsNegatifs = testsRealises - testsPositifs
const pieChartData = [testsNegatifs, testsPositifs]
setStatistics({
pieChartData,
testsPositifs,
testsRealises
})
}
fetchReport()
}, [selectedDate, selectedLocation])
const pieLabels = ['Tests négatifs', 'Tests positifs']
const pieColors = [colors.grey, colors.red]
return (
<>
<div className='header'>
{selectedLocation && !isMobileDevice && (
<div className='back' onClick={() => setSelectedLocation('FRA')}><BarChart2 /> <span>France</span></div>
)}
<h3>COVID-19 - {report ? report.nom : 'France'}</h3>
</div>
{statistics && (
<CovidTestsCounters testsPositifs={statistics.testsPositifs} testsRealises={statistics.testsRealises} />
)}
{statistics && <PieChartPercent data={statistics.pieChartData} labels={pieLabels} colors={pieColors} height={isMobileDevice ? 150 : 130} />}
{report && report.history && stat && (
<>
{isToggleable && <a className='toggle' onClick={() => setShowVariations(!showVariations)}>{showVariations ? 'Afficher les valeurs cumulées' : 'Afficher les variations quotidiennes'}</a>}
<div className='chart-container'>
<Chart reports={report.history.filter(r => selectedDate >= r.date)} {...selectedChartOptions} />
</div>
{stat !== 'mixed' &&
<Button title='Afficher le cumul' onClick={() => setSelectedStat('mixed')} isMobileDevice={isMobileDevice} />}
</>
)}
{report && <CovidTestsAgeChart report={report} />}
<style jsx>{`
.header {
text-align: center;
position: sticky;
top: 0;
background-color: white;
padding: ${isMobileDevice ? '0.2em' : 0};
box-shadow: 0 1px 4px ${colors.lightGrey};
z-index: 1;
}
.header h3 {
margin: 0.4em;
}
.back {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
background: ${colors.lighterGrey};
padding: 0.5em;
font-size: larger;
}
.back span {
margin: 0 0.5em;
}
.back:hover {
cursor: pointer;
background: ${colors.lightGrey};
}
.toggle {
padding: 2px 20px;
text-align: right;
font-size: 0.8em;
cursor: pointer;
}
.chart-container {
margin: ${isMobileDevice ? '0 0.2em' : '0 1em'};
}
`}</style>
</>
)
}