update property names for list table to label, count, percent
Some checks are pending
Node.js CI / build (postgresql, 18.18) (push) Waiting to run

This commit is contained in:
Francis Cao 2025-09-17 11:43:58 -07:00
parent 03933bea7a
commit 6d9d8b353f
5 changed files with 51 additions and 46 deletions

View file

@ -61,18 +61,24 @@ export function Attribution({
] ]
: []; : [];
function UTMTable({ data = [], title }: { data: any; title: string }) { function AttributionTable({ data = [], title }: { data: any; title: string }) {
const attributionData = percentFilter(
data.map(({ name, value }) => ({
x: name,
y: Number(value),
})),
);
return ( return (
<ListTable <ListTable
title={title} title={title}
metric={formatMessage(currency ? labels.revenue : labels.visitors)} metric={formatMessage(currency ? labels.revenue : labels.visitors)}
currency={currency} currency={currency}
data={percentFilter( data={attributionData.map(({ x, y, z }: { x: string; y: number; z: number }) => ({
data.map(({ name, value }) => ({ label: x,
x: name, count: y,
y: Number(value), percent: z,
})), }))}
)}
/> />
); );
} }
@ -91,48 +97,34 @@ export function Attribution({
<SectionHeader title={formatMessage(labels.sources)} /> <SectionHeader title={formatMessage(labels.sources)} />
<Grid columns="1fr 1fr" gap> <Grid columns="1fr 1fr" gap>
<Panel> <Panel>
<ListTable <AttributionTable data={data?.['referrer']} title={formatMessage(labels.referrer)} />
title={formatMessage(labels.referrer)}
metric={formatMessage(currency ? labels.revenue : labels.visitors)}
currency={currency}
data={percentFilter(
data?.['referrer']?.map(({ name, value }) => ({
x: name,
y: Number(value),
})),
)}
/>
</Panel> </Panel>
<Panel> <Panel>
<ListTable <AttributionTable data={data?.['paidAds']} title={formatMessage(labels.paidAds)} />
title={formatMessage(labels.paidAds)}
metric={formatMessage(currency ? labels.revenue : labels.visitors)}
currency={currency}
data={percentFilter(
data?.['paidAds']?.map(({ name, value }) => ({
x: name,
y: Number(value),
})),
)}
/>
</Panel> </Panel>
</Grid> </Grid>
<SectionHeader title="UTM" /> <SectionHeader title="UTM" />
<Grid columns="1fr 1fr" gap> <Grid columns="1fr 1fr" gap>
<Panel> <Panel>
<UTMTable data={data?.['utm_source']} title={formatMessage(labels.sources)} /> <AttributionTable data={data?.['utm_source']} title={formatMessage(labels.sources)} />
</Panel> </Panel>
<Panel> <Panel>
<UTMTable data={data?.['utm_medium']} title={formatMessage(labels.medium)} /> <AttributionTable data={data?.['utm_medium']} title={formatMessage(labels.medium)} />
</Panel> </Panel>
<Panel> <Panel>
<UTMTable data={data?.['utm_cmapaign']} title={formatMessage(labels.campaigns)} /> <AttributionTable
data={data?.['utm_cmapaign']}
title={formatMessage(labels.campaigns)}
/>
</Panel> </Panel>
<Panel> <Panel>
<UTMTable data={data?.['utm_content']} title={formatMessage(labels.content)} /> <AttributionTable
data={data?.['utm_content']}
title={formatMessage(labels.content)}
/>
</Panel> </Panel>
<Panel> <Panel>
<UTMTable data={data?.['utm_term']} title={formatMessage(labels.terms)} /> <AttributionTable data={data?.['utm_term']} title={formatMessage(labels.terms)} />
</Panel> </Panel>
</Grid> </Grid>
</Column> </Column>

View file

@ -38,7 +38,7 @@ export function Revenue({ websiteId, startDate, endDate }: RevenueProps) {
}); });
const renderCountryName = useCallback( const renderCountryName = useCallback(
({ x: code }) => ( ({ label: code }) => (
<Row className={classNames(locale)} gap> <Row className={classNames(locale)} gap>
<TypeIcon type="country" value={code} /> <TypeIcon type="country" value={code} />
<Text>{countryNames[code] || formatMessage(labels.unknown)}</Text> <Text>{countryNames[code] || formatMessage(labels.unknown)}</Text>
@ -136,9 +136,9 @@ export function Revenue({ websiteId, startDate, endDate }: RevenueProps) {
title={formatMessage(labels.country)} title={formatMessage(labels.country)}
metric={formatMessage(labels.revenue)} metric={formatMessage(labels.revenue)}
data={data?.country.map(({ name, value }: { name: string; value: number }) => ({ data={data?.country.map(({ name, value }: { name: string; value: number }) => ({
x: name, label: name,
y: value, count: value,
z: (value / data?.total.sum) * 100, percent: (value / data?.total.sum) * 100,
}))} }))}
currency={currency} currency={currency}
renderLabel={renderCountryName} renderLabel={renderCountryName}

View file

@ -26,6 +26,7 @@ export function UTM({ websiteId, startDate, endDate }: UTMProps) {
<Column gap> <Column gap>
{UTM_PARAMS.map(param => { {UTM_PARAMS.map(param => {
const items = data?.[param]; const items = data?.[param];
const chartData = { const chartData = {
labels: items.map(({ utm }) => utm), labels: items.map(({ utm }) => utm),
datasets: [ datasets: [
@ -50,9 +51,9 @@ export function UTM({ websiteId, startDate, endDate }: UTMProps) {
<ListTable <ListTable
metric={formatMessage(labels.views)} metric={formatMessage(labels.views)}
data={items.map(({ utm, views }) => ({ data={items.map(({ utm, views }) => ({
x: utm, label: utm,
y: views, count: views,
z: (views / total) * 100, percent: (views / total) * 100,
}))} }))}
/> />
</Column> </Column>

View file

@ -11,7 +11,7 @@ export function RealtimeCountries({ data }) {
const { countryNames } = useCountryNames(locale); const { countryNames } = useCountryNames(locale);
const renderCountryName = useCallback( const renderCountryName = useCallback(
({ x: code }) => ( ({ label: code }) => (
<span className={classNames(styles.row)}> <span className={classNames(styles.row)}>
<TypeIcon type="country" value={code} /> <TypeIcon type="country" value={code} />
{countryNames[code]} {countryNames[code]}
@ -24,7 +24,11 @@ export function RealtimeCountries({ data }) {
<ListTable <ListTable
title={formatMessage(labels.countries)} title={formatMessage(labels.countries)}
metric={formatMessage(labels.visitors)} metric={formatMessage(labels.visitors)}
data={data} data={data.map(({ x, y, z }: { x: string; y: number; z: number }) => ({
label: x,
count: y,
percent: z,
}))}
renderLabel={renderCountryName} renderLabel={renderCountryName}
/> />
); );

View file

@ -27,7 +27,7 @@ export function RealtimeUrls({ data }: { data: any }) {
}, },
]; ];
const renderLink = ({ x }) => { const renderLink = ({ label: x }) => {
const domain = x.startsWith('/') ? website?.domain : ''; const domain = x.startsWith('/') ? website?.domain : '';
return ( return (
<a href={`//${domain}${x}`} target="_blank" rel="noreferrer noopener"> <a href={`//${domain}${x}`} target="_blank" rel="noreferrer noopener">
@ -70,7 +70,11 @@ export function RealtimeUrls({ data }: { data: any }) {
title={formatMessage(labels.referrers)} title={formatMessage(labels.referrers)}
metric={formatMessage(labels.views)} metric={formatMessage(labels.views)}
renderLabel={renderLink} renderLabel={renderLink}
data={domains} data={domains.map(({ x, y, z }: { x: string; y: number; z: number }) => ({
label: x,
count: y,
percent: z,
}))}
/> />
)} )}
{filter === FILTER_PAGES && ( {filter === FILTER_PAGES && (
@ -78,7 +82,11 @@ export function RealtimeUrls({ data }: { data: any }) {
title={formatMessage(labels.pages)} title={formatMessage(labels.pages)}
metric={formatMessage(labels.views)} metric={formatMessage(labels.views)}
renderLabel={renderLink} renderLabel={renderLink}
data={pages} data={pages.map(({ x, y, z }: { x: string; y: number; z: number }) => ({
label: x,
count: y,
percent: z,
}))}
/> />
)} )}
</> </>