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