
META-INF.resources.js.utils.errors.ts Maven / Gradle / Ivy
The newest version!
/**
* SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
import {openToast} from '@liferay/object-js-components-web';
export interface ErrorMessage {
fieldName: keyof ObjectAction;
message?: string;
messages?: ErrorMessage[];
}
export interface Error {
[key: string]: string | Error;
}
export function parseError(details: ErrorMessage[], errors: Error) {
details.forEach(({fieldName, message, messages}) => {
if (message) {
errors[fieldName] = message;
}
else {
errors[fieldName] = {};
parseError(messages as ErrorMessage[], errors[fieldName] as Error);
}
});
}
export function getErrorMessage(errors: Error, errorMessages: Set) {
Object.values(errors).forEach((value) => {
if (typeof value === 'string') {
if (!errorMessages.has(value)) {
errorMessages.add(value);
}
}
else {
getErrorMessage(value, errorMessages);
}
});
}
export function handleErrors(
{detail, title}: Error,
setErrors: (value: Error) => void
) {
if (detail) {
const details = JSON.parse(detail as string);
const newErrors: Error = {};
parseError(details, newErrors);
setErrors(newErrors);
const errorMessages = new Set();
if (newErrors) {
getErrorMessage(newErrors, errorMessages);
errorMessages.forEach((message) => {
openToast({
message,
type: 'danger',
});
});
}
}
else if (title) {
openToast({
message: title as string,
type: 'danger',
});
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy