87 lines
2.4 KiB
Vue
87 lines
2.4 KiB
Vue
<template>
|
|
</template>
|
|
<script setup>
|
|
import { useMessage } from 'naive-ui'
|
|
import { watch, defineProps, onUpdated, onMounted } from 'vue'
|
|
|
|
const message = useMessage()
|
|
const props = defineProps(['messages'])
|
|
|
|
onMounted(() => {
|
|
displayNewMessages(props.messages)
|
|
})
|
|
|
|
onUpdated(() => {
|
|
displayNewMessages(props.messages)
|
|
})
|
|
|
|
function displayNewMessages(messages) {
|
|
|
|
console.log(messages)
|
|
let output = []
|
|
|
|
output = flattenObject(removeValidationErrors(messages))
|
|
|
|
console.log(output)
|
|
|
|
output?.forEach((item) => {
|
|
for (let key in item) {
|
|
switch (key){
|
|
case 'error':
|
|
message.error(
|
|
translateError(item[key]),
|
|
{ closable: true }
|
|
)
|
|
break
|
|
case 'warning':
|
|
message.warning(
|
|
translateError(item[key]),
|
|
{ closable: true}
|
|
)
|
|
break
|
|
case 'info':
|
|
message.info(
|
|
translateError(item[key]),
|
|
{ closable: true }
|
|
)
|
|
break
|
|
default:
|
|
message.warning(
|
|
translateError(item[key]),
|
|
{ closable: true }
|
|
)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
function removeValidationErrors(input) {
|
|
if(input === null || !Object.hasOwn(input, "errors")) return input
|
|
|
|
const { errors: _, ...output } = input
|
|
return output
|
|
}
|
|
|
|
function flattenObject(input) {
|
|
if (input === null) return input
|
|
|
|
return Object.values(input).map((value) => Object.entries(value)).flat().reduce((acc, [key, value]) => {
|
|
acc.push({[key]: value});
|
|
return acc;
|
|
}, []);
|
|
}
|
|
|
|
function translateError(errorMsg) {
|
|
switch(errorMsg.split(":")[0]) {
|
|
case 'E_INVALID_AUTH_PASSWORD':
|
|
return "Falsches Passwort eingegeben."
|
|
case 'E_INVALID_AUTH_UID':
|
|
return "Benutzername nicht gefunden"
|
|
}
|
|
return errorMsg
|
|
}
|
|
|
|
function isEmpty(obj) {
|
|
return Object.keys(obj).length === 0;
|
|
}
|
|
</script> |