import { gql } from '@apollo/client' import { getGetServerSideProps } from '../../api/ssrApollo' import Layout from '../../components/layout' import { LineChart, Line, XAxis, YAxis, Tooltip, Legend, ResponsiveContainer, AreaChart, Area } from 'recharts' import { Col, Row } from 'react-bootstrap' import { abbrNum } from '../../lib/format' import { UsageHeader } from '../../components/usage-header' import { useRouter } from 'next/router' export const getServerSideProps = getGetServerSideProps( gql` query Growth($when: String!) { registrationGrowth(when: $when) { time data { name value } } itemGrowth(when: $when) { time data { name value } } spendingGrowth(when: $when) { time data { name value } } spenderGrowth(when: $when) { time data { name value } } stackingGrowth(when: $when) { time data { name value } } stackerGrowth(when: $when) { time data { name value } } }`) // todo: this needs to accomodate hours, days, months now const dateFormatter = when => { return timeStr => { const date = new Date(timeStr) switch (when) { case 'week': case 'month': return `${('0' + (date.getMonth() % 12 + 1)).slice(-2)}/${date.getDate()}` case 'year': case 'forever': return `${('0' + (date.getMonth() % 12 + 1)).slice(-2)}/${String(date.getFullYear()).slice(-2)}` default: return `${date.getHours() % 12 || 12}${date.getHours() >= 12 ? 'pm' : 'am'}` } } } function xAxisName (when) { switch (when) { case 'week': case 'month': return 'days' case 'year': case 'forever': return 'months' default: return 'hours' } } const transformData = data => { return data.map(entry => { const obj = { time: entry.time } entry.data.forEach(entry1 => { obj[entry1.name] = entry1.value }) return obj }) } export default function Growth ({ data: { registrationGrowth, itemGrowth, spendingGrowth, spenderGrowth, stackingGrowth, stackerGrowth } }) { return (
stackers
stacking
spenders
spending
registrations
items
) } const COLORS = [ 'var(--secondary)', 'var(--info)', 'var(--success)', 'var(--boost)', 'var(--grey)' ] function GrowthAreaChart ({ data }) { const router = useRouter() if (!data || data.length === 0) { return null } // transform data into expected shape data = transformData(data) // need to grab when const when = router.query.when return ( {Object.keys(data[0]).filter(v => v !== 'time' && v !== '__typename').map((v, i) => )} ) } function GrowthLineChart ({ data }) { const router = useRouter() if (!data || data.length === 0) { return null } // transform data into expected shape data = transformData(data) // need to grab when const when = router.query.when return ( {Object.keys(data[0]).filter(v => v !== 'time' && v !== '__typename').map((v, i) => )} ) }