diff --git a/src/short-urls/reducers/shortUrlsList.ts b/src/short-urls/reducers/shortUrlsList.ts index 3e492bff..4cc56a07 100644 --- a/src/short-urls/reducers/shortUrlsList.ts +++ b/src/short-urls/reducers/shortUrlsList.ts @@ -1,5 +1,6 @@ +import { PayloadAction } from '@reduxjs/toolkit'; import { assoc, assocPath, last, pipe, reject } from 'ramda'; -import { Action, Dispatch } from 'redux'; +import { Dispatch } from 'redux'; import { shortUrlMatches } from '../helpers'; import { createNewVisits, CreateVisitsAction } from '../../visits/reducers/visitCreation'; import { buildReducer } from '../../utils/helpers/redux'; @@ -23,9 +24,7 @@ export interface ShortUrlsList { error: boolean; } -export interface ListShortUrlsAction extends Action { - shortUrls: ShlinkShortUrlsResponse; -} +export type ListShortUrlsAction = PayloadAction; export type ListShortUrlsCombinedAction = ( ListShortUrlsAction @@ -43,7 +42,7 @@ const initialState: ShortUrlsList = { export default buildReducer({ [LIST_SHORT_URLS_START]: (state) => ({ ...state, loading: true, error: false }), [LIST_SHORT_URLS_ERROR]: () => ({ loading: false, error: true }), - [LIST_SHORT_URLS]: (_, { shortUrls }) => ({ loading: false, error: false, shortUrls }), + [LIST_SHORT_URLS]: (_, { payload: shortUrls }) => ({ loading: false, error: false, shortUrls }), [`${SHORT_URL_DELETED}/fulfilled`]: pipe( // TODO Do not hardcode action type here (state: ShortUrlsList, { payload }: DeleteShortUrlAction) => (!state.shortUrls ? state : assocPath( ['shortUrls', 'data'], @@ -109,9 +108,9 @@ export const listShortUrls = (buildShlinkApiClient: ShlinkApiClientBuilder) => ( const { listShortUrls: shlinkListShortUrls } = buildShlinkApiClient(getState); try { - const shortUrls = await shlinkListShortUrls(params); + const payload = await shlinkListShortUrls(params); - dispatch({ type: LIST_SHORT_URLS, shortUrls }); + dispatch({ type: LIST_SHORT_URLS, payload }); } catch (e) { dispatch({ type: LIST_SHORT_URLS_ERROR }); } diff --git a/test/short-urls/reducers/shortUrlsList.test.ts b/test/short-urls/reducers/shortUrlsList.test.ts index 3eccb8d8..954f98d6 100644 --- a/test/short-urls/reducers/shortUrlsList.test.ts +++ b/test/short-urls/reducers/shortUrlsList.test.ts @@ -24,7 +24,7 @@ describe('shortUrlsListReducer', () => { })); it('returns short URLs on LIST_SHORT_URLS', () => - expect(reducer(undefined, { type: LIST_SHORT_URLS, shortUrls: { data: [] } } as any)).toEqual({ + expect(reducer(undefined, { type: LIST_SHORT_URLS, payload: { data: [] } } as any)).toEqual({ shortUrls: { data: [] }, loading: false, error: false, @@ -194,14 +194,14 @@ describe('shortUrlsListReducer', () => { afterEach(jest.clearAllMocks); it('dispatches proper actions if API client request succeeds', async () => { - const listShortUrlsMock = jest.fn().mockResolvedValue([]); + const listShortUrlsMock = jest.fn().mockResolvedValue({}); const apiClientMock = Mock.of({ listShortUrls: listShortUrlsMock }); await listShortUrls(() => apiClientMock)()(dispatch, getState); expect(dispatch).toHaveBeenCalledTimes(2); expect(dispatch).toHaveBeenNthCalledWith(1, { type: LIST_SHORT_URLS_START }); - expect(dispatch).toHaveBeenNthCalledWith(2, { type: LIST_SHORT_URLS, shortUrls: [] }); + expect(dispatch).toHaveBeenNthCalledWith(2, { type: LIST_SHORT_URLS, payload: {} }); expect(listShortUrlsMock).toHaveBeenCalledTimes(1); });