Skip to content

Commit 43cb35f

Browse files
committed
Allow tag, orphan and non-orphan visits to be filtered by domain
1 parent 9d4a334 commit 43cb35f

8 files changed

Lines changed: 31 additions & 15 deletions

File tree

src/visits/NonOrphanVisits.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ import type { MercureBoundProps } from '../mercure/helpers/boundToMercureHub';
55
import { boundToMercureHub } from '../mercure/helpers/boundToMercureHub';
66
import { Topics } from '../mercure/helpers/Topics';
77
import type { ReportExporter } from '../utils/services/ReportExporter';
8-
import type { GetVisitsOptions, LoadVisits, VisitsInfo } from './reducers/types';
8+
import type { GetVisitsOptions, LoadWithDomainVisits, VisitsInfo } from './reducers/types';
99
import type { NormalizedVisit, VisitsParams } from './types';
1010
import { VisitsHeader } from './VisitsHeader';
1111
import { VisitsStats } from './VisitsStats';
1212

1313
export type NonOrphanVisitsProps = {
14-
getNonOrphanVisits: (params: LoadVisits) => void;
14+
getNonOrphanVisits: (params: LoadWithDomainVisits) => void;
1515
nonOrphanVisits: VisitsInfo;
1616
cancelGetNonOrphanVisits: () => void;
1717
};
@@ -29,7 +29,11 @@ const NonOrphanVisits: FCWithDeps<MercureBoundProps & NonOrphanVisitsProps, NonO
2929
[reportExporter],
3030
);
3131
const loadVisits = useCallback(
32-
(params: VisitsParams, options: GetVisitsOptions) => getNonOrphanVisits({ options, params }),
32+
(params: VisitsParams, options: GetVisitsOptions) => getNonOrphanVisits({
33+
options,
34+
params,
35+
domain: params.filter?.domain,
36+
}),
3337
[getNonOrphanVisits],
3438
);
3539

src/visits/OrphanVisits.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const OrphanVisits: FCWithDeps<MercureBoundProps & OrphanVisitsProps, OrphanVisi
3737
options,
3838
params,
3939
orphanVisitsType: params.filter?.orphanVisitsType,
40+
domain: params.filter?.domain,
4041
}),
4142
[getOrphanVisits],
4243
);

