From 0a97d73b2d0dbdab51f707894d3c2308e1796e14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obermu=CC=88ller?= Date: Wed, 7 Aug 2024 10:35:21 +0200 Subject: [PATCH] feat: add reducer for errors --- package.json | 2 +- src/__tests__/loaders.js | 4 +++- src/index.ts | 7 +++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d304e75..f3cc6b9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kea-loaders", - "version": "3.0.0", + "version": "3.0.1", "description": "Action Listener side-effects for Kea", "author": "Marius Andra", "license": "MIT", diff --git a/src/__tests__/loaders.js b/src/__tests__/loaders.js index be149f8..5461932 100644 --- a/src/__tests__/loaders.js +++ b/src/__tests__/loaders.js @@ -41,7 +41,7 @@ test('loaders work', async () => { const unmount = logic.mount() expect(logic.values.users).toBe(null) - expect(Object.keys(logic.values)).toEqual(['users', 'usersLoading']) + expect(Object.keys(logic.values)).toEqual(['users', 'usersLoading', 'usersError']) expect(Object.keys(logic.actions).sort()).toEqual([ 'loadUsersAsync', 'loadUsersAsyncFailure', @@ -215,6 +215,7 @@ test('throwing calls failure', async () => { logic.actions.loadUsersSync() expect(logic.values.users).toEqual(null) + expect(logic.values.usersError).toEqual(Error('sync nope')) expect(syncListenerRan).toBe('sync nope') expect(errorList).toEqual(['sync nope']) @@ -223,6 +224,7 @@ test('throwing calls failure', async () => { await delay(10) expect(logic.values.users).toEqual(null) + expect(logic.values.usersError).toEqual(Error('async nope')) expect(asyncListenerRan).toBe('async nope') expect(errorList).toEqual(['sync nope', 'async nope']) diff --git a/src/index.ts b/src/index.ts index 5ffd01e..67530a7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -120,11 +120,15 @@ export function loaders( const newReducers: Record = {} const reducerObject: Record any> = {} const reducerLoadingObject: Record any> = {} + const reducerErrorObject: Record any> = {} Object.keys(loaderActions).forEach((actionKey) => { reducerObject[`${actionKey}Success`] = (_, { [reducerKey]: value }) => value reducerLoadingObject[`${actionKey}`] = () => true reducerLoadingObject[`${actionKey}Success`] = () => false reducerLoadingObject[`${actionKey}Failure`] = () => false + reducerErrorObject[`${actionKey}`] = () => null + reducerErrorObject[`${actionKey}Success`] = () => null + reducerErrorObject[`${actionKey}Failure`] = (_, { errorObject }) => errorObject }) if (typeof logic.reducers[reducerKey] === 'undefined') { newReducers[reducerKey] = [defaultValue, reducerObject] @@ -134,6 +138,9 @@ export function loaders( if (typeof logic.reducers[`${reducerKey}Loading`] === 'undefined') { newReducers[`${reducerKey}Loading`] = [false, reducerLoadingObject] } + if (typeof logic.reducers[`${reducerKey}Error`] === 'undefined') { + newReducers[`${reducerKey}Error`] = [false, reducerErrorObject] + } const newListeners: Record = {} Object.entries(loaderActions).forEach(([actionKey, listener]) => {