From 988389b337fec241483c0306e964e73c09cb3791 Mon Sep 17 00:00:00 2001 From: cskiwi Date: Mon, 26 Aug 2024 09:51:48 +0200 Subject: [PATCH] fix: allow admins to still change locations --- badman.babel | 19 +++++++++++++++++ .../backend/translate/assets/i18n/en/all.json | 1 + .../translate/assets/i18n/fr_BE/all.json | 1 + .../translate/assets/i18n/nl_BE/all.json | 1 + .../backend/translate/src/translate.module.ts | 11 +++++++--- .../src/guards/change-encounter.guard.ts | 21 +++++++++++++++++-- libs/utils/src/lib/i18n.generated.ts | 1 + 7 files changed, 50 insertions(+), 5 deletions(-) diff --git a/badman.babel b/badman.babel index 4b67757127..48914259d4 100644 --- a/badman.babel +++ b/badman.babel @@ -1784,6 +1784,25 @@ errors + + closed + + + + + en-US + false + + + fr-BE + false + + + nl-BE + false + + + date-out-of-period diff --git a/libs/backend/translate/assets/i18n/en/all.json b/libs/backend/translate/assets/i18n/en/all.json index e8c747c7cf..6d38483b94 100644 --- a/libs/backend/translate/assets/i18n/en/all.json +++ b/libs/backend/translate/assets/i18n/en/all.json @@ -117,6 +117,7 @@ "description": "Disclaimer: this is a first version of the encounter relocation tool. Improvements are periodically being applied.", "disclaimer-submit": "Once both teams are available, the selected day can be chosen in the checkbox by then clicking on send", "errors": { + "closed": "Movements are closed", "date-out-of-period": "The date is outside the allowed period (September to April)", "exception-day": "No competition may be played on this day", "invalid": "Please complete all availability before sending", diff --git a/libs/backend/translate/assets/i18n/fr_BE/all.json b/libs/backend/translate/assets/i18n/fr_BE/all.json index 70327ab1af..ab87a72af7 100644 --- a/libs/backend/translate/assets/i18n/fr_BE/all.json +++ b/libs/backend/translate/assets/i18n/fr_BE/all.json @@ -117,6 +117,7 @@ "description": "Clause de non-responsabilité : Il s'agit d'une version initiale du module de déplacement des réunions. Des améliorations seront apportées périodiquement.", "disclaimer-submit": "Lorsque les deux équipes sont disponibles, la date peut être choisie à l'aide de la case à cocher, puis en cliquant sur envoyer.", "errors": { + "closed": "Les mouvements sont fermés", "date-out-of-period": "La date est en dehors de la période autorisée (septembre à avril)", "exception-day": "Aucune compétition ne peut être jouée ce jour-là", "invalid": "Veuillez compléter toutes les disponibilités avant d'envoyer", diff --git a/libs/backend/translate/assets/i18n/nl_BE/all.json b/libs/backend/translate/assets/i18n/nl_BE/all.json index 7eb854669f..ed4b627454 100644 --- a/libs/backend/translate/assets/i18n/nl_BE/all.json +++ b/libs/backend/translate/assets/i18n/nl_BE/all.json @@ -117,6 +117,7 @@ "description": "Disclaimer: dit is een eerste versie van de verplaatsingsmodule voor ontmoetingen. Verbeteringen worden periodiek aangebracht.", "disclaimer-submit": "Eenmaal beide teams beschikbaar zijn, kan de datum gekozen worden via de checkbox en door dan op verzenden te klikken", "errors": { + "closed": "De verplaatsingen zijn gesloten", "date-out-of-period": "De datum ligt buiten de toegelaten periode (September tot April)", "exception-day": "Er mag geen competitie gespeeld worden op deze dag", "invalid": "Gelieve alle beschikbaarheid aan te vullen voor het versturen.", diff --git a/libs/backend/translate/src/translate.module.ts b/libs/backend/translate/src/translate.module.ts index e8305e14b1..19c551d135 100644 --- a/libs/backend/translate/src/translate.module.ts +++ b/libs/backend/translate/src/translate.module.ts @@ -21,9 +21,14 @@ import fs from 'fs'; }); fs.writeFileSync( file, - `import { Path } from "nestjs-i18n"; - export type I18nTranslations = {}; - export type I18nPath = Path;`, + `/* DO NOT EDIT, file generated by nestjs-i18n */ + +/* eslint-disable */ +/* prettier-ignore */ +import { Path } from "nestjs-i18n"; +/* prettier-ignore */ +export type I18nTranslations = {}; +export type I18nPath = Path;`, { encoding: 'utf8' }, ); } diff --git a/libs/frontend/pages/competition/change-encounter/src/guards/change-encounter.guard.ts b/libs/frontend/pages/competition/change-encounter/src/guards/change-encounter.guard.ts index a4901185db..b3c8e48d28 100644 --- a/libs/frontend/pages/competition/change-encounter/src/guards/change-encounter.guard.ts +++ b/libs/frontend/pages/competition/change-encounter/src/guards/change-encounter.guard.ts @@ -1,5 +1,8 @@ import { Injectable, inject, isDevMode } from '@angular/core'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { UrlTree } from '@angular/router'; +import { ClaimService } from '@badman/frontend-auth'; +import { TranslateService } from '@ngx-translate/core'; import { Apollo, gql } from 'apollo-angular'; import { Observable, lastValueFrom } from 'rxjs'; @@ -9,9 +12,16 @@ import { map } from 'rxjs/operators'; providedIn: 'root', }) export class CanChangeEncounterGuard { - private apollo = inject(Apollo); + private readonly apollo = inject(Apollo); + private readonly claimService = inject(ClaimService); + private readonly snackBar = inject(MatSnackBar); + private readonly translate = inject(TranslateService); async canActivate(): Promise | Promise | boolean> { + if (isDevMode()) { + return true; + } + const openChangeEncounter = await lastValueFrom( this.apollo .query<{ @@ -42,10 +52,17 @@ export class CanChangeEncounterGuard { ), ); - if (openChangeEncounter || isDevMode()) { + if (openChangeEncounter) { return true; } + const canChangeAny = this.claimService.hasAnyClaims(['change-any:encounter']); + if (canChangeAny) { + return true; + } + + this.snackBar.open(this.translate.instant('all.competition.change-encounter.errors.closed')); + return false; } } diff --git a/libs/utils/src/lib/i18n.generated.ts b/libs/utils/src/lib/i18n.generated.ts index 85840669be..64f7513ea1 100644 --- a/libs/utils/src/lib/i18n.generated.ts +++ b/libs/utils/src/lib/i18n.generated.ts @@ -124,6 +124,7 @@ export type I18nTranslations = { "description": string; "disclaimer-submit": string; "errors": { + "closed": string; "date-out-of-period": string; "exception-day": string; "invalid": string;