# elementor/3.10.0-dev1/app/modules/onboarding/assets/js/context/context.js

Elementor Website Builder – more than just a page builder, version 3.10.0-dev1. 48 lines.

- Page: https://pluginprobe.com/plugins/elementor/3.10.0-dev1/code/app/modules/onboarding/assets/js/context/context.js
- Raw: https://pluginprobe.com/plugins/elementor/3.10.0-dev1/raw/app/modules/onboarding/assets/js/context/context.js
- Modified: 2022-10-03T17:24:38+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/elementor/3.10.0-dev1/code/app/modules/onboarding/assets/js/context/context.js#L10-L20`.

```javascript
import { createContext, useCallback, useState } from 'react';

export const OnboardingContext = createContext( {} );

export function ContextProvider( props ) {
	const onboardingConfig = elementorAppConfig.onboarding,
		initialState = {
			// eslint-disable-next-line camelcase
			hasPro: elementorAppConfig.hasPro,
			isLibraryConnected: onboardingConfig.isLibraryConnected,
			isHelloThemeInstalled: onboardingConfig.helloInstalled,
			isHelloThemeActivated: onboardingConfig.helloActivated,
			siteName: onboardingConfig.siteName,
			siteLogo: onboardingConfig.siteLogo,
			proNotice: '',
			currentStep: '',
			nextStep: '',
			steps: {
				account: false,
				hello: false,
				siteName: false,
				siteLogo: false,
				goodToGo: false,
			},
		},
		[ state, setState ] = useState( initialState ),
		updateState = useCallback( ( newState ) => {
			setState( ( prev ) => ( { ...prev, ...newState } ) );
		}, [ setState ] ),
		getStateObjectToUpdate = ( stateObject, mainChangedPropertyKey, subChangedPropertyKey, subChangedPropertyValue ) => {
			const mutatedStateCopy = JSON.parse( JSON.stringify( stateObject ) );

			mutatedStateCopy[ mainChangedPropertyKey ][ subChangedPropertyKey ] = subChangedPropertyValue;

			return mutatedStateCopy;
		};

	return (
		<OnboardingContext.Provider value={ { state, setState, updateState, getStateObjectToUpdate } }>
			{ props.children }
		</OnboardingContext.Provider>
	);
}

ContextProvider.propTypes = {
	children: PropTypes.any,
};

```
