diff --git a/src/short-urls/reducers/shortUrlsList.ts b/src/short-urls/reducers/shortUrlsList.ts index fdf2e4c0..7137a41d 100644 --- a/src/short-urls/reducers/shortUrlsList.ts +++ b/src/short-urls/reducers/shortUrlsList.ts @@ -56,13 +56,13 @@ export default buildReducer({ state, )), ), - [CREATE_VISITS]: (state, { createdVisits }) => assocPath( + [CREATE_VISITS]: (state, { payload }) => assocPath( ['shortUrls', 'data'], state.shortUrls?.data?.map( (currentShortUrl) => { // Find the last of the new visit for this short URL, and pick the amount of visits from it const lastVisit = last( - createdVisits.filter( + payload.createdVisits.filter( ({ shortUrl }) => shortUrl && shortUrlMatches(currentShortUrl, shortUrl.shortCode, shortUrl.domain), ), ); diff --git a/src/tags/reducers/tagsList.ts b/src/tags/reducers/tagsList.ts index cf7a7ac6..a31c060d 100644 --- a/src/tags/reducers/tagsList.ts +++ b/src/tags/reducers/tagsList.ts @@ -99,9 +99,9 @@ export default buildReducer({ ...state, filteredTags: state.tags.filter((tag) => tag.toLowerCase().match(searchTerm.toLowerCase())), }), - [CREATE_VISITS]: (state, { createdVisits }) => ({ + [CREATE_VISITS]: (state, { payload }) => ({ ...state, - stats: increaseVisitsForTags(calculateVisitsPerTag(createdVisits), state.stats), + stats: increaseVisitsForTags(calculateVisitsPerTag(payload.createdVisits), state.stats), }), [CREATE_SHORT_URL]: ({ tags: stateTags, ...rest }, { result }) => ({ ...rest, diff --git a/src/visits/reducers/domainVisits.ts b/src/visits/reducers/domainVisits.ts index 17ee4f63..72f83300 100644 --- a/src/visits/reducers/domainVisits.ts +++ b/src/visits/reducers/domainVisits.ts @@ -56,10 +56,10 @@ export default buildReducer({ [GET_DOMAIN_VISITS_CANCEL]: (state) => ({ ...state, cancelLoad: true }), [GET_DOMAIN_VISITS_PROGRESS_CHANGED]: (state, { progress }) => ({ ...state, progress }), [GET_DOMAIN_VISITS_FALLBACK_TO_INTERVAL]: (state, { fallbackInterval }) => ({ ...state, fallbackInterval }), - [CREATE_VISITS]: (state, { createdVisits }) => { + [CREATE_VISITS]: (state, { payload }) => { const { domain, visits, query = {} } = state; const { startDate, endDate } = query; - const newVisits = createdVisits + const newVisits = payload.createdVisits .filter(({ shortUrl, visit }) => shortUrl && domainMatches(shortUrl, domain) && isBetween(visit.date, startDate, endDate)) .map(({ visit }) => visit); diff --git a/src/visits/reducers/nonOrphanVisits.ts b/src/visits/reducers/nonOrphanVisits.ts index 05133800..84e2555f 100644 --- a/src/visits/reducers/nonOrphanVisits.ts +++ b/src/visits/reducers/nonOrphanVisits.ts @@ -52,10 +52,10 @@ export default buildReducer({ [GET_NON_ORPHAN_VISITS_CANCEL]: (state) => ({ ...state, cancelLoad: true }), [GET_NON_ORPHAN_VISITS_PROGRESS_CHANGED]: (state, { progress }) => ({ ...state, progress }), [GET_NON_ORPHAN_VISITS_FALLBACK_TO_INTERVAL]: (state, { fallbackInterval }) => ({ ...state, fallbackInterval }), - [CREATE_VISITS]: (state, { createdVisits }) => { + [CREATE_VISITS]: (state, { payload }) => { const { visits, query = {} } = state; const { startDate, endDate } = query; - const newVisits = createdVisits + const newVisits = payload.createdVisits .filter(({ visit }) => isBetween(visit.date, startDate, endDate)) .map(({ visit }) => visit); diff --git a/src/visits/reducers/orphanVisits.ts b/src/visits/reducers/orphanVisits.ts index 8b6aee65..27023458 100644 --- a/src/visits/reducers/orphanVisits.ts +++ b/src/visits/reducers/orphanVisits.ts @@ -55,10 +55,10 @@ export default buildReducer({ [GET_ORPHAN_VISITS_CANCEL]: (state) => ({ ...state, cancelLoad: true }), [GET_ORPHAN_VISITS_PROGRESS_CHANGED]: (state, { progress }) => ({ ...state, progress }), [GET_ORPHAN_VISITS_FALLBACK_TO_INTERVAL]: (state, { fallbackInterval }) => ({ ...state, fallbackInterval }), - [CREATE_VISITS]: (state, { createdVisits }) => { + [CREATE_VISITS]: (state, { payload }) => { const { visits, query = {} } = state; const { startDate, endDate } = query; - const newVisits = createdVisits + const newVisits = payload.createdVisits .filter(({ visit, shortUrl }) => !shortUrl && isBetween(visit.date, startDate, endDate)) .map(({ visit }) => visit); diff --git a/src/visits/reducers/shortUrlVisits.ts b/src/visits/reducers/shortUrlVisits.ts index 00327c46..2bfe505e 100644 --- a/src/visits/reducers/shortUrlVisits.ts +++ b/src/visits/reducers/shortUrlVisits.ts @@ -60,10 +60,10 @@ export default buildReducer({ [GET_SHORT_URL_VISITS_CANCEL]: (state) => ({ ...state, cancelLoad: true }), [GET_SHORT_URL_VISITS_PROGRESS_CHANGED]: (state, { progress }) => ({ ...state, progress }), [GET_SHORT_URL_VISITS_FALLBACK_TO_INTERVAL]: (state, { fallbackInterval }) => ({ ...state, fallbackInterval }), - [CREATE_VISITS]: (state, { createdVisits }) => { + [CREATE_VISITS]: (state, { payload }) => { const { shortCode, domain, visits, query = {} } = state; const { startDate, endDate } = query; - const newVisits = createdVisits + const newVisits = payload.createdVisits .filter( ({ shortUrl, visit }) => shortUrl && shortUrlMatches(shortUrl, shortCode, domain) && isBetween(visit.date, startDate, endDate), diff --git a/src/visits/reducers/tagVisits.ts b/src/visits/reducers/tagVisits.ts index f2fe6b85..07372ea1 100644 --- a/src/visits/reducers/tagVisits.ts +++ b/src/visits/reducers/tagVisits.ts @@ -53,10 +53,10 @@ export default buildReducer({ [GET_TAG_VISITS_CANCEL]: (state) => ({ ...state, cancelLoad: true }), [GET_TAG_VISITS_PROGRESS_CHANGED]: (state, { progress }) => ({ ...state, progress }), [GET_TAG_VISITS_FALLBACK_TO_INTERVAL]: (state, { fallbackInterval }) => ({ ...state, fallbackInterval }), - [CREATE_VISITS]: (state, { createdVisits }) => { + [CREATE_VISITS]: (state, { payload }) => { const { tag, visits, query = {} } = state; const { startDate, endDate } = query; - const newVisits = createdVisits + const newVisits = payload.createdVisits .filter(({ shortUrl, visit }) => shortUrl?.tags.includes(tag) && isBetween(visit.date, startDate, endDate)) .map(({ visit }) => visit); diff --git a/src/visits/reducers/visitCreation.ts b/src/visits/reducers/visitCreation.ts index e2335fc4..9400c02f 100644 --- a/src/visits/reducers/visitCreation.ts +++ b/src/visits/reducers/visitCreation.ts @@ -1,13 +1,13 @@ -import { Action } from 'redux'; +import { PayloadAction } from '@reduxjs/toolkit'; import { CreateVisit } from '../types'; export const CREATE_VISITS = 'shlink/visitCreation/CREATE_VISITS'; -export interface CreateVisitsAction extends Action { +export type CreateVisitsAction = PayloadAction<{ createdVisits: CreateVisit[]; -} +}>; export const createNewVisits = (createdVisits: CreateVisit[]): CreateVisitsAction => ({ type: CREATE_VISITS, - createdVisits, + payload: { createdVisits }, }); diff --git a/src/visits/reducers/visitsOverview.ts b/src/visits/reducers/visitsOverview.ts index ec5d8fec..a9a0ff9a 100644 --- a/src/visits/reducers/visitsOverview.ts +++ b/src/visits/reducers/visitsOverview.ts @@ -30,8 +30,8 @@ export default buildReducer ({ ...initialState, loading: true }), [GET_OVERVIEW_ERROR]: () => ({ ...initialState, error: true }), [GET_OVERVIEW]: (_, { visitsCount, orphanVisitsCount }) => ({ ...initialState, visitsCount, orphanVisitsCount }), - [CREATE_VISITS]: ({ visitsCount, orphanVisitsCount = 0, ...rest }, { createdVisits }) => { - const { regularVisits, orphanVisits } = groupNewVisitsByType(createdVisits); + [CREATE_VISITS]: ({ visitsCount, orphanVisitsCount = 0, ...rest }, { payload }) => { + const { regularVisits, orphanVisits } = groupNewVisitsByType(payload.createdVisits); return { ...rest, diff --git a/test/short-urls/reducers/shortUrlsList.test.ts b/test/short-urls/reducers/shortUrlsList.test.ts index fbff5de0..a4648121 100644 --- a/test/short-urls/reducers/shortUrlsList.test.ts +++ b/test/short-urls/reducers/shortUrlsList.test.ts @@ -85,7 +85,7 @@ describe('shortUrlsListReducer', () => { error: false, }; - expect(reducer(state, { type: CREATE_VISITS, createdVisits } as any)).toEqual({ + expect(reducer(state, { type: CREATE_VISITS, payload: { createdVisits } } as any)).toEqual({ shortUrls: { data: [ { shortCode, domain: 'example.com', visitsCount: 5 }, diff --git a/test/visits/reducers/domainVisits.test.ts b/test/visits/reducers/domainVisits.test.ts index 8c9bfccd..f3d8d7d8 100644 --- a/test/visits/reducers/domainVisits.test.ts +++ b/test/visits/reducers/domainVisits.test.ts @@ -135,7 +135,7 @@ describe('domainVisitsReducer', () => { const { visits } = reducer(prevState, { type: CREATE_VISITS, - createdVisits: [{ shortUrl, visit: { date: formatIsoDate(now) ?? undefined } }], + payload: { createdVisits: [{ shortUrl, visit: { date: formatIsoDate(now) ?? undefined } }] }, } as any); expect(visits).toHaveLength(expectedVisits); diff --git a/test/visits/reducers/nonOrphanVisits.test.ts b/test/visits/reducers/nonOrphanVisits.test.ts index 7e6c2911..f4c2bc40 100644 --- a/test/visits/reducers/nonOrphanVisits.test.ts +++ b/test/visits/reducers/nonOrphanVisits.test.ts @@ -105,10 +105,10 @@ describe('nonOrphanVisitsReducer', () => { const prevState = buildState({ ...state, visits: visitsMocks }); const visit = Mock.of({ date: formatIsoDate(now) ?? undefined }); - const { visits } = reducer( - prevState, - { type: CREATE_VISITS, createdVisits: [{ visit }, { visit }] } as any, - ); + const { visits } = reducer(prevState, { + type: CREATE_VISITS, + payload: { createdVisits: [{ visit }, { visit }] }, + } as any); expect(visits).toHaveLength(expectedVisits); }); diff --git a/test/visits/reducers/orphanVisits.test.ts b/test/visits/reducers/orphanVisits.test.ts index d57eff5c..5325ac77 100644 --- a/test/visits/reducers/orphanVisits.test.ts +++ b/test/visits/reducers/orphanVisits.test.ts @@ -105,10 +105,10 @@ describe('orphanVisitsReducer', () => { const prevState = buildState({ ...state, visits: visitsMocks }); const visit = Mock.of({ date: formatIsoDate(now) ?? undefined }); - const { visits } = reducer( - prevState, - { type: CREATE_VISITS, createdVisits: [{ visit }, { visit }] } as any, - ); + const { visits } = reducer(prevState, { + type: CREATE_VISITS, + payload: { createdVisits: [{ visit }, { visit }] }, + } as any); expect(visits).toHaveLength(expectedVisits); }); diff --git a/test/visits/reducers/shortUrlVisits.test.ts b/test/visits/reducers/shortUrlVisits.test.ts index 3b7cdbb8..d396edb4 100644 --- a/test/visits/reducers/shortUrlVisits.test.ts +++ b/test/visits/reducers/shortUrlVisits.test.ts @@ -126,10 +126,10 @@ describe('shortUrlVisitsReducer', () => { visits: visitsMocks, }); - const { visits } = reducer( - prevState, - { type: CREATE_VISITS, createdVisits: [{ shortUrl, visit: { date: formatIsoDate(now) ?? undefined } }] } as any, - ); + const { visits } = reducer(prevState, { + type: CREATE_VISITS, + payload: { createdVisits: [{ shortUrl, visit: { date: formatIsoDate(now) ?? undefined } }] }, + } as any); expect(visits).toHaveLength(expectedVisits); }); diff --git a/test/visits/reducers/tagVisits.test.ts b/test/visits/reducers/tagVisits.test.ts index 5a217d24..d5fd0375 100644 --- a/test/visits/reducers/tagVisits.test.ts +++ b/test/visits/reducers/tagVisits.test.ts @@ -128,7 +128,7 @@ describe('tagVisitsReducer', () => { const { visits } = reducer(prevState, { type: CREATE_VISITS, - createdVisits: [{ shortUrl, visit: { date: formatIsoDate(now) ?? undefined } }], + payload: { createdVisits: [{ shortUrl, visit: { date: formatIsoDate(now) ?? undefined } }] }, } as any); expect(visits).toHaveLength(expectedVisits); diff --git a/test/visits/reducers/visitCreation.test.ts b/test/visits/reducers/visitCreation.test.ts index c14f8b2e..eba1d4a7 100644 --- a/test/visits/reducers/visitCreation.test.ts +++ b/test/visits/reducers/visitCreation.test.ts @@ -9,9 +9,10 @@ describe('visitCreationReducer', () => { const visit = Mock.all(); it('just returns the action with proper type', () => { - expect(createNewVisits([{ shortUrl, visit }])).toEqual( - { type: CREATE_VISITS, createdVisits: [{ shortUrl, visit }] }, - ); + expect(createNewVisits([{ shortUrl, visit }])).toEqual({ + type: CREATE_VISITS, + payload: { createdVisits: [{ shortUrl, visit }] }, + }); }); }); }); diff --git a/test/visits/reducers/visitsOverview.test.ts b/test/visits/reducers/visitsOverview.test.ts index 98ced535..8405c43a 100644 --- a/test/visits/reducers/visitsOverview.test.ts +++ b/test/visits/reducers/visitsOverview.test.ts @@ -52,19 +52,21 @@ describe('visitsOverviewReducer', () => { state({ visitsCount: 100, orphanVisitsCount: providedOrphanVisitsCount }), { type: CREATE_VISITS, - createdVisits: [ - Mock.of({ visit: Mock.all() }), - Mock.of({ visit: Mock.all() }), - Mock.of({ - visit: Mock.of({ visitedUrl: '' }), - }), - Mock.of({ - visit: Mock.of({ visitedUrl: '' }), - }), - Mock.of({ - visit: Mock.of({ visitedUrl: '' }), - }), - ], + payload: { + createdVisits: [ + Mock.of({ visit: Mock.all() }), + Mock.of({ visit: Mock.all() }), + Mock.of({ + visit: Mock.of({ visitedUrl: '' }), + }), + Mock.of({ + visit: Mock.of({ visitedUrl: '' }), + }), + Mock.of({ + visit: Mock.of({ visitedUrl: '' }), + }), + ], + }, } as unknown as GetVisitsOverviewAction & CreateVisitsAction, );