src/visits/TagVisits.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@ const TagVisits: FCWithDeps<MercureBoundProps & TagVisitsProps, TagVisitsDeps> =
3030
const { ColorGenerator: colorGenerator, ReportExporter: reportExporter } = useDependencies(TagVisits);
3131
const { tag = '' } = useParams();
3232
const loadVisits = useCallback(
33-
(params: VisitsParams, options: GetVisitsOptions) => getTagVisits({ tag, params, options }),
33+
(params: VisitsParams, options: GetVisitsOptions) => getTagVisits({
34+
tag,
35+
params,
36+
options,
37+
domain: params.filter?.domain,
38+
}),
3439
[getTagVisits, tag],
3540
);
3641
const exportCsv = useCallback(

src/visits/reducers/nonOrphanVisits.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { ShlinkVisitsParams } from '@shlinkio/shlink-js-sdk/api-contract';
22
import type { ShlinkApiClient } from '../../api-contract';
33
import { isBetween } from '../../utils/dates/helpers/date';
44
import { createVisitsAsyncThunk, createVisitsReducer, lastVisitLoaderForLoader } from './common';
5-
import type { VisitsInfo } from './types';
5+
import type { LoadWithDomainVisits, VisitsInfo } from './types';
66

77
const REDUCER_PREFIX = 'shlink/orphanVisits';
88

@@ -16,11 +16,11 @@ const initialState: VisitsInfo = {
1616

1717
export const getNonOrphanVisits = (apiClientFactory: () => ShlinkApiClient) => createVisitsAsyncThunk({
1818
typePrefix: `${REDUCER_PREFIX}/getNonOrphanVisits`,
19-
createLoaders: ({ options }) => {
19+
createLoaders: ({ options, domain }: LoadWithDomainVisits) => {
2020
const apiClient = apiClientFactory();
2121
const { doIntervalFallback = false } = options;
2222

23-
const visitsLoader = async (query: ShlinkVisitsParams) => apiClient.getNonOrphanVisits(query);
23+
const visitsLoader = async (query: ShlinkVisitsParams) => apiClient.getNonOrphanVisits({ ...query, domain });
2424
const lastVisitLoader = lastVisitLoaderForLoader(doIntervalFallback, (q) => apiClient.getNonOrphanVisits(q));
2525

2626
return { visitsLoader, lastVisitLoader };

src/visits/reducers/orphanVisits.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ import { isBetween } from '../../utils/dates/helpers/date';
44
import { isOrphanVisit } from '../helpers';
55
import { createVisitsAsyncThunk, createVisitsReducer, lastVisitLoaderForLoader } from './common';
66
import type { deleteOrphanVisits } from './orphanVisitsDeletion';
7-
import type { LoadVisits, VisitsInfo } from './types';
7+
import type { LoadWithDomainVisits, VisitsInfo } from './types';
88

99
const REDUCER_PREFIX = 'shlink/orphanVisits';
1010

11-
export interface LoadOrphanVisits extends LoadVisits {
11+
export interface LoadOrphanVisits extends LoadWithDomainVisits {
1212
orphanVisitsType?: ShlinkOrphanVisitType;
1313
}
1414

@@ -30,13 +30,14 @@ const filterOrphanVisitsByType = ({ data, ...rest }: ShlinkVisitsList, type?: Sh
3030

3131
export const getOrphanVisits = (apiClientFactory: () => ShlinkApiClient) => createVisitsAsyncThunk({
3232
typePrefix: `${REDUCER_PREFIX}/getOrphanVisits`,
33-
createLoaders: ({ orphanVisitsType, options }: LoadOrphanVisits) => {
33+
createLoaders: ({ orphanVisitsType, domain, options }: LoadOrphanVisits) => {
3434
const apiClient = apiClientFactory();
3535
const { doIntervalFallback = false } = options;
3636

3737
const visitsLoader = async (query: ShlinkVisitsParams) => apiClient.getOrphanVisits({
3838
...query,
39-
type: orphanVisitsType, // Send type to the server, in case it supports filtering by type
39+
type: orphanVisitsType,
40+
domain,
4041
}).then(
4142
// We still try to filter locally, for Shlink older than 4.0.0
4243
(resp) => filterOrphanVisitsByType(resp, orphanVisitsType),

src/visits/reducers/tagVisits.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { ShlinkVisitsParams } from '@shlinkio/shlink-js-sdk/api-contract';
22
import type { ShlinkApiClient } from '../../api-contract';
33
import { filterCreatedVisitsByTag } from '../helpers';
44
import { createVisitsAsyncThunk, createVisitsReducer, lastVisitLoaderForLoader } from './common';
5-
import type { LoadVisits, VisitsInfo } from './types';
5+
import type { LoadWithDomainVisits, VisitsInfo } from './types';
66

77
const REDUCER_PREFIX = 'shlink/tagVisits';
88

@@ -21,15 +21,15 @@ const initialState: TagVisits = {
2121
progress: null,
2222
};
2323

24-
export type LoadTagVisits = LoadVisits & WithTag;
24+
export type LoadTagVisits = LoadWithDomainVisits & WithTag;
2525

2626
export const getTagVisits = (apiClientFactory: () => ShlinkApiClient) => createVisitsAsyncThunk({
2727
typePrefix: `${REDUCER_PREFIX}/getTagVisits`,
28-
createLoaders: ({ tag, options }: LoadTagVisits) => {
28+
createLoaders: ({ tag, options, domain }: LoadTagVisits) => {
2929
const apiClient = apiClientFactory();
3030
const { doIntervalFallback = false } = options;
3131

32-
const visitsLoader = (query: ShlinkVisitsParams) => apiClient.getTagVisits(tag, query);
32+
const visitsLoader = (query: ShlinkVisitsParams) => apiClient.getTagVisits(tag, { ...query, domain });
3333
const lastVisitLoader = lastVisitLoaderForLoader(doIntervalFallback, async (q) => apiClient.getTagVisits(tag, q));
3434

3535
return { visitsLoader, lastVisitLoader };

src/visits/reducers/types/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ export type LoadVisits = {
1212
options: GetVisitsOptions;
1313
};
1414

15+
export type LoadWithDomainVisits = LoadVisits & {
16+
domain?: string;
17+
};
18+
1519
export type VisitsLoaded = {
1620
visits: ShlinkVisit[];
1721
prevVisits?: ShlinkVisit[];

src/visits/types/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export interface VisitsStats {
5454
export interface VisitsFilter {
5555
orphanVisitsType?: ShlinkOrphanVisitType | undefined;
5656
excludeBots?: boolean;
57+
domain?: string;
5758
}
5859

5960
export type VisitsParams = {

0 commit comments

Comments
 (0)