# elementor/3.8.0-beta1/app/modules/kit-library/assets/js/context/settings-context.js

Elementor Website Builder – more than just a page builder, version 3.8.0-beta1. 43 lines.

- Page: https://pluginprobe.com/plugins/elementor/3.8.0-beta1/code/app/modules/kit-library/assets/js/context/settings-context.js
- Raw: https://pluginprobe.com/plugins/elementor/3.8.0-beta1/raw/app/modules/kit-library/assets/js/context/settings-context.js
- Modified: 2022-09-19T16:26:20+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.8.0-beta1/code/app/modules/kit-library/assets/js/context/settings-context.js#L10-L20`.

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

const SettingsContext = createContext( {} );

/**
 * Consume the context
 *
 * @return {{emptyTrashDays: number}} context value
 */
export function useSettingsContext() {
	return useContext( SettingsContext );
}

/**
 * Settings Provider
 *
 * @param {*} props
 * @return {JSX.Element} element
 * @function Object() { [native code] }
 */
export function SettingsProvider( props ) {
	const [ settings, setSettings ] = useState( {} );

	const updateSettings = useCallback( ( newSettings ) => {
		setSettings( ( prev ) => ( { ...prev, ...newSettings } ) );
	}, [ setSettings ] );

	useEffect( () => {
		setSettings( props.value );
	}, [ setSettings ] );

	return (
		<SettingsContext.Provider value={ { settings, setSettings, updateSettings } }>
			{ props.children }
		</SettingsContext.Provider>
	);
}

SettingsProvider.propTypes = {
	children: PropTypes.any,
	value: PropTypes.object.isRequired,
};

```
