All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.page_editor.app.contexts.LocalConfigContext.tsx Maven / Gradle / Ivy

The newest version!
/**
 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
 */

import React, {
	Dispatch,
	ReactNode,
	SetStateAction,
	useCallback,
	useContext,
	useState,
} from 'react';

import {setIn} from '../utils/setIn';

type ItemConfig = Record;

type Config = Record;

const INITIAL_STATE: {
	config: Config;
	setConfig: Dispatch>;
} = {
	config: {},
	setConfig: () => {},
};

const LocalConfigContext = React.createContext(INITIAL_STATE);

function LocalConfigContextProvider({children}: {children: ReactNode}) {
	const [config, setConfig] = useState({});

	return (
		
			{children}
		
	);
}

function useItemLocalConfig(itemId: string) {
	const {config} = useContext(LocalConfigContext);

	return config[itemId] || {};
}

const useUpdateItemLocalConfig = () => {
	const {setConfig} = useContext(LocalConfigContext);

	return useCallback(
		(itemId: string, itemConfig: ItemConfig) =>
			setConfig((previousConfig) => {
				const currentItemConfig = previousConfig[itemId] || {};

				return setIn(previousConfig, [itemId], {
					...currentItemConfig,
					...itemConfig,
				});
			}),
		[setConfig]
	);
};

export {
	LocalConfigContextProvider,
	useItemLocalConfig,
	useUpdateItemLocalConfig,
};




© 2015 - 2025 Weber Informatics LLC | Privacy Policy