mirror of
https://github.com/kremalicious/umami.git
synced 2025-02-01 12:29:35 +01:00
Moved filter params into a hook. Close #2691.
This commit is contained in:
parent
2ba87cd483
commit
ab94f5d1cd
@ -1,36 +1,12 @@
|
|||||||
import { useDateRange, useNavigation, useTimezone } from 'components/hooks';
|
|
||||||
import { zonedTimeToUtc } from 'date-fns-tz';
|
|
||||||
import useApi from './useApi';
|
import useApi from './useApi';
|
||||||
|
import { useFilterParams } from '../useFilterParams';
|
||||||
|
|
||||||
export function useWebsiteEvents(websiteId: string, options?: { [key: string]: string }) {
|
export function useWebsiteEvents(websiteId: string, options?: { [key: string]: string }) {
|
||||||
const { get, useQuery } = useApi();
|
const { get, useQuery } = useApi();
|
||||||
const [dateRange] = useDateRange(websiteId);
|
const params = useFilterParams(websiteId);
|
||||||
const { startDate, endDate, unit, offset } = dateRange;
|
|
||||||
const { timezone } = useTimezone();
|
|
||||||
const {
|
|
||||||
query: { url, referrer, os, browser, device, country, region, city, title, event },
|
|
||||||
} = useNavigation();
|
|
||||||
|
|
||||||
const params = {
|
|
||||||
startAt: +zonedTimeToUtc(startDate, timezone),
|
|
||||||
endAt: +zonedTimeToUtc(endDate, timezone),
|
|
||||||
unit,
|
|
||||||
offset,
|
|
||||||
url,
|
|
||||||
referrer,
|
|
||||||
os,
|
|
||||||
browser,
|
|
||||||
device,
|
|
||||||
country,
|
|
||||||
region,
|
|
||||||
city,
|
|
||||||
title,
|
|
||||||
timezone,
|
|
||||||
event,
|
|
||||||
};
|
|
||||||
|
|
||||||
return useQuery({
|
return useQuery({
|
||||||
queryKey: ['events', { websiteId, ...params }],
|
queryKey: ['websites:events', { websiteId, ...params }],
|
||||||
queryFn: () => get(`/websites/${websiteId}/events`, params),
|
queryFn: () => get(`/websites/${websiteId}/events`, params),
|
||||||
enabled: !!websiteId,
|
enabled: !!websiteId,
|
||||||
...options,
|
...options,
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
import useApi from './useApi';
|
|
||||||
import { UseQueryOptions } from '@tanstack/react-query';
|
import { UseQueryOptions } from '@tanstack/react-query';
|
||||||
|
import useApi from './useApi';
|
||||||
|
import { useFilterParams } from '../useFilterParams';
|
||||||
|
|
||||||
export function useWebsiteMetrics(
|
export function useWebsiteMetrics(
|
||||||
websiteId: string,
|
websiteId: string,
|
||||||
params?: { [key: string]: any },
|
type: string,
|
||||||
|
limit: number,
|
||||||
options?: Omit<UseQueryOptions & { onDataLoad?: (data: any) => void }, 'queryKey' | 'queryFn'>,
|
options?: Omit<UseQueryOptions & { onDataLoad?: (data: any) => void }, 'queryKey' | 'queryFn'>,
|
||||||
) {
|
) {
|
||||||
const { get, useQuery } = useApi();
|
const { get, useQuery } = useApi();
|
||||||
|
const params = useFilterParams(websiteId);
|
||||||
|
|
||||||
return useQuery({
|
return useQuery({
|
||||||
queryKey: [
|
queryKey: [
|
||||||
@ -14,21 +17,26 @@ export function useWebsiteMetrics(
|
|||||||
{
|
{
|
||||||
websiteId,
|
websiteId,
|
||||||
...params,
|
...params,
|
||||||
|
type,
|
||||||
|
limit,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
const filters = { ...params };
|
const filters = { ...params };
|
||||||
|
|
||||||
filters[params.type] = undefined;
|
filters[type] = undefined;
|
||||||
|
|
||||||
const data = await get(`/websites/${websiteId}/metrics`, {
|
const data = await get(`/websites/${websiteId}/metrics`, {
|
||||||
...filters,
|
...filters,
|
||||||
|
type,
|
||||||
|
limit,
|
||||||
});
|
});
|
||||||
|
|
||||||
options?.onDataLoad?.(data);
|
options?.onDataLoad?.(data);
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
},
|
},
|
||||||
|
enabled: !!websiteId,
|
||||||
...options,
|
...options,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,34 +1,18 @@
|
|||||||
import { zonedTimeToUtc } from 'date-fns-tz';
|
import { UseQueryOptions } from '@tanstack/react-query';
|
||||||
import { useApi, useDateRange, useNavigation, useTimezone } from 'components/hooks';
|
import { useApi } from './useApi';
|
||||||
|
import { useFilterParams } from '..//useFilterParams';
|
||||||
|
|
||||||
export function useWebsitePageviews(websiteId: string, options?: { [key: string]: string }) {
|
export function useWebsitePageviews(
|
||||||
|
websiteId: string,
|
||||||
|
options?: Omit<UseQueryOptions & { onDataLoad?: (data: any) => void }, 'queryKey' | 'queryFn'>,
|
||||||
|
) {
|
||||||
const { get, useQuery } = useApi();
|
const { get, useQuery } = useApi();
|
||||||
const [dateRange] = useDateRange(websiteId);
|
const params = useFilterParams(websiteId);
|
||||||
const { startDate, endDate, unit } = dateRange;
|
|
||||||
const { timezone } = useTimezone();
|
|
||||||
const {
|
|
||||||
query: { url, referrer, os, browser, device, country, region, city, title },
|
|
||||||
} = useNavigation();
|
|
||||||
|
|
||||||
const params = {
|
|
||||||
startAt: +zonedTimeToUtc(startDate, timezone),
|
|
||||||
endAt: +zonedTimeToUtc(endDate, timezone),
|
|
||||||
unit,
|
|
||||||
timezone,
|
|
||||||
url,
|
|
||||||
referrer,
|
|
||||||
os,
|
|
||||||
browser,
|
|
||||||
device,
|
|
||||||
country,
|
|
||||||
region,
|
|
||||||
city,
|
|
||||||
title,
|
|
||||||
};
|
|
||||||
|
|
||||||
return useQuery({
|
return useQuery({
|
||||||
queryKey: ['websites:pageviews', { websiteId, ...params }],
|
queryKey: ['websites:pageviews', { websiteId, ...params }],
|
||||||
queryFn: () => get(`/websites/${websiteId}/pageviews`, params),
|
queryFn: () => get(`/websites/${websiteId}/pageviews`, params),
|
||||||
|
enabled: !!websiteId,
|
||||||
...options,
|
...options,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,30 +1,14 @@
|
|||||||
import { useApi, useDateRange, useNavigation } from 'components/hooks';
|
import { useApi } from './useApi';
|
||||||
|
import { useFilterParams } from '../useFilterParams';
|
||||||
|
|
||||||
export function useWebsiteStats(websiteId: string, options?: { [key: string]: string }) {
|
export function useWebsiteStats(websiteId: string, options?: { [key: string]: string }) {
|
||||||
const { get, useQuery } = useApi();
|
const { get, useQuery } = useApi();
|
||||||
const [dateRange] = useDateRange(websiteId);
|
const params = useFilterParams(websiteId);
|
||||||
const { startDate, endDate } = dateRange;
|
|
||||||
const {
|
|
||||||
query: { url, referrer, title, os, browser, device, country, region, city },
|
|
||||||
} = useNavigation();
|
|
||||||
|
|
||||||
const params = {
|
|
||||||
startAt: +startDate,
|
|
||||||
endAt: +endDate,
|
|
||||||
url,
|
|
||||||
referrer,
|
|
||||||
title,
|
|
||||||
os,
|
|
||||||
browser,
|
|
||||||
device,
|
|
||||||
country,
|
|
||||||
region,
|
|
||||||
city,
|
|
||||||
};
|
|
||||||
|
|
||||||
return useQuery({
|
return useQuery({
|
||||||
queryKey: ['websites:stats', { websiteId, ...params }],
|
queryKey: ['websites:stats', { websiteId, ...params }],
|
||||||
queryFn: () => get(`/websites/${websiteId}/stats`, params),
|
queryFn: () => get(`/websites/${websiteId}/stats`, params),
|
||||||
|
enabled: !!websiteId,
|
||||||
...options,
|
...options,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
31
src/components/hooks/useFilterParams.ts
Normal file
31
src/components/hooks/useFilterParams.ts
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import { useNavigation } from './useNavigation';
|
||||||
|
import { useDateRange } from './useDateRange';
|
||||||
|
import { useTimezone } from './useTimezone';
|
||||||
|
import { zonedTimeToUtc } from 'date-fns-tz';
|
||||||
|
|
||||||
|
export function useFilterParams(websiteId: string) {
|
||||||
|
const [dateRange] = useDateRange(websiteId);
|
||||||
|
const { startDate, endDate, unit, offset } = dateRange;
|
||||||
|
const { timezone } = useTimezone();
|
||||||
|
const {
|
||||||
|
query: { url, referrer, title, os, browser, device, country, region, city, event },
|
||||||
|
} = useNavigation();
|
||||||
|
|
||||||
|
return {
|
||||||
|
startAt: +zonedTimeToUtc(startDate, timezone),
|
||||||
|
endAt: +zonedTimeToUtc(endDate, timezone),
|
||||||
|
unit,
|
||||||
|
offset,
|
||||||
|
timezone,
|
||||||
|
url,
|
||||||
|
referrer,
|
||||||
|
title,
|
||||||
|
os,
|
||||||
|
browser,
|
||||||
|
device,
|
||||||
|
country,
|
||||||
|
region,
|
||||||
|
city,
|
||||||
|
event,
|
||||||
|
};
|
||||||
|
}
|
@ -6,7 +6,6 @@ import LinkButton from 'components/common/LinkButton';
|
|||||||
import { DEFAULT_ANIMATION_DURATION } from 'lib/constants';
|
import { DEFAULT_ANIMATION_DURATION } from 'lib/constants';
|
||||||
import { percentFilter } from 'lib/filters';
|
import { percentFilter } from 'lib/filters';
|
||||||
import {
|
import {
|
||||||
useDateRange,
|
|
||||||
useNavigation,
|
useNavigation,
|
||||||
useWebsiteMetrics,
|
useWebsiteMetrics,
|
||||||
useMessages,
|
useMessages,
|
||||||
@ -45,34 +44,14 @@ export function MetricsTable({
|
|||||||
}: MetricsTableProps) {
|
}: MetricsTableProps) {
|
||||||
const [search, setSearch] = useState('');
|
const [search, setSearch] = useState('');
|
||||||
const { formatValue } = useFormat();
|
const { formatValue } = useFormat();
|
||||||
const [{ startDate, endDate }] = useDateRange(websiteId);
|
const { renderUrl } = useNavigation();
|
||||||
const {
|
|
||||||
renderUrl,
|
|
||||||
query: { url, referrer, title, os, browser, device, country, region, city },
|
|
||||||
} = useNavigation();
|
|
||||||
const { formatMessage, labels } = useMessages();
|
const { formatMessage, labels } = useMessages();
|
||||||
const { dir } = useLocale();
|
const { dir } = useLocale();
|
||||||
|
|
||||||
const { data, isLoading, isFetched, error } = useWebsiteMetrics(
|
const { data, isLoading, isFetched, error } = useWebsiteMetrics(websiteId, type, limit, {
|
||||||
websiteId,
|
retryDelay: delay || DEFAULT_ANIMATION_DURATION,
|
||||||
{
|
onDataLoad,
|
||||||
type,
|
});
|
||||||
startAt: +startDate,
|
|
||||||
endAt: +endDate,
|
|
||||||
url,
|
|
||||||
referrer,
|
|
||||||
os,
|
|
||||||
title,
|
|
||||||
browser,
|
|
||||||
device,
|
|
||||||
country,
|
|
||||||
region,
|
|
||||||
city,
|
|
||||||
limit,
|
|
||||||
search,
|
|
||||||
},
|
|
||||||
{ retryDelay: delay || DEFAULT_ANIMATION_DURATION, onDataLoad },
|
|
||||||
);
|
|
||||||
|
|
||||||
const filteredData = useMemo(() => {
|
const filteredData = useMemo(() => {
|
||||||
if (data) {
|
if (data) {
|
||||||
|
Loading…
Reference in New Issue
Block a user