This repository has been archived on 2024-11-10. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
enzos-events/resources/js/components/FlashMessages.vue

83 lines
2.4 KiB
Vue

<template>
</template>
<script setup>
import { useMessage } from 'naive-ui'
import { onUpdated, onMounted } from 'vue'
const message = useMessage()
const props = defineProps(['messages'])
onMounted(() => {
displayNewMessages(props.messages)
})
onUpdated(() => {
displayNewMessages(props.messages)
})
function displayNewMessages(messages) {
let output = []
output = flattenObject(removeValidationErrors(messages))
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 || !input.hasOwnProperty("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"
case 'E_AUTHORIZATION_FAILURE':
return 'Rechte unzureichend um diese Aktion auszuführen.'
}
return errorMsg
}
</script>