parsley/app/javascript/lib/Errors.js
2018-04-01 21:43:23 -05:00

80 lines
1.8 KiB
JavaScript

export function ApiError(message, response) {
this.message = (message || "Unknown API Error Occurred");
this.response = response;
}
ApiError.prototype = Object.assign(new Error(), {
name: "ApiError",
responseCode: function() {
if (this.response) {
return this.response.status;
} else {
return null;
}
}
});
export function ApiServerError(message, response) {
this.message = (message || "Unknown API Server Error Occurred");
this.response = response;
}
ApiServerError.prototype = Object.assign(new ApiError(), {
name: "ApiServerError"
});
export function ApiNotFoundError(message, response) {
this.message = (message || "Unknown API Server Error Occurred");
this.response = response;
}
ApiNotFoundError.prototype = Object.assign(new ApiError(), {
name: "ApiNotFoundError"
});
export function ApiValidationError(message, response, json) {
this.message = (message || "Server returned a validation error");
this.response = response;
this.json = json;
}
ApiValidationError.prototype = Object.assign(new ApiError(), {
name: "ApiValidationError",
validationErrors: function() {
const errors = new Map();
if (this.json) {
for (let key in this.json) {
errors.set(key, this.json[key]);
}
} else {
errors.set("base", ["unknown error"]);
}
return errors;
},
formattedValidationErrors: function() {
const errors = [];
if (this.json) {
for (let key in this.json) {
errors.push(key + ": " + this.json[key].join(", "));
}
return errors;
} else {
return ["unable to determine validation errors"];
}
}
});
export function onlyFor(errorType, handler) {
return (err) => {
if (err instanceof errorType) {
return handler(err);
} else {
return Promise.reject(err);
}
};
}