import { PropsWithChildren } from "react"; function formatError(error: any): any { if (!error || (Array.isArray(error) && !error.length)) { return ""; } if (typeof error === "string") { return error; } if (Array.isArray(error)) { return error.map(formatError); } if (Object.prototype.hasOwnProperty.call(error, "errors")) { return Object.keys(error.errors).map((key, index) => { const item = error.errors[key]; return (
{item.name} ({item.path}) {" "} - {item.message}
); }); } // If this is a standard error. if (Object.prototype.hasOwnProperty.call(error, "message")) { return error.message; } // If this is a joy validation error. if (Object.prototype.hasOwnProperty.call(error, "name") && error.name === "ValidationError") { return error.details.map((item: any, index: number) => { return
{item.message}
; }); } // If a conflict error occurs on a form, the form is returned. if (Object.prototype.hasOwnProperty.call(error, "_id") && Object.prototype.hasOwnProperty.call(error, "display")) { return "Another user has saved this form already. Please reload and re-apply your changes."; } return "An error occurred. See console logs for details."; } export interface AlertProps { message?: string | any | string[]; type?: string; } export function Alert({ children, message, type = "danger" }: PropsWithChildren) { return (
{formatError(message)} {children}
); }