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

META-INF.resources.js.contexts.StyleErrorsContext.tsx Maven / Gradle / Ivy

/**
 * 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';

const DEFAULT_ID = 'defaultId';

interface Error {
	error: string;
	value: string;
}

type State = Record>;

const StyleErrorsStateContext = React.createContext<{
	setState: Dispatch>;
	state: State;
}>({
	setState: () => {},
	state: {},
});

interface Props {
	children: ReactNode;
	initialState?: State;
}

export function StyleErrorsContextProvider({
	children,
	initialState = {},
}: Props) {
	const [state, setState] = useState(initialState);

	return (
		
			{children}
		
	);
}

export function useDeleteStyleError() {
	const {setState, state} = useContext(StyleErrorsStateContext);

	return useCallback(
		(fieldName: string, itemId: string = DEFAULT_ID) => {
			if (state[itemId]?.[fieldName]) {
				const filteredErrors: Record = {};
				const {[itemId]: itemErrors, ...rest} = state;

				for (const key in itemErrors) {
					if (key !== fieldName) {
						filteredErrors[key] = itemErrors[key];
					}
				}

				const nextState = {
					...rest,
					...(!!Object.keys(filteredErrors).length && {
						[itemId]: filteredErrors,
					}),
				};

				setState(nextState);
			}
		},
		[setState, state]
	);
}

export function useHasStyleErrors() {
	const {state} = useContext(StyleErrorsStateContext);

	return !!Object.keys(state).length;
}

export function useSetStyleError() {
	const {setState, state} = useContext(StyleErrorsStateContext);

	return useCallback(
		(fieldName, value, itemId = DEFAULT_ID) => {
			setState({
				...state,
				[itemId]: {
					...state[itemId],
					[fieldName]: value,
				},
			});
		},
		[setState, state]
	);
}

export function useStyleErrors() {
	const {state} = useContext(StyleErrorsStateContext);

	return state;
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy