57 lines
1.2 KiB
JavaScript
57 lines
1.2 KiB
JavaScript
import Vue from "vue";
|
|
|
|
export default class {
|
|
constructor() {
|
|
this.errors = {};
|
|
}
|
|
|
|
record(errors) {
|
|
this.errors = Object.assign({}, this.errors, errors);
|
|
}
|
|
|
|
any() {
|
|
return Object.keys(this.errors).length > 0;
|
|
}
|
|
|
|
has(key) {
|
|
return this.errors.hasOwnProperty(this.normalizeKey(key));
|
|
}
|
|
|
|
get(key) {
|
|
if (this.errors[this.normalizeKey(key)]) {
|
|
return this.errors[this.normalizeKey(key)][0];
|
|
}
|
|
}
|
|
|
|
set(errors = {}) {
|
|
this.errors = Object.assign({}, this.errors, errors);
|
|
}
|
|
|
|
clear(keys) {
|
|
if (keys === undefined) {
|
|
return;
|
|
}
|
|
|
|
keys = Array.isArray(keys) ? keys : [keys];
|
|
|
|
keys.forEach((key) => {
|
|
Vue.delete(this.errors, this.normalizeKey(key));
|
|
});
|
|
}
|
|
|
|
reset() {
|
|
this.errors = {};
|
|
}
|
|
|
|
normalizeKey(key) {
|
|
let keyParts = key.split("[");
|
|
|
|
// No need to normalize the key.
|
|
if (keyParts.length === 1) {
|
|
return key;
|
|
}
|
|
|
|
return keyParts.join(".").slice(0, -1).replace(/]/g, "");
|
|
}
|
|
}
|