/** * API Error handling * * @author [Mike Wang] * @version 1.0.0 */ export enum ErrorType { EMPTY_FIELD = 'empty_field', ALREADY_EXISTS = 'already_exists', } // All error messages. Can be functions if inputs are required. const errorMessages = { emptyField: (field: string) => `${field} is required`, alreadyExists: (entity: string, field: string, value: string) => { return `${entity} with the ${field} "${value}" already exists`; }, }; /** * Parse an API error message in a standard way so it can be handled accordingly * * @param error * @returns */ export const parseError = (error: any) => { let message = error.response?.data?.message; console.log('API Error:', message); if (Array.isArray(message)) message = message[0]; if (!message) return {}; // parse error cases let emptyMatch = message.match(/^(.+) should not be empty/i); if (emptyMatch) return { type: ErrorType.EMPTY_FIELD, msg: errorMessages.emptyField, field: emptyMatch[1], }; let existsMatch = message.match(/Unique constraint violation: ([^\s]+)$/i); if (existsMatch) return { type: ErrorType.ALREADY_EXISTS, msg: errorMessages.alreadyExists, field: existsMatch[1], }; return {}; };