analytics/assets/js/dashboard/stats/modals/referrer-drilldown.js

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