diff --git a/src/container/types.ts b/src/container/types.ts index 84cb2df1..24b4cb73 100644 --- a/src/container/types.ts +++ b/src/container/types.ts @@ -21,7 +21,7 @@ export interface ShlinkState { servers: ServersMap; selectedServer: SelectedServer; shortUrlsList: ShortUrlsList; - shortUrlCreationResult: ShortUrlCreation; + shortUrlCreation: ShortUrlCreation; shortUrlDeletion: ShortUrlDeletion; shortUrlEdition: ShortUrlEdition; shortUrlVisits: ShortUrlVisits; diff --git a/src/reducers/index.ts b/src/reducers/index.ts index 9e473c05..9c412690 100644 --- a/src/reducers/index.ts +++ b/src/reducers/index.ts @@ -21,7 +21,7 @@ export default (container: IContainer) => combineReducers({ servers: serversReducer, selectedServer: selectedServerReducer, shortUrlsList: shortUrlsListReducer, - shortUrlCreationResult: container.shortUrlCreationReducer, + shortUrlCreation: container.shortUrlCreationReducer, shortUrlDeletion: container.shortUrlDeletionReducer, shortUrlEdition: container.shortUrlEditionReducer, shortUrlDetail: container.shortUrlDetailReducer, diff --git a/src/short-urls/CreateShortUrl.tsx b/src/short-urls/CreateShortUrl.tsx index 8da5a480..890f2af5 100644 --- a/src/short-urls/CreateShortUrl.tsx +++ b/src/short-urls/CreateShortUrl.tsx @@ -12,7 +12,7 @@ export interface CreateShortUrlProps { interface CreateShortUrlConnectProps extends CreateShortUrlProps { settings: Settings; - shortUrlCreationResult: ShortUrlCreation; + shortUrlCreation: ShortUrlCreation; selectedServer: SelectedServer; createShortUrl: (data: ShortUrlData) => Promise; resetCreateShortUrl: () => void; @@ -38,7 +38,7 @@ export const CreateShortUrl = ( CreateShortUrlResult: FC, ) => ({ createShortUrl, - shortUrlCreationResult, + shortUrlCreation, resetCreateShortUrl, selectedServer, basicMode = false, @@ -50,7 +50,7 @@ export const CreateShortUrl = ( <> { @@ -59,7 +59,7 @@ export const CreateShortUrl = ( }} /> diff --git a/src/short-urls/helpers/CreateShortUrlResult.tsx b/src/short-urls/helpers/CreateShortUrlResult.tsx index 218755b3..e89bab34 100644 --- a/src/short-urls/helpers/CreateShortUrlResult.tsx +++ b/src/short-urls/helpers/CreateShortUrlResult.tsx @@ -1,7 +1,6 @@ import { faCopy as copyIcon } from '@fortawesome/free-regular-svg-icons'; import { faTimes as closeIcon } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { isNil } from 'ramda'; import { useEffect } from 'react'; import CopyToClipboard from 'react-copy-to-clipboard'; import { Tooltip } from 'reactstrap'; @@ -34,7 +33,7 @@ export const CreateShortUrlResult = (useTimeoutToggle: TimeoutToggle) => ( ); } - if (isNil(result)) { + if (!result) { return null; } diff --git a/src/short-urls/reducers/shortUrlCreation.ts b/src/short-urls/reducers/shortUrlCreation.ts index 7bdc91f8..5124701d 100644 --- a/src/short-urls/reducers/shortUrlCreation.ts +++ b/src/short-urls/reducers/shortUrlCreation.ts @@ -8,8 +8,9 @@ import { ProblemDetailsError } from '../../api/types/errors'; export const CREATE_SHORT_URL = 'shlink/createShortUrl/CREATE_SHORT_URL'; export interface ShortUrlCreation { - result: ShortUrl | null; + result?: ShortUrl; saving: boolean; + saved: boolean; error: boolean; errorData?: ProblemDetailsError; } @@ -17,8 +18,8 @@ export interface ShortUrlCreation { export type CreateShortUrlAction = PayloadAction; const initialState: ShortUrlCreation = { - result: null, saving: false, + saved: false, error: false, }; @@ -35,12 +36,15 @@ export const shortUrlCreationReducerCreator = (buildShlinkApiClient: ShlinkApiCl resetCreateShortUrl: () => initialState, }, extraReducers: (builder) => { - builder.addCase(createShortUrl.pending, (state) => ({ ...state, saving: true, error: false })); + builder.addCase(createShortUrl.pending, (state) => ({ ...state, saving: true, saved: false, error: false })); builder.addCase( createShortUrl.rejected, - (state, { error }) => ({ ...state, saving: false, error: true, errorData: parseApiError(error) }), + (state, { error }) => ({ ...state, saving: false, saved: false, error: true, errorData: parseApiError(error) }), + ); + builder.addCase( + createShortUrl.fulfilled, + (_, { payload: result }) => ({ result, saving: false, saved: true, error: false }), ); - builder.addCase(createShortUrl.fulfilled, (_, { payload: result }) => ({ result, saving: false, error: false })); }, }); diff --git a/src/short-urls/reducers/shortUrlEdition.ts b/src/short-urls/reducers/shortUrlEdition.ts index 267d9b23..fbdfac13 100644 --- a/src/short-urls/reducers/shortUrlEdition.ts +++ b/src/short-urls/reducers/shortUrlEdition.ts @@ -10,8 +10,8 @@ export const SHORT_URL_EDITED = 'shlink/shortUrlEdition/SHORT_URL_EDITED'; export interface ShortUrlEdition { shortUrl?: ShortUrl; saving: boolean; - error: boolean; saved: boolean; + error: boolean; errorData?: ProblemDetailsError; } diff --git a/src/short-urls/services/provideServices.ts b/src/short-urls/services/provideServices.ts index d2b865a8..8feb709b 100644 --- a/src/short-urls/services/provideServices.ts +++ b/src/short-urls/services/provideServices.ts @@ -36,7 +36,7 @@ const provideServices = (bottle: Bottle, connect: ConnectDecorator) => { bottle.serviceFactory('CreateShortUrl', CreateShortUrl, 'ShortUrlForm', 'CreateShortUrlResult'); bottle.decorator( 'CreateShortUrl', - connect(['shortUrlCreationResult', 'selectedServer', 'settings'], ['createShortUrl', 'resetCreateShortUrl']), + connect(['shortUrlCreation', 'selectedServer', 'settings'], ['createShortUrl', 'resetCreateShortUrl']), ); bottle.serviceFactory('EditShortUrl', EditShortUrl, 'ShortUrlForm'); diff --git a/test/short-urls/CreateShortUrl.test.tsx b/test/short-urls/CreateShortUrl.test.tsx index 553d1a65..2e53e8dc 100644 --- a/test/short-urls/CreateShortUrl.test.tsx +++ b/test/short-urls/CreateShortUrl.test.tsx @@ -13,7 +13,7 @@ describe('', () => { const CreateShortUrl = createShortUrlsCreator(ShortUrlForm, CreateShortUrlResult); const setUp = () => render( {}} diff --git a/test/short-urls/reducers/shortUrlCreation.test.ts b/test/short-urls/reducers/shortUrlCreation.test.ts index 94b5f02b..e99e0ea2 100644 --- a/test/short-urls/reducers/shortUrlCreation.test.ts +++ b/test/short-urls/reducers/shortUrlCreation.test.ts @@ -22,16 +22,16 @@ describe('shortUrlCreationReducer', () => { it('returns loading on CREATE_SHORT_URL_START', () => { expect(reducer(undefined, action(createShortUrl.pending.toString()))).toEqual({ - result: null, saving: true, + saved: false, error: false, }); }); it('returns error on CREATE_SHORT_URL_ERROR', () => { expect(reducer(undefined, action(createShortUrl.rejected.toString()))).toEqual({ - result: null, saving: false, + saved: false, error: true, }); }); @@ -40,14 +40,15 @@ describe('shortUrlCreationReducer', () => { expect(reducer(undefined, action(createShortUrl.fulfilled.toString(), { payload: shortUrl }))).toEqual({ result: shortUrl, saving: false, + saved: true, error: false, }); }); it('returns default state on RESET_CREATE_SHORT_URL', () => { expect(reducer(undefined, action(resetCreateShortUrl.toString()))).toEqual({ - result: null, saving: false, + saved: false, error: false, }); });