@@ -3,8 +3,6 @@ import { useState } from 'react'
3
3
import { isAfter , parseISO , format } from 'date-fns'
4
4
import {
5
5
useRevokeAccessMutation ,
6
- useApproveAccessRequestMutation ,
7
- useDenyAccessRequestMutation ,
8
6
} from '../../../lib/schema/graphql'
9
7
import {
10
8
Alert ,
@@ -19,7 +17,7 @@ import { ExternalLink } from '@navikt/ds-icons'
19
17
import { nb } from 'date-fns/locale'
20
18
import ErrorMessage from '../../lib/error'
21
19
import { useGetDataset } from '../../../lib/rest/dataproducts'
22
- import { useFetchAccessRequestsForDataset } from '../../../lib/rest/access'
20
+ import { apporveAccessRequest , denyAccessRequest , useFetchAccessRequestsForDataset } from '../../../lib/rest/access'
23
21
24
22
interface AccessEntry {
25
23
subject : string
@@ -126,23 +124,89 @@ interface AccessModalProps {
126
124
127
125
interface AccessRequestModalProps {
128
126
requestID : string
129
- actionDeny : ( requestID : string , setOpen : Function ) => void
130
- actionApprove : ( requestID : string ) => void
127
+ user ?: string
131
128
}
132
129
133
- const AccessRequestModal = ( {
130
+ export const AccessRequestModal = ( {
134
131
requestID,
135
- actionDeny,
136
- actionApprove,
132
+ user,
137
133
} : AccessRequestModalProps ) => {
138
- const [ open , setOpen ] = useState ( false )
134
+ const [ openDeny , setOpenDeny ] = useState ( false )
135
+ const [ openApprove , setOpenApprove ] = useState ( false )
136
+ const [ errorApprove , setErrorApprove ] = useState < string | undefined > ( undefined )
137
+ const [ errorDeny , setErrorDeny ] = useState < string | undefined > ( undefined )
138
+ const approve = async ( requestID : string ) =>
139
+ apporveAccessRequest ( requestID ) . then ( res =>
140
+ {
141
+ setOpenApprove ( false )
142
+ setErrorApprove ( undefined )
143
+ window . location . reload ( ) ;
144
+ }
145
+ ) . catch ( ( e :any ) => {
146
+ setErrorApprove ( e . message )
147
+ } )
148
+ const deny = async ( requestID : string , reason ?: string ) => denyAccessRequest ( requestID , reason || '' )
149
+ . then ( ( ) => {
150
+ setOpenDeny ( false )
151
+ setErrorDeny ( undefined )
152
+ window . location . reload ( ) ;
153
+ } ) . catch ( ( e :any ) => {
154
+ setErrorDeny ( e . message )
155
+ } )
156
+
157
+
158
+ const cancelApprove = ( ) => {
159
+ setOpenApprove ( false )
160
+ setErrorApprove ( undefined )
161
+ }
162
+
163
+ const cancelDeny = ( ) => {
164
+ setOpenDeny ( false )
165
+ setErrorDeny ( undefined )
166
+ }
167
+
139
168
return (
140
169
< >
141
170
< Modal
142
- open = { open }
171
+ open = { openApprove }
172
+ aria-label = "Godkjenn søknad"
173
+ onClose = { ( ) => setOpenApprove ( false ) }
174
+ className = 'w-full md:w-[60rem] px-8 h-[13rem]'
175
+ >
176
+ < Modal . Body className = 'h-full' >
177
+ < div className = 'flex flex-col justify-center items-center' >
178
+ < Heading level = "1" size = "medium" >
179
+ Godkjenn søknad
180
+ </ Heading >
181
+ < p className = 'mt-4 mb-4' > Gi tilgang til datasett{ user ? ` til ${ user } ` : '' } ? </ p >
182
+ < div className = "flex flex-row gap-4" >
183
+ < Button
184
+ onClick = { cancelApprove }
185
+ variant = "secondary"
186
+ size = "small"
187
+ >
188
+ Avbryt
189
+ </ Button >
190
+ < Button
191
+ onClick = { ( ) => {
192
+ approve ( requestID )
193
+ } }
194
+ variant = "primary"
195
+ size = "small"
196
+ >
197
+ Godkjenn
198
+ </ Button >
199
+ </ div >
200
+ { errorApprove && < div className = 'text-red-600' > { errorApprove } </ div > }
201
+ </ div >
202
+ </ Modal . Body >
203
+ </ Modal >
204
+
205
+ < Modal
206
+ open = { openDeny }
143
207
aria-label = "Avslå søknad"
144
- onClose = { ( ) => setOpen ( false ) }
145
- className = "max-w-full md:max-w-3xl px-8 h-[20rem ]"
208
+ onClose = { ( ) => setOpenDeny ( false ) }
209
+ className = "max-w-full md:max-w-3xl px-8 h-[24rem ]"
146
210
>
147
211
< Modal . Body className = "h-full" >
148
212
< div className = "flex flex-col gap-8" >
@@ -152,32 +216,33 @@ const AccessRequestModal = ({
152
216
< Textarea label = "Begrunnelse" />
153
217
< div className = "flex flex-row gap-4" >
154
218
< Button
155
- onClick = { ( ) => setOpen ( false ) }
219
+ onClick = { cancelDeny }
156
220
variant = "secondary"
157
221
size = "small"
158
222
>
159
223
Avbryt
160
224
</ Button >
161
225
< Button
162
- onClick = { ( ) => actionDeny ( requestID , setOpen ) }
226
+ onClick = { ( ) => deny ( requestID ) }
163
227
variant = "primary"
164
228
size = "small"
165
229
>
166
230
Avslå
167
231
</ Button >
168
232
</ div >
233
+ { errorDeny && < div className = 'text-red-600' > { errorDeny } </ div > }
169
234
</ div >
170
235
</ Modal . Body >
171
236
</ Modal >
172
237
< div className = "flex flex-row flex-nowrap gap-4 justify-end" >
173
238
< Button
174
- onClick = { ( ) => actionApprove ( requestID ) }
239
+ onClick = { ( ) => setOpenApprove ( true ) }
175
240
variant = "secondary"
176
241
size = "small"
177
242
>
178
243
Godkjenn
179
244
</ Button >
180
- < Button onClick = { ( ) => setOpen ( true ) } variant = "secondary" size = "small" >
245
+ < Button onClick = { ( ) => setOpenDeny ( true ) } variant = "secondary" size = "small" >
181
246
Avslå
182
247
</ Button >
183
248
</ div >
@@ -235,58 +300,24 @@ const AccessModal = ({ accessEntry, action }: AccessModalProps) => {
235
300
const DatasetAccess = ( { id } : AccessListProps ) => {
236
301
const [ formError , setFormError ] = useState ( '' )
237
302
const [ revokeAccess ] = useRevokeAccessMutation ( )
238
- const [ approveAccessRequest ] = useApproveAccessRequestMutation ( )
239
- const [ denyAccessRequest ] = useDenyAccessRequestMutation ( )
240
303
const fetchAccessRequestsForDataset = useFetchAccessRequestsForDataset ( id )
241
304
242
305
const getDataset = useGetDataset ( id )
243
306
244
307
if ( fetchAccessRequestsForDataset . error )
245
308
return < ErrorMessage error = { fetchAccessRequestsForDataset . error } />
246
- if (
247
- fetchAccessRequestsForDataset . loading ||
248
- ! fetchAccessRequestsForDataset . data ?. accessRequests
249
- )
250
- return < div />
251
309
252
- const datasetAccessRequests =
253
- fetchAccessRequestsForDataset . data . accessRequests as any [ ]
310
+ const datasetAccessRequests = fetchAccessRequestsForDataset . loading ||
311
+ ! fetchAccessRequestsForDataset . data ?. accessRequests
312
+ ? [ ]
313
+ : fetchAccessRequestsForDataset . data . accessRequests as any [ ]
254
314
255
315
if ( getDataset . error )
256
316
return < ErrorMessage error = { getDataset . error } />
257
- if (
258
- getDataset . loading ||
259
- ! getDataset ?. dataset ?. access
260
- )
261
- return < div />
262
-
263
- const access = getDataset . dataset . access
264
-
265
- const approveRequest = async ( requestID : string ) => {
266
- try {
267
- await approveAccessRequest ( {
268
- variables : { id : requestID } ,
269
- refetchQueries : [
270
- ] ,
271
- } )
272
- } catch ( e : any ) {
273
- setFormError ( e . message )
274
- }
275
- }
276
317
277
- const denyRequest = async ( requestID : string , setOpen : Function ) => {
278
- try {
279
- await denyAccessRequest ( {
280
- variables : { id : requestID } ,
281
- refetchQueries : [
282
- ] ,
283
- } )
284
- } catch ( e : any ) {
285
- setFormError ( e . message )
286
- } finally {
287
- setOpen ( false )
288
- }
289
- }
318
+ const access = getDataset . loading ||
319
+ ! getDataset ?. dataset ?. access ? [ ] :
320
+ getDataset . dataset . access
290
321
291
322
const removeAccess = async ( a : access , setOpen : Function ) => {
292
323
try {
@@ -351,8 +382,7 @@ const DatasetAccess = ({ id }: AccessListProps) => {
351
382
< Table . DataCell className = "w-[150px]" align = "right" >
352
383
< AccessRequestModal
353
384
requestID = { r . id }
354
- actionApprove = { approveRequest }
355
- actionDeny = { denyRequest }
385
+ user = { r . subject }
356
386
/>
357
387
</ Table . DataCell >
358
388
</ Table . Row >
0 commit comments