89 lines
2.4 KiB
JavaScript
89 lines
2.4 KiB
JavaScript
import React, { useCallback } from 'react'
|
|
import { useParams } from 'react-router-dom';
|
|
|
|
import Modal from './modal'
|
|
import { hasGoalFilter, isRealTimeDashboard } from "../../util/filters";
|
|
import BreakdownModal from "./breakdown-modal";
|
|
import * as metrics from "../reports/metrics";
|
|
import * as url from "../../util/url";
|
|
import { addFilter } from "../../query";
|
|
import { useQueryContext } from "../../query-context";
|
|
import { useSiteContext } from "../../site-context";
|
|
|
|
function ReferrerDrilldownModal() {
|
|
const { referrer } = useParams();
|
|
const { query } = useQueryContext();
|
|
const site = useSiteContext();
|
|
|
|
const reportInfo = {
|
|
title: "Referrer Drilldown",
|
|
dimension: 'referrer',
|
|
endpoint: url.apiPath(site, `/referrers/${referrer}`),
|
|
dimensionLabel: "Referrer"
|
|
}
|
|
|
|
const getFilterInfo = useCallback((listItem) => {
|
|
return {
|
|
prefix: reportInfo.dimension,
|
|
filter: ['is', reportInfo.dimension, [listItem.name]]
|
|
}
|
|
}, [reportInfo.dimension])
|
|
|
|
const addSearchFilter = useCallback((query, searchString) => {
|
|
return addFilter(query, ['contains', reportInfo.dimension, [searchString]])
|
|
}, [reportInfo.dimension])
|
|
|
|
function chooseMetrics() {
|
|
if (hasGoalFilter(query)) {
|
|
return [
|
|
metrics.createTotalVisitors(),
|
|
metrics.createVisitors({ renderLabel: (_query) => 'Conversions' }),
|
|
metrics.createConversionRate()
|
|
]
|
|
}
|
|
|
|
if (isRealTimeDashboard(query)) {
|
|
return [
|
|
metrics.createVisitors({ renderLabel: (_query) => 'Current visitors' })
|
|
]
|
|
}
|
|
|
|
return [
|
|
metrics.createVisitors({ renderLabel: (_query) => "Visitors" }),
|
|
metrics.createBounceRate(),
|
|
metrics.createVisitDuration()
|
|
]
|
|
}
|
|
|
|
const renderIcon = useCallback((listItem) => {
|
|
return (
|
|
<img
|
|
alt=""
|
|
src={`/favicon/sources/${encodeURIComponent(listItem.name)}`}
|
|
className="h-4 w-4 mr-2 align-middle inline"
|
|
/>
|
|
)
|
|
}, [])
|
|
|
|
const getExternalLinkURL = useCallback((listItem) => {
|
|
if (listItem.name !== "Direct / None") {
|
|
return '//' + listItem.name
|
|
}
|
|
}, [])
|
|
|
|
return (
|
|
<Modal>
|
|
<BreakdownModal
|
|
reportInfo={reportInfo}
|
|
metrics={chooseMetrics()}
|
|
getFilterInfo={getFilterInfo}
|
|
addSearchFilter={addSearchFilter}
|
|
renderIcon={renderIcon}
|
|
getExternalLinkURL={getExternalLinkURL}
|
|
/>
|
|
</Modal>
|
|
)
|
|
}
|
|
|
|
export default ReferrerDrilldownModal
|