Skip to content

Commit ebf1fd8

Browse files
apataRobertJoonas
andauthored
Migrate Conversions, Props reports to /query endpoint (#6440)
* Migrate conversions and props * Add option to unpack percentage column and hide metrics if all null * afterFetchData -> onDataReady * remove redundant isPageviewGoal check * get rid of duplicate loading state and legacy imported warning bubble * deduplicate BAR_COLOR * deduplicate getGoalFilterInfo fn * fix getMetrics after rebase Also changes the order of average and total revenue in goals details view to be total revenue first, then average -- like everywhere else. * share prop field types between index and details breakdowns * useColumnsHiddenForAllNull shared hook * shared makeGetCustomPropFilterInfo * wider columns on desktop * hide certain metrics on mobile * add shared dimensionOrderBy function --------- Co-authored-by: Robert Joonas <robertjoonas16@gmail.com>
1 parent 125d868 commit ebf1fd8

20 files changed

Lines changed: 762 additions & 563 deletions

assets/js/dashboard/stats-query.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export type ApiFilter =
1919
export type NonTimeDimension =
2020
| apiTypes.SimpleFilterDimensions
2121
| apiTypes.CustomPropertyFilterDimensions
22+
| apiTypes.GoalDimension
2223

2324
export type TimeDimension = apiTypes.TimeDimensions | 'time:minute'
2425

assets/js/dashboard/stats/behaviours/conversions.js

Lines changed: 0 additions & 58 deletions
This file was deleted.
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import React, { ReactNode, useCallback } from 'react'
2+
3+
import {
4+
DimensionCellWithBar,
5+
DimensionCellWithBarProps,
6+
IndexBreakdown
7+
} from '../reports/index-breakdown'
8+
import {
9+
BREAKDOWN_REPORTS,
10+
BreakdownReportKey
11+
} from '../reports/reports-config'
12+
import { QueryApiResponse, QueryResultRow } from '../../api'
13+
import { NonTimeDimension } from '../../stats-query'
14+
import { FilterInfo } from '../../components/drilldown-link'
15+
import {
16+
BEHAVIOURS_BAR_COLOR,
17+
BEHAVIOURS_METRIC_COLUMN_WIDTH,
18+
BEHAVIOURS_METRICS_HIDDEN_ON_MOBILE
19+
} from '.'
20+
import { useSiteContext } from '../../site-context'
21+
22+
type ConversionsProps = {
23+
onDataReady?: (data: QueryApiResponse) => void
24+
onGoalFilterClick?: (goalName: string) => void
25+
}
26+
27+
export default function Conversions({
28+
onDataReady,
29+
onGoalFilterClick
30+
}: ConversionsProps): ReactNode {
31+
const site = useSiteContext()
32+
const reportConfig = BREAKDOWN_REPORTS[BreakdownReportKey.goals]
33+
34+
/*global BUILD_EXTRA*/
35+
const metrics = reportConfig.getMetrics({
36+
isRevenueAvailable: BUILD_EXTRA && site.revenueGoals.length > 0
37+
})
38+
39+
const DimensionElement = useCallback(
40+
(props: DimensionCellWithBarProps) => {
41+
const goalName = props.row.dimensions[0]
42+
return (
43+
<DimensionCellWithBar
44+
{...props}
45+
barClassName={BEHAVIOURS_BAR_COLOR}
46+
text={goalName}
47+
getFilterInfo={getGoalsFilterInfo}
48+
onClick={() => onGoalFilterClick && onGoalFilterClick(goalName)}
49+
/>
50+
)
51+
},
52+
[onGoalFilterClick]
53+
)
54+
55+
return (
56+
<IndexBreakdown
57+
metrics={metrics}
58+
dimensions={reportConfig.dimensions}
59+
dimensionLabel={reportConfig.dimensionLabel}
60+
alwaysOnFilters={reportConfig.alwaysOnFilters}
61+
DimensionElement={DimensionElement}
62+
onDataReady={onDataReady}
63+
hideMetricsIfAllNull={['total_revenue', 'average_revenue']}
64+
hideMetricsOnMobile={BEHAVIOURS_METRICS_HIDDEN_ON_MOBILE}
65+
metricColumnWidth={BEHAVIOURS_METRIC_COLUMN_WIDTH}
66+
/>
67+
)
68+
}
69+
70+
export function getGoalsFilterInfo(
71+
_dimension: NonTimeDimension,
72+
row: QueryResultRow
73+
): FilterInfo {
74+
const goalName = row.dimensions[0]
75+
return {
76+
prefix: 'goal',
77+
filter: ['is', 'goal', [goalName]]
78+
}
79+
}

0 commit comments

Comments
 (0)