@@ -2,34 +2,38 @@ import React from "react";
22import { useQuery } from "@apollo/client" ;
33import { useParams } from "react-router-dom" ;
44import { useTranslation } from "react-i18next" ;
5- import { type Query } from "common/types/gql-types" ;
5+ import {
6+ type Query ,
7+ type QueryApplicationRoundArgs ,
8+ } from "common/types/gql-types" ;
69import { useNotification } from "@/context/NotificationContext" ;
710import BreadcrumbWrapper from "@/component/BreadcrumbWrapper" ;
811import Loader from "@/component/Loader" ;
912import { Review } from "./review/Review" ;
1013import { APPLICATION_ROUND_QUERY } from "../queries" ;
14+ import usePermission from "@/hooks/usePermission" ;
15+ import { Permission } from "@/modules/permissionHelper" ;
16+ import { base64encode } from "common/src/helpers" ;
1117
12- function ApplicationRound ( {
13- applicationRoundId,
14- } : {
15- applicationRoundId : number ;
16- } ) : JSX . Element | null {
18+ function ApplicationRound ( { pk } : { pk : number } ) : JSX . Element {
1719 const { notifyError } = useNotification ( ) ;
1820 const { t } = useTranslation ( ) ;
1921
20- const { data, loading : isLoading } = useQuery < Query > (
21- APPLICATION_ROUND_QUERY ,
22- {
23- skip : ! applicationRoundId ,
24- variables : {
25- pk : [ applicationRoundId ] ,
26- } ,
27- onError : ( ) => {
28- notifyError ( t ( "errors.errorFetchingData" ) ) ;
29- } ,
30- }
31- ) ;
32- const applicationRound = data ?. applicationRounds ?. edges ?. [ 0 ] ?. node ;
22+ const id = base64encode ( `ApplicationRoundNode:${ pk } ` ) ;
23+ const { data, loading : isLoading } = useQuery <
24+ Query ,
25+ QueryApplicationRoundArgs
26+ > ( APPLICATION_ROUND_QUERY , {
27+ skip : ! pk ,
28+ variables : { id } ,
29+ onError : ( ) => {
30+ notifyError ( t ( "errors.errorFetchingData" ) ) ;
31+ } ,
32+ } ) ;
33+
34+ const { applicationRound } = data ?? { } ;
35+
36+ const { hasApplicationRoundPermission } = usePermission ( ) ;
3337
3438 if ( isLoading ) {
3539 return < Loader /> ;
@@ -39,6 +43,18 @@ function ApplicationRound({
3943 return < div > { t ( "errors.applicationRoundNotFound" ) } </ div > ;
4044 }
4145
46+ const canView = hasApplicationRoundPermission (
47+ applicationRound ,
48+ Permission . CAN_VALIDATE_APPLICATIONS
49+ ) ;
50+ const canManage = hasApplicationRoundPermission (
51+ applicationRound ,
52+ Permission . CAN_MANAGE_APPLICATIONS
53+ ) ;
54+ if ( ! canView && ! canManage ) {
55+ return < div > { t ( "errors.noPermission" ) } </ div > ;
56+ }
57+
4258 const route = [
4359 {
4460 alias : t ( "breadcrumb.recurring-reservations" ) ,
@@ -70,10 +86,12 @@ function ApplicationRoundRouted(): JSX.Element | null {
7086 const { t } = useTranslation ( ) ;
7187 const { applicationRoundId } = useParams < IParams > ( ) ;
7288
73- if ( ! applicationRoundId || Number . isNaN ( Number ( applicationRoundId ) ) ) {
74- return < div > { t ( "errors.router.invalidApplicationRoundNumber" ) } </ div > ;
89+ const pk = Number ( applicationRoundId ) ;
90+ if ( pk > 0 ) {
91+ return < ApplicationRound pk = { pk } /> ;
7592 }
76- return < ApplicationRound applicationRoundId = { Number ( applicationRoundId ) } /> ;
93+
94+ return < div > { t ( "errors.router.invalidApplicationRoundNumber" ) } </ div > ;
7795}
7896
7997export default ApplicationRoundRouted ;
0 commit comments