import { assertSecret } from '@blitzkit/core'; import { EyeOpenIcon } from '@radix-ui/react-icons'; import { Box, Flex, Heading, Text } from '@radix-ui/themes'; import { google } from 'googleapis'; import { awaitableTankDefinitions } from '../core/awaitables/tankDefinitions'; import { TankopediaPersistent } from '../stores/tankopediaPersistent'; import { TankCard } from './TankCard'; const [tankDefinitions] = await Promise.all([awaitableTankDefinitions, ,]); const auth = await google.auth.getClient({ keyFile: import.meta.env.GOOGLE_APPLICATION_CREDENTIALS, scopes: ['https://www.googleapis.com/auth/analytics.readonly'], }); const analytics = google.analyticsdata({ version: 'v1beta', auth }); const report = await analytics.properties.runReport({ property: `properties/${assertSecret(import.meta.env.PUBLIC_GOOGLE_ANALYTICS_PROPERTY_ID)}`, requestBody: { dateRanges: [{ startDate: '7daysAgo', endDate: 'today' }], dimensions: [{ name: 'pagePath' }], metrics: [{ name: 'screenPageViews' }], orderBys: [{ metric: { metricName: 'screenPageViews' }, desc: true }], dimensionFilter: { filter: { fieldName: 'pagePath', stringFilter: { matchType: 'BEGINS_WITH', value: '/tools/tankopedia/' }, }, }, }, }); if (!report.data.rows) { throw new Error('No rows in report'); } const hotTanks = report.data.rows .filter( (row) => row.dimensionValues && row.dimensionValues[0].value && row.dimensionValues[0].value !== '/tools/tankopedia/' && row.metricValues && row.metricValues[0].value, ) .map((row) => ({ id: Number( row.dimensionValues![0].value!.match( /\/tools\/tankopedia\/(\d+)\/?/, )?.[1], ), views: Number(row.metricValues![0].value!), })) .filter((row) => { if (!(row.id in tankDefinitions.tanks)) { // console.log('Unknown tank', row.id); } return row.id in tankDefinitions.tanks; }) .slice(0, 16) .map(({ id, views }) => ({ tank: tankDefinitions.tanks[id], views, })); export function HomePageHotTanks() { return ( ); } function Content() { return ( Popular tanks Last 7 days {hotTanks.map((row) => ( {Math.round(row.views * (30 / 7)).toLocaleString('en-US')} } /> ))} ); }