File "store.js"

Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/woocommerce-paypal-payments/modules/ppcp-settings/resources/js/data/store.js
File size: 1.68 KB
MIME-type: text/x-java
Charset: utf-8

import { createReduxStore, register, combineReducers } from '@wordpress/data';
import { controls } from '@wordpress/data-controls';
import { STORE_NAME } from './constants';
import * as onboarding from './onboarding';

const actions = {};
const selectors = {};
const resolvers = {};

[ onboarding ].forEach( ( item ) => {
	Object.assign( actions, { ...item.actions } );
	Object.assign( selectors, { ...item.selectors } );
	Object.assign( resolvers, { ...item.resolvers } );
} );

const reducer = combineReducers( {
	onboarding: onboarding.reducer,
} );

export const initStore = () => {
	const store = createReduxStore( STORE_NAME, {
		reducer,
		controls,
		actions,
		selectors,
		resolvers,
	} );

	register( store );

	/* eslint-disable no-console */
	// Provide a debug tool to inspect the Redux store via the JS console.
	if ( window.ppcpSettings?.debug && console?.groupCollapsed ) {
		window.ppcpSettings.dumpStore = () => {
			const storeSelector = `wp.data.select('${ STORE_NAME }')`;
			console.group( `[STORE] ${ storeSelector }` );

			const storeState = wp.data.select( STORE_NAME );
			Object.keys( selectors ).forEach( ( selector ) => {
				console.groupCollapsed( `[SELECTOR] .${ selector }()` );
				console.table( storeState[ selector ]() );
				console.groupEnd();
			} );

			console.groupEnd();
		};
		window.ppcpSettings.resetStore = () => {
			wp.data.dispatch( STORE_NAME ).resetOnboarding();
			wp.data.dispatch( STORE_NAME ).persist();
		};
		window.ppcpSettings.startOnboarding = () => {
			wp.data.dispatch( STORE_NAME ).setCompleted( false );
			wp.data.dispatch( STORE_NAME ).setOnboardingStep( 0 );
			wp.data.dispatch( STORE_NAME ).persist();
		};
	}
	/* eslint-enable no-console */
};