Skip to content
This repository was archived by the owner on Nov 1, 2024. It is now read-only.

Commit c3ccbf9

Browse files
committed
process access
1 parent 13fec2d commit c3ccbf9

File tree

3 files changed

+56
-10
lines changed

3 files changed

+56
-10
lines changed
+33-9
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,53 @@
1-
import { ExpansionCard, Link } from "@navikt/ds-react"
2-
import { useState } from "react"
1+
import { Link } from "@navikt/ds-react"
2+
import { useContext, useState } from "react"
33
import { AccessRequestModal } from "../dataproducts/access/datasetAccess"
4-
import { Header } from "@navikt/ds-react-internal"
4+
import { apporveAccessRequest, denyAccessRequest } from "../../lib/rest/access"
5+
import { ExternalLink } from "@navikt/ds-icons"
6+
import { UserState } from "../../lib/context"
57

68
interface PendingAccessRequestBarProps {
79
accessRequest: any
810
}
911

1012
export const PendingAccessRequestBar = ({ accessRequest }: PendingAccessRequestBarProps) => {
1113
const [expanded, setExpanded] = useState(false)
14+
const userData = useContext(UserState)
15+
const approve = (requestID: string) => {
16+
apporveAccessRequest(requestID)
17+
}
18+
const deny = (requestID: string) => {
19+
denyAccessRequest(requestID, "")
20+
}
21+
1222
return (
1323
<div key={accessRequest.id} className="w-[60rem] mb-5 mt-5 border pt-2 pb-2 pl-4 pr-4 flex flex-row justify-between rounded border-gray-200">
1424
<div>
1525
<h3> <Link rel="norefferer" href={`/dataproduct/${accessRequest.dataproductID}/${accessRequest.dataproductSlug}/${accessRequest.datasetID}`}>
1626
{`${accessRequest?.datasetName} - ${accessRequest?.dataproductName}`}
1727
</Link>
1828
</h3>
19-
fra {accessRequest.owner} - {new Date(accessRequest.created).toLocaleDateString('no-NO')}
29+
{accessRequest.owner}
30+
<br></br>
31+
<div className="flex flex-row">
32+
<div>
33+
{!accessRequest.expires ? "Alltid tilgang fra ": "Tilgangsperiode: "}
34+
{new Date(accessRequest.created).toLocaleDateString('no-NO')}
35+
{accessRequest.expires && ` - ${new Date(accessRequest.expires).toLocaleDateString('no-NO')}`}
36+
</div>
37+
<div className="ml-[2rem]">
38+
{accessRequest.polly?.url ? (
39+
<Link target="_blank" rel="norefferer" href={accessRequest.polly.url}>
40+
Åpne behandling
41+
<ExternalLink />
42+
</Link>
43+
) : (
44+
'Ingen behandling'
45+
)}
46+
</div>
47+
</div>
2048
</div>
2149
<div>
22-
<AccessRequestModal requestID={""} actionDeny={function (requestID: string, setOpen: Function): void {
23-
throw new Error("Function not implemented.")
24-
}} actionApprove={function (requestID: string): void {
25-
throw new Error("Function not implemented.")
26-
}}></AccessRequestModal>
50+
<AccessRequestModal requestID={accessRequest.id} actionDeny={deny} actionApprove={approve}></AccessRequestModal>
2751
</div>
2852
</div>)
2953
}

lib/rest/access.ts

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useEffect, useState } from "react";
2-
import { fetchAccessRequestUrl, fetchTemplate } from "./restApi";
2+
import { approveAccessRequestUrl, denyAccessRequestUrl, fetchAccessRequestUrl, fetchTemplate, postTemplate } from "./restApi";
33

44
export const fetchAccessRequests = async (datasetId: string) => {
55
const url = fetchAccessRequestUrl(datasetId);
@@ -29,4 +29,14 @@ export const useFetchAccessRequestsForDataset = (datasetId: string)=>{
2929
}, [datasetId])
3030

3131
return {data, loading, error}
32+
}
33+
34+
export const apporveAccessRequest = async (accessRequestId: string) => {
35+
const url = approveAccessRequestUrl(accessRequestId);
36+
return postTemplate(url);
37+
}
38+
39+
export const denyAccessRequest = async (accessRequestId: string, reason: string) => {
40+
const url = denyAccessRequestUrl(accessRequestId, reason);
41+
return postTemplate(url);
3242
}

lib/rest/restApi.ts

+12
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ export const searchTeamKatalogenUrl = (gcpGroups?: string[]) => {
2424
const query = parameters ? `?${parameters}` : ''
2525
return `${apiUrl()}/teamkatalogen${query}`
2626
}
27+
export const approveAccessRequestUrl = (accessRequestId: string) => `${apiUrl()}/accessRequests/${accessRequestId}?action=approve`
28+
export const denyAccessRequestUrl = (accessRequestId: string, reason: string) => `${apiUrl()}/accessRequests/${accessRequestId}?action=deny&reason=${reason}`
2729

2830
export const fetchTemplate = (url: string) => fetch(url, {
2931
method: 'GET',
@@ -33,6 +35,16 @@ export const fetchTemplate = (url: string) => fetch(url, {
3335
},
3436
})
3537

38+
export const postTemplate = (url: string, body?: any) => fetch(url, {
39+
method: 'POST',
40+
credentials: 'include',
41+
headers: {
42+
'Content-Type': 'application/json',
43+
},
44+
body: JSON.stringify(body),
45+
})
46+
47+
3648
export const searchUrl = (options: SearchOptions) => {
3749
let queryParams: string[] = [];
3850

0 commit comments

Comments
 (0)