From 93933d740ff1c4c863e426323b1ab9194b81d4b9 Mon Sep 17 00:00:00 2001 From: Marin Atanasov Date: Wed, 6 Jul 2022 15:22:01 +0300 Subject: [PATCH] Data: Experiment with loading logger middleware --- packages/data/src/loading-middleware.js | 55 +++++++++++++++++++++++++ packages/data/src/redux-store/index.js | 2 + 2 files changed, 57 insertions(+) create mode 100644 packages/data/src/loading-middleware.js diff --git a/packages/data/src/loading-middleware.js b/packages/data/src/loading-middleware.js new file mode 100644 index 00000000000000..7684b886fff577 --- /dev/null +++ b/packages/data/src/loading-middleware.js @@ -0,0 +1,55 @@ +/** + * Simple loading logging redux middleware. + * + * @type {import('redux').Middleware} + */ + +const formatLoadedEntry = ( action ) => { + let formatted = action.selectorName; + + if ( action.args?.length ) { + formatted += ': ' + JSON.stringify( action.args ); + } + + return formatted; +}; + +const getCurrentTime = () => { + const date = new Date(); + return ( + date.getHours() + + ':' + + date.getMinutes() + + ':' + + date.getSeconds() + + '.' + + date.getMilliseconds() + ); +}; + +const actionTypeMap = { + START_RESOLUTION: 'Started loading', + START_RESOLUTIONS: 'Started bulk loading', + FINISH_RESOLUTION: 'Finished loading', + FINISH_RESOLUTIONS: 'Finished bulk loading', + FAIL_RESOLUTION: 'Failed loading', + FAIL_RESOLUTIONS: 'Failed bulk loading', + INVALIDATE_RESOLUTION: 'Canceled loading', +}; + +const loadingMiddleware = () => ( next ) => ( action ) => { + if ( actionTypeMap.hasOwnProperty( action.type ) ) { + // eslint-disable-next-line no-console + console.log( + getCurrentTime() + + ': ' + + actionTypeMap[ action.type ] + + ' ' + + formatLoadedEntry( action ) + ); + } + + return next( action ); +}; + +export default loadingMiddleware; diff --git a/packages/data/src/redux-store/index.js b/packages/data/src/redux-store/index.js index 2badc41a0f2919..91ed3d499192e2 100644 --- a/packages/data/src/redux-store/index.js +++ b/packages/data/src/redux-store/index.js @@ -16,6 +16,7 @@ import createReduxRoutineMiddleware from '@wordpress/redux-routine'; */ import { builtinControls } from '../controls'; import promise from '../promise-middleware'; +import loadingMiddleware from '../loading-middleware'; import createResolversCacheMiddleware from '../resolvers-cache-middleware'; import createThunkMiddleware from './thunk-middleware'; import metadataReducer from './metadata/reducer'; @@ -242,6 +243,7 @@ function instantiateReduxStore( key, options, registry, thunkArgs ) { const middlewares = [ createResolversCacheMiddleware( registry, key ), promise, + loadingMiddleware, createReduxRoutineMiddleware( normalizedControls ), createThunkMiddleware( thunkArgs ), ];