diff --git a/pages/stackers/[sub]/[when].js b/pages/stackers/[sub]/[when].js index eec02af076..6334f08264 100644 --- a/pages/stackers/[sub]/[when].js +++ b/pages/stackers/[sub]/[when].js @@ -1,6 +1,9 @@ import { gql, useQuery } from '@apollo/client' import { getGetServerSideProps } from '@/api/ssrApollo' import Layout from '@/components/layout' +import Button from 'react-bootstrap/Button'; +import Dropdown from 'react-bootstrap/Dropdown'; +import DropdownButton from 'react-bootstrap/DropdownButton'; import Col from 'react-bootstrap/Col' import Row from 'react-bootstrap/Row' import { SubAnalyticsHeader } from '@/components/sub-analytics-header' @@ -90,6 +93,40 @@ export default function Growth ({ ssrData }) { const { data } = useQuery(GROWTH_QUERY, { variables: { when, from, to, sub, subSelect: sub !== 'all' } }) if (!data && !ssrData) return + const downloadLinkStyle = { textDecoration: "inherit", color: "inherit" }; + + const genHrefDownloadBlobJSON = (data) => { + const blob = new Blob([ + JSON.stringify(data, null, 2), + ], { + type: 'text/plain;charset=utf-8;' + }); + return URL.createObjectURL(blob); + }; + + const genHrefDownloadBlobCSV = (data) => { + if (data.length > 0) { + data = flattenTimeDataForCsv(data); + const headers = Object.keys(data[0]); + const rows = data.map((item) => headers.map((header) => item[header])); + const csvStr = [headers.join(","), ...rows.map((row) => row.join(","))].join("\n"); + const blob = new Blob([csvStr,], {type: 'text/csv;charset=utf-8;'}); + return URL.createObjectURL(blob); + } + return "" + }; + + const flattenTimeDataForCsv = (timeData) => { + let rows = []; + for (const timeI in timeData) { + let flattened = {}; + flattened.time = timeData[timeI].time; + timeData[timeI].data.forEach(kv => {flattened[kv.name] = kv.value;}); + rows.push(flattened); + } + return rows; + }; + const { registrationGrowth, itemGrowth, @@ -104,7 +141,101 @@ export default function Growth ({ ssrData }) { if (sub === 'all') { return ( - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
stackers
@@ -140,7 +271,45 @@ export default function Growth ({ ssrData }) { } else { return ( - + + + + + + + + + + + + + + + + + + + + + + +
items