diff --git a/_project/frontend-nuxt/components/Version.vue b/_project/frontend-nuxt/components/Version.vue new file mode 100644 index 000000000..17ac4d499 --- /dev/null +++ b/_project/frontend-nuxt/components/Version.vue @@ -0,0 +1,49 @@ + + + \ No newline at end of file diff --git a/_project/frontend-nuxt/composables/customAlert.ts b/_project/frontend-nuxt/composables/customAlert.ts new file mode 100644 index 000000000..1b722ad46 --- /dev/null +++ b/_project/frontend-nuxt/composables/customAlert.ts @@ -0,0 +1,70 @@ +interface alertData { + title: string | undefined + body: string | undefined +} + +interface alertBtn { + name: string + color: string + returnValue: T +} + +interface alertList { + promiseResolve: (val: any) => void + show: boolean + title: string + body: string | undefined + buttons: Array +} + +const alertsList = ref>([]) + +function alertAdd>(data: alertData): Promise +function alertAdd[]>( + data: alertData, + ...buttons: Buttons +): Promise +function alertAdd(data: alertData, ...buttons: any[]) { + if (!buttons.length) { + buttons = [ + { + name: "OK", + color: "green", + returnValue: true, + }, + ] + } + return new Promise(promiseResolve => { + alertsList.value.push({ + promiseResolve, + show: true, + title: data?.title || "", + body: data?.body ?? data.body, + buttons, + }) + }) +} + +document.onkeydown = function (evt) { + if (alertsList.value.length) { + evt = evt || window.event + if ("key" in evt) { + if (evt.key === "Escape" || evt.key === "Esc") { + alertRemove(alertsList.value.length, false) + } + if (evt.key === "Enter") { + alertRemove(alertsList.value.length, true) + } + } + } +} + +function alertRemove(index: number, returnValue: any) { + const removeData = alertsList.value[index] + removeData.promiseResolve(returnValue) + alertsList.value.splice(index, 1) +} + +export { alertRemove, alertsList, alertAdd } + +export default alertAdd diff --git a/_project/frontend-nuxt/composables/intl.ts b/_project/frontend-nuxt/composables/intl.ts index f863e7dbf..7baae8a2f 100644 --- a/_project/frontend-nuxt/composables/intl.ts +++ b/_project/frontend-nuxt/composables/intl.ts @@ -19,6 +19,11 @@ const messages = { "validation.string.maxLength": `Das Feld darf nicht mehr als {maxLength} Zeichen haben`, "validation.string.minLength": `Das Feld muss mindestens {minLength} Zeichen enthalten`, "validation.not_a_valid": `Der eingegebene Wert ist kein gültiger {type}: {message}`, + "fe.version.button": "Neue Version verfügbar", + "fe.version.alert.title": "Neue Version verfügbar!", + "fe.version.alert.body": "Neue Version verfügbar, Seite neu laden?", + "fe.version.alert.yes": "Ja", + "fe.version.alert.no": "Nein", }, en: { "handle.success": "{action} Success", @@ -41,6 +46,11 @@ const messages = { "The field requires at least {minLength} characters", "validation.not_a_valid": "The entered value is not a valid {type}: {message}", + "fe.version.button": "New version available", + "fe.version.alert.title": "New version available!", + "fe.version.alert.body": "New version available, reload page?", + "fe.version.alert.yes": "Yes", + "fe.version.alert.no": "No", }, } diff --git a/_project/frontend-nuxt/layouts/default.vue b/_project/frontend-nuxt/layouts/default.vue index 17ff2116b..42d8dd1fd 100644 --- a/_project/frontend-nuxt/layouts/default.vue +++ b/_project/frontend-nuxt/layouts/default.vue @@ -39,6 +39,7 @@ onMounted(() => {
{{ currentUser.displayName }}
+