From 02dc1e62e433c8e892059d94195e73272668271a Mon Sep 17 00:00:00 2001 From: davwas Date: Tue, 30 Jan 2024 16:16:25 +0100 Subject: [PATCH] BC-5424 - persistent storage for tldraw (#3002) * add tldraw error handling --- src/assets/img/NotFoundSvg.vue | 188 ++++++++++++++++++ .../error-handling/ErrorContent.vue | 15 +- src/locales/de.json | 8 +- src/locales/en.json | 8 +- src/locales/es.json | 8 +- src/locales/uk.json | 8 +- src/pages/Error.page.vue | 18 +- 7 files changed, 242 insertions(+), 11 deletions(-) create mode 100644 src/assets/img/NotFoundSvg.vue diff --git a/src/assets/img/NotFoundSvg.vue b/src/assets/img/NotFoundSvg.vue new file mode 100644 index 0000000000..3248c4a41e --- /dev/null +++ b/src/assets/img/NotFoundSvg.vue @@ -0,0 +1,188 @@ + + diff --git a/src/components/error-handling/ErrorContent.vue b/src/components/error-handling/ErrorContent.vue index 289e8c0da4..a45764c5d3 100644 --- a/src/components/error-handling/ErrorContent.vue +++ b/src/components/error-handling/ErrorContent.vue @@ -6,7 +6,12 @@ fill="var(--v-primary-base)" data-testid="img-permission" /> - + import { computed, defineComponent } from "vue"; import PermissionErrorSvg from "@/assets/img/PermissionErrorSvg.vue"; +import NotFoundSvg from "@/assets/img/NotFoundSvg.vue"; import { HttpStatusCode } from "@/store/types/http-status-code.enum"; import { useTitle } from "@vueuse/core"; import { useI18n } from "@/composables/i18n.composable"; @@ -31,7 +37,7 @@ import { buildPageTitle } from "@/utils/pageTitle"; export default defineComponent({ name: "ErrorContent", - components: { PermissionErrorSvg }, + components: { PermissionErrorSvg, NotFoundSvg }, props: { errorText: String, statusCode: { @@ -54,8 +60,13 @@ export default defineComponent({ permissionErrorStatusCodes.includes(props.statusCode) ); + const isNotFoundError = computed( + () => props.statusCode === HttpStatusCode.NotFound + ); + return { isPermissionError, + isNotFoundError, }; }, }); diff --git a/src/locales/de.json b/src/locales/de.json index f6753f400e..b830f25a53 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -1098,5 +1098,11 @@ "page-class-members.title.info": "importiert aus einem externen System", "page-class-members.systemInfoText": "Daten der Klasse werden mit {systemName} synchronisiert. Die Klassenliste kann vorübergehend veraltet sein, bis sie mit dem neusten Stand in {systemName} abgeglichen wird. Die Daten werden nach jeder Anmeldung eines Klassenmitglieds in der Niedersächsischen Bildungscloud aktualisiert.", "page-class-members.classMembersInfoBox.title": "Schüler:innen sind noch nicht in der Niedersächsischen Bildungscloud?", - "page-class-members.classMembersInfoBox.text": "

Eine Einverständniserklärung bei der Registrierung von Schüler:innen muss nicht eingeholt werden. Die Nutzung der Niedersächsischen Bildungscloud ist im niedersächsischen Schulgesetz (§ 31 Abs. 5 NSchG) geregelt.

Falls die Schule die Daten der Nutzenden über ein externes System bezieht bzw. übermittelt bekommt, sind keine weiteren Schritte in der Cloud notwendig. Die Registrierung erfolgt über das externe System.

Anderenfalls können über den Verwaltungsbereich der Cloud Einladungen zur Registrierung per Link versendet werden:

" + "page-class-members.classMembersInfoBox.text": "

Eine Einverständniserklärung bei der Registrierung von Schüler:innen muss nicht eingeholt werden. Die Nutzung der Niedersächsischen Bildungscloud ist im niedersächsischen Schulgesetz (§ 31 Abs. 5 NSchG) geregelt.

Falls die Schule die Daten der Nutzenden über ein externes System bezieht bzw. übermittelt bekommt, sind keine weiteren Schritte in der Cloud notwendig. Die Registrierung erfolgt über das externe System.

Anderenfalls können über den Verwaltungsbereich der Cloud Einladungen zur Registrierung per Link versendet werden:

", + "tldraw.error.403": "Tldraw ist deaktiviert", + "tldraw.error.500": "Beim Einrichten von tldraw ist ein Fehler aufgetreten", + "tldraw.error.ws.4400": "Der Raumname fehlt in den URL-Parametern", + "tldraw.error.ws.4401": "Du hast keine Berechtigung für dieses Tldraw-Board", + "tldraw.error.ws.4404": "Tldraw-Board mit diesem Namen wurde nicht gefunden", + "tldraw.error.ws.4500": "Bei der Tldraw-Websocket-Verbindung ist ein Fehler aufgetreten" } diff --git a/src/locales/en.json b/src/locales/en.json index 1089717b42..4b1485c12b 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1097,5 +1097,11 @@ "page-class-members.title.info": "imported from an external system", "page-class-members.systemInfoText": "Class data is synchronized with {systemName}. The class list may be temporarily out of date until it is updated with the latest version in {systemName}. The data is updated every time a class member registers in the Niedersächsischen Bildungscloud.", "page-class-members.classMembersInfoBox.title": "Students are not yet in the Niedersächsischen Bildungscloud?", - "page-class-members.classMembersInfoBox.text": "

A declaration of consent does not need to be obtained when registering students. The use of the Niedersächsischen Bildungscloud is regulated in the Lower Saxony Schools Act (Section 31 Para. 5 NSchG).

If the school obtains or receives the user's data via an external system, no further steps are necessary in the cloud. Registration takes place via the external system.

Otherwise, invitations to register can be sent via link via the administration area of the cloud:

" + "page-class-members.classMembersInfoBox.text": "

A declaration of consent does not need to be obtained when registering students. The use of the Niedersächsischen Bildungscloud is regulated in the Lower Saxony Schools Act (Section 31 Para. 5 NSchG).

If the school obtains or receives the user's data via an external system, no further steps are necessary in the cloud. Registration takes place via the external system.

Otherwise, invitations to register can be sent via link via the administration area of the cloud:

", + "tldraw.error.403": "Tldraw is disabled", + "tldraw.error.500": "An error occured while setting up tldraw", + "tldraw.error.ws.4400": "Room name is missing in URL params", + "tldraw.error.ws.4401": "You do not have permission to this tldraw board", + "tldraw.error.ws.4404": "Tldraw board with this name was not found", + "tldraw.error.ws.4500": "An error occured within tldraw websocket connection" } diff --git a/src/locales/es.json b/src/locales/es.json index 7e78650fa4..93b65e7c89 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -1093,5 +1093,11 @@ "pages.h5p.api.success.save": "El contenido se ha guardado correctamente.", "page-class-members.systemInfoText": "Los datos de la clase se sincronizan con {systemName}. La lista de clases puede estar temporalmente desactualizada hasta que se actualice con la última versión en {systemName}. Los datos se actualizan cada vez que un miembro del grupo se registra en Niedersächsischen Bildungscloud.", "page-class-members.classMembersInfoBox.title": "¿Los estudiantes aún no están en la Niedersächsischen Bildungscloud?", - "page-class-members.classMembersInfoBox.text": "

No es necesario obtener una declaración de consentimiento al registrar estudiantes. El uso de Niedersächsischen Bildungscloud está regulado por la Ley de escuelas de Baja Sajonia (artículo 31, párrafo 5 de la NSchG).

Si la escuela obtiene o recibe los datos del usuario a través de un sistema externo, no es necesario realizar ningún otro paso en el proceso nube. El registro se realiza a través del sistema externo.

De lo contrario, las invitaciones para registrarse se pueden enviar mediante un enlace a través del área de administración de la nube:

" + "page-class-members.classMembersInfoBox.text": "

No es necesario obtener una declaración de consentimiento al registrar estudiantes. El uso de Niedersächsischen Bildungscloud está regulado por la Ley de escuelas de Baja Sajonia (artículo 31, párrafo 5 de la NSchG).

Si la escuela obtiene o recibe los datos del usuario a través de un sistema externo, no es necesario realizar ningún otro paso en el proceso nube. El registro se realiza a través del sistema externo.

De lo contrario, las invitaciones para registrarse se pueden enviar mediante un enlace a través del área de administración de la nube:

", + "tldraw.error.403": "Tldraw está desactivado", + "tldraw.error.500": "Se ha producido un error al configurar tldraw", + "tldraw.error.ws.4400": "Falta el nombre de la sala en los parámetros de la URL", + "tldraw.error.ws.4401": "Usted no tiene permiso para este tablero tldraw", + "tldraw.error.ws.4404": "No se ha encontrado el tablero Tldraw con este nombre", + "tldraw.error.ws.4500": "Se ha producido un error en la conexión tldraw websocket" } diff --git a/src/locales/uk.json b/src/locales/uk.json index 548b560f9d..47ec530c02 100644 --- a/src/locales/uk.json +++ b/src/locales/uk.json @@ -1123,5 +1123,11 @@ "pages.h5p.api.success.save": "Вміст успішно збережено.", "page-class-members.systemInfoText": "Дані класу синхронізуються з {systemName}. Список класів може бути тимчасово застарілим, поки його не буде оновлено останньою версією в {systemName}. Дані оновлюються кожного разу, коли учасник класу реєструється в Niedersächsischen Bildungscloud.", "page-class-members.classMembersInfoBox.title": "Студенти ще не в Niedersächsischen Bildungscloud?", - "page-class-members.classMembersInfoBox.text": "

Заява про згоду не потрібна під час реєстрації студентів. Використання Niedersächsischen Bildungscloud регулюється Законом про школи Нижньої Саксонії (розділ 31, параграф 5 NSchG).

Якщо школа отримує або отримує дані користувача через зовнішню систему, жодних подальших дій у хмара. Реєстрація відбувається через зовнішню систему.

Інакше запрошення до реєстрації можна надіслати за посиланням через область адміністрування хмари:

" + "page-class-members.classMembersInfoBox.text": "

Заява про згоду не потрібна під час реєстрації студентів. Використання Niedersächsischen Bildungscloud регулюється Законом про школи Нижньої Саксонії (розділ 31, параграф 5 NSchG).

Якщо школа отримує або отримує дані користувача через зовнішню систему, жодних подальших дій у хмара. Реєстрація відбувається через зовнішню систему.

Інакше запрошення до реєстрації можна надіслати за посиланням через область адміністрування хмари:

", + "tldraw.error.403": "Tldraw вимкнено", + "tldraw.error.500": "Виникла помилка під час налаштування tldraw", + "tldraw.error.ws.4400": "Назва кімнати відсутня в параметрах URL-адреси", + "tldraw.error.ws.4401": "Ви не маєте дозволу на цю дошку tldraw", + "tldraw.error.ws.4404": "Дошки Tldraw з такою назвою не знайдено", + "tldraw.error.ws.4500": "Виникла помилка під час з'єднання з веб-сокетом tldraw" } diff --git a/src/pages/Error.page.vue b/src/pages/Error.page.vue index 4ed37dbfb9..1eb1e82ff9 100644 --- a/src/pages/Error.page.vue +++ b/src/pages/Error.page.vue @@ -47,11 +47,16 @@ export default defineComponent({ )[0] as PerformanceNavigationTiming; const getError = () => { - if (performanceNavigation.type === "reload") { - const [statusCode, translationKey] = storage.getMultiple([ - "applicationErrorStatusCode", - "applicationErrorTranslationKey", - ]); + const [statusCode, translationKey, isTldrawError] = storage.getMultiple([ + "applicationErrorStatusCode", + "applicationErrorTranslationKey", + "applicationErrorTldraw", + ]); + + if ( + performanceNavigation.type === "reload" || + (performanceNavigation.type === "navigate" && isTldrawError) + ) { return { statusCode: Number(statusCode), translationKey, @@ -60,6 +65,8 @@ export default defineComponent({ storage.remove("applicationErrorStatusCode"); storage.remove("applicationErrorTranslationKey"); + storage.remove("applicationErrorTldraw"); + return { statusCode: Number(applicationErrorModule.getStatusCode), translationKey: applicationErrorModule.getTranslationKey, @@ -67,6 +74,7 @@ export default defineComponent({ }; addEventListener("pagehide", (event) => { + storage.remove("applicationErrorTldraw"); if (event.persisted) return; if (applicationErrorModule.getStatusCode) {