2023-12-14 16:53:05 +01:00
|
|
|
function arrayWrap(value) {
|
2024-04-15 19:39:03 +02:00
|
|
|
return Array.isArray(value) ? value : [value]
|
2023-12-14 16:53:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default class Errors {
|
|
|
|
|
constructor() {
|
2024-04-15 19:39:03 +02:00
|
|
|
this.errors = {}
|
2023-12-14 16:53:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
set(field, messages = undefined) {
|
2024-04-15 19:39:03 +02:00
|
|
|
if (typeof field === "object") {
|
|
|
|
|
this.errors = field
|
2023-12-14 16:53:05 +01:00
|
|
|
} else {
|
2024-04-15 19:39:03 +02:00
|
|
|
this.set({ ...this.errors, [field]: arrayWrap(messages) })
|
2023-12-14 16:53:05 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
all() {
|
2024-04-15 19:39:03 +02:00
|
|
|
return this.errors
|
2023-12-14 16:53:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
has(field) {
|
2024-04-15 19:39:03 +02:00
|
|
|
return Object.prototype.hasOwnProperty.call(this.errors, field)
|
2023-12-14 16:53:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
hasAny(...fields) {
|
2024-04-15 19:39:03 +02:00
|
|
|
return fields.some((field) => this.has(field))
|
2023-12-14 16:53:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
any() {
|
2024-04-15 19:39:03 +02:00
|
|
|
return Object.keys(this.errors).length > 0
|
2023-12-14 16:53:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
get(field) {
|
|
|
|
|
if (this.has(field)) {
|
2024-04-15 19:39:03 +02:00
|
|
|
return this.getAll(field)[0]
|
2023-12-14 16:53:05 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getAll(field) {
|
2024-04-15 19:39:03 +02:00
|
|
|
return arrayWrap(this.errors[field] || [])
|
2023-12-14 16:53:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
only(...fields) {
|
2024-04-15 19:39:03 +02:00
|
|
|
const messages = []
|
2023-12-14 16:53:05 +01:00
|
|
|
|
|
|
|
|
fields.forEach((field) => {
|
2024-04-15 19:39:03 +02:00
|
|
|
const message = this.get(field)
|
2023-12-14 16:53:05 +01:00
|
|
|
if (message) {
|
2024-04-15 19:39:03 +02:00
|
|
|
messages.push(message)
|
2023-12-14 16:53:05 +01:00
|
|
|
}
|
2024-04-15 19:39:03 +02:00
|
|
|
})
|
2023-12-14 16:53:05 +01:00
|
|
|
|
2024-04-15 19:39:03 +02:00
|
|
|
return messages
|
2023-12-14 16:53:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
flatten() {
|
2024-04-15 19:39:03 +02:00
|
|
|
return Object.values(this.errors).reduce((a, b) => a.concat(b), [])
|
2023-12-14 16:53:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
clear(field = undefined) {
|
2024-04-15 19:39:03 +02:00
|
|
|
const errors = {}
|
2023-12-14 16:53:05 +01:00
|
|
|
|
|
|
|
|
if (field) {
|
|
|
|
|
Object.keys(this.errors).forEach((key) => {
|
|
|
|
|
if (key !== field) {
|
2024-04-15 19:39:03 +02:00
|
|
|
errors[key] = this.errors[key]
|
2023-12-14 16:53:05 +01:00
|
|
|
}
|
2024-04-15 19:39:03 +02:00
|
|
|
})
|
2023-12-14 16:53:05 +01:00
|
|
|
}
|
|
|
|
|
|
2024-04-15 19:39:03 +02:00
|
|
|
this.set(errors)
|
2023-12-14 16:53:05 +01:00
|
|
|
}
|
|
|
|
|
}
|