Fix request mutations on complete store updates

Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
Émile Ré
2026-03-03 22:06:25 +04:00
parent 5703bccc9a
commit a160dc1f47
20 changed files with 1600 additions and 525 deletions

View File

@@ -14,7 +14,7 @@ import {
Table, Table,
useToast, useToast,
} from "@probo/ui"; } from "@probo/ui";
import { type PropsWithChildren, useState } from "react"; import { type PropsWithChildren } from "react";
import { useFragment, useMutation } from "react-relay"; import { useFragment, useMutation } from "react-relay";
import { useLocation, useNavigate, useSearchParams } from "react-router"; import { useLocation, useNavigate, useSearchParams } from "react-router";
import { graphql } from "relay-runtime"; import { graphql } from "relay-runtime";
@@ -29,8 +29,13 @@ import type { AuditRowFragment$key } from "./__generated__/AuditRowFragment.grap
const requestAccessMutation = graphql` const requestAccessMutation = graphql`
mutation AuditRow_requestAccessMutation($input: RequestReportAccessInput!) { mutation AuditRow_requestAccessMutation($input: RequestReportAccessInput!) {
requestReportAccess(input: $input) { requestReportAccess(input: $input) {
trustCenterAccess { audit {
report {
access {
id id
status
}
}
} }
} }
} }
@@ -51,7 +56,10 @@ const auditRowFragment = graphql`
id id
filename filename
isUserAuthorized isUserAuthorized
hasUserRequestedAccess access {
id
status
}
} }
framework { framework {
id id
@@ -70,9 +78,7 @@ export function AuditRow(props: { audit: AuditRowFragment$key }) {
const navigate = useNavigate(); const navigate = useNavigate();
const audit = useFragment(auditRowFragment, props.audit); const audit = useFragment(auditRowFragment, props.audit);
const [hasRequested, setHasRequested] = useState( const hasRequested = !!audit.report?.access;
audit.report?.hasUserRequestedAccess,
);
const [requestAccess, isRequestingAccess] const [requestAccess, isRequestingAccess]
= useMutation<AuditRow_requestAccessMutation>(requestAccessMutation); = useMutation<AuditRow_requestAccessMutation>(requestAccessMutation);
@@ -95,7 +101,6 @@ export function AuditRow(props: { audit: AuditRowFragment$key }) {
}); });
return; return;
} }
setHasRequested(true);
toast({ toast({
title: __("Success"), title: __("Success"),
description: __("Access request submitted successfully."), description: __("Access request submitted successfully."),

View File

@@ -9,7 +9,6 @@ import {
Spinner, Spinner,
useToast, useToast,
} from "@probo/ui"; } from "@probo/ui";
import { useState } from "react";
import { useFragment, useMutation } from "react-relay"; import { useFragment, useMutation } from "react-relay";
import { useLocation, useNavigate, useSearchParams } from "react-router"; import { useLocation, useNavigate, useSearchParams } from "react-router";
import { graphql } from "relay-runtime"; import { graphql } from "relay-runtime";
@@ -26,8 +25,11 @@ const requestAccessMutation = graphql`
$input: RequestDocumentAccessInput! $input: RequestDocumentAccessInput!
) { ) {
requestDocumentAccess(input: $input) { requestDocumentAccess(input: $input) {
trustCenterAccess { document {
access {
id id
status
}
} }
} }
} }
@@ -46,7 +48,10 @@ const documentRowFragment = graphql`
id id
title title
isUserAuthorized isUserAuthorized
hasUserRequestedAccess access {
id
status
}
} }
`; `;
@@ -58,9 +63,7 @@ export function DocumentRow(props: { document: DocumentRowFragment$key }) {
const [searchParams] = useSearchParams(); const [searchParams] = useSearchParams();
const document = useFragment(documentRowFragment, props.document); const document = useFragment(documentRowFragment, props.document);
const [hasRequested, setHasRequested] = useState( const hasRequested = !!document.access;
document.hasUserRequestedAccess,
);
const [requestAccess, isRequestingAccess] const [requestAccess, isRequestingAccess]
= useMutation<DocumentRow_requestAccessMutation>(requestAccessMutation); = useMutation<DocumentRow_requestAccessMutation>(requestAccessMutation);
@@ -83,7 +86,6 @@ export function DocumentRow(props: { document: DocumentRowFragment$key }) {
}); });
return; return;
} }
setHasRequested(true);
toast({ toast({
title: __("Success"), title: __("Success"),
description: __("Access request submitted successfully."), description: __("Access request submitted successfully."),

View File

@@ -12,7 +12,7 @@ import {
} from "@probo/ui"; } from "@probo/ui";
import { type PropsWithChildren } from "react"; import { type PropsWithChildren } from "react";
import { useMutation } from "react-relay"; import { useMutation } from "react-relay";
import { useNavigate, useSearchParams } from "react-router"; import { useLocation, useNavigate, useSearchParams } from "react-router";
import { graphql } from "relay-runtime"; import { graphql } from "relay-runtime";
import type { TrustGraphCurrentQuery$data } from "#/queries/__generated__/TrustGraphCurrentQuery.graphql"; import type { TrustGraphCurrentQuery$data } from "#/queries/__generated__/TrustGraphCurrentQuery.graphql";
@@ -41,6 +41,7 @@ export function OrganizationSidebar({
const theme = useSystemTheme(); const theme = useSystemTheme();
const [searchParams] = useSearchParams(); const [searchParams] = useSearchParams();
const navigate = useNavigate(); const navigate = useNavigate();
const location = useLocation();
const logoFileUrl = theme === "dark" ? (trustCenter?.darkLogoFileUrl ?? trustCenter?.logoFileUrl) : trustCenter?.logoFileUrl; const logoFileUrl = theme === "dark" ? (trustCenter?.darkLogoFileUrl ?? trustCenter?.logoFileUrl) : trustCenter?.logoFileUrl;
@@ -66,6 +67,8 @@ export function OrganizationSidebar({
description: __("Access request submitted successfully."), description: __("Access request submitted successfully."),
variant: "success", variant: "success",
}); });
window.location.href = location.pathname;
}, },
onError: (error) => { onError: (error) => {
if (error instanceof UnAuthenticatedError) { if (error instanceof UnAuthenticatedError) {

View File

@@ -9,7 +9,6 @@ import {
Spinner, Spinner,
useToast, useToast,
} from "@probo/ui"; } from "@probo/ui";
import { useState } from "react";
import { useFragment, useMutation } from "react-relay"; import { useFragment, useMutation } from "react-relay";
import { useLocation, useNavigate, useSearchParams } from "react-router"; import { useLocation, useNavigate, useSearchParams } from "react-router";
import { graphql } from "relay-runtime"; import { graphql } from "relay-runtime";
@@ -26,8 +25,11 @@ const requestAccessMutation = graphql`
$input: RequestTrustCenterFileAccessInput! $input: RequestTrustCenterFileAccessInput!
) { ) {
requestTrustCenterFileAccess(input: $input) { requestTrustCenterFileAccess(input: $input) {
trustCenterAccess { file {
access {
id id
status
}
} }
} }
} }
@@ -48,7 +50,10 @@ const trustCenterFileRowFragment = graphql`
id id
name name
isUserAuthorized isUserAuthorized
hasUserRequestedAccess access {
id
status
}
} }
`; `;
@@ -62,7 +67,7 @@ export function TrustCenterFileRow(props: {
const navigate = useNavigate(); const navigate = useNavigate();
const file = useFragment(trustCenterFileRowFragment, props.file); const file = useFragment(trustCenterFileRowFragment, props.file);
const [hasRequested, setHasRequested] = useState(file.hasUserRequestedAccess); const hasRequested = !!file.access;
const [requestAccess, isRequestingAccess] const [requestAccess, isRequestingAccess]
= useMutation<TrustCenterFileRow_requestAccessMutation>( = useMutation<TrustCenterFileRow_requestAccessMutation>(
@@ -87,7 +92,6 @@ export function TrustCenterFileRow(props: {
}); });
return; return;
} }
setHasRequested(true);
toast({ toast({
title: __("Success"), title: __("Success"),
description: __("Access request submitted successfully."), description: __("Access request submitted successfully."),

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<9540bd74ce3b0dd5366c237b56070d9f>> * @generated SignedSource<<beb9130a1b213333ae647116467056a0>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -9,6 +9,7 @@
// @ts-nocheck // @ts-nocheck
import { ReaderFragment } from 'relay-runtime'; import { ReaderFragment } from 'relay-runtime';
export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED";
import { FragmentRefs } from "relay-runtime"; import { FragmentRefs } from "relay-runtime";
export type AuditRowFragment$data = { export type AuditRowFragment$data = {
readonly framework: { readonly framework: {
@@ -19,8 +20,11 @@ export type AuditRowFragment$data = {
}; };
readonly name: string | null | undefined; readonly name: string | null | undefined;
readonly report: { readonly report: {
readonly access: {
readonly id: string;
readonly status: DocumentAccessStatus;
} | null | undefined;
readonly filename: string; readonly filename: string;
readonly hasUserRequestedAccess: boolean;
readonly id: string; readonly id: string;
readonly isUserAuthorized: boolean; readonly isUserAuthorized: boolean;
} | null | undefined; } | null | undefined;
@@ -76,11 +80,23 @@ return {
"name": "isUserAuthorized", "name": "isUserAuthorized",
"storageKey": null "storageKey": null
}, },
{
"alias": null,
"args": null,
"concreteType": "DocumentAccess",
"kind": "LinkedField",
"name": "access",
"plural": false,
"selections": [
(v1/*: any*/),
{ {
"alias": null, "alias": null,
"args": null, "args": null,
"kind": "ScalarField", "kind": "ScalarField",
"name": "hasUserRequestedAccess", "name": "status",
"storageKey": null
}
],
"storageKey": null "storageKey": null
} }
], ],
@@ -119,6 +135,6 @@ return {
}; };
})(); })();
(node as any).hash = "ebf47a97014ba4dad0da94f2bb01666f"; (node as any).hash = "1e3e89368594b05e0926b5ee8bc7c0b5";
export default node; export default node;

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<0e5c234b565a3031a774995bff249b97>> * @generated SignedSource<<5439a269fe5c79f6d90f2421fdacb090>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -9,6 +9,7 @@
// @ts-nocheck // @ts-nocheck
import { ConcreteRequest } from 'relay-runtime'; import { ConcreteRequest } from 'relay-runtime';
export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED";
export type RequestReportAccessInput = { export type RequestReportAccessInput = {
reportId: string; reportId: string;
}; };
@@ -17,9 +18,14 @@ export type AuditRow_requestAccessMutation$variables = {
}; };
export type AuditRow_requestAccessMutation$data = { export type AuditRow_requestAccessMutation$data = {
readonly requestReportAccess: { readonly requestReportAccess: {
readonly trustCenterAccess: { readonly audit: {
readonly report: {
readonly access: {
readonly id: string; readonly id: string;
}; readonly status: DocumentAccessStatus;
} | null | undefined;
} | null | undefined;
} | null | undefined;
}; };
}; };
export type AuditRow_requestAccessMutation = { export type AuditRow_requestAccessMutation = {
@@ -36,16 +42,49 @@ var v0 = [
} }
], ],
v1 = [ v1 = [
{
"alias": null,
"args": [
{ {
"kind": "Variable", "kind": "Variable",
"name": "input", "name": "input",
"variableName": "input" "variableName": "input"
} }
],
v2 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v3 = {
"alias": null,
"args": null,
"concreteType": "DocumentAccess",
"kind": "LinkedField",
"name": "access",
"plural": false,
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "status",
"storageKey": null
}
], ],
"concreteType": "RequestAccessesPayload", "storageKey": null
};
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "AuditRow_requestAccessMutation",
"selections": [
{
"alias": null,
"args": (v1/*: any*/),
"concreteType": "RequestReportAccessPayload",
"kind": "LinkedField", "kind": "LinkedField",
"name": "requestReportAccess", "name": "requestReportAccess",
"plural": false, "plural": false,
@@ -53,32 +92,30 @@ v1 = [
{ {
"alias": null, "alias": null,
"args": null, "args": null,
"concreteType": "TrustCenterAccess", "concreteType": "Audit",
"kind": "LinkedField", "kind": "LinkedField",
"name": "trustCenterAccess", "name": "audit",
"plural": false, "plural": false,
"selections": [ "selections": [
{ {
"alias": null, "alias": null,
"args": null, "args": null,
"kind": "ScalarField", "concreteType": "Report",
"name": "id", "kind": "LinkedField",
"storageKey": null "name": "report",
} "plural": false,
"selections": [
(v3/*: any*/)
], ],
"storageKey": null "storageKey": null
} }
], ],
"storageKey": null "storageKey": null
} }
]; ],
return { "storageKey": null
"fragment": { }
"argumentDefinitions": (v0/*: any*/), ],
"kind": "Fragment",
"metadata": null,
"name": "AuditRow_requestAccessMutation",
"selections": (v1/*: any*/),
"type": "Mutation", "type": "Mutation",
"abstractKey": null "abstractKey": null
}, },
@@ -87,19 +124,56 @@ return {
"argumentDefinitions": (v0/*: any*/), "argumentDefinitions": (v0/*: any*/),
"kind": "Operation", "kind": "Operation",
"name": "AuditRow_requestAccessMutation", "name": "AuditRow_requestAccessMutation",
"selections": (v1/*: any*/) "selections": [
{
"alias": null,
"args": (v1/*: any*/),
"concreteType": "RequestReportAccessPayload",
"kind": "LinkedField",
"name": "requestReportAccess",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Audit",
"kind": "LinkedField",
"name": "audit",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Report",
"kind": "LinkedField",
"name": "report",
"plural": false,
"selections": [
(v3/*: any*/),
(v2/*: any*/)
],
"storageKey": null
},
(v2/*: any*/)
],
"storageKey": null
}
],
"storageKey": null
}
]
}, },
"params": { "params": {
"cacheID": "6760f1ec8a6990f62461c3fab2b2934a", "cacheID": "8d33e98c3b907ff4ddf6d08a0d9e7ff8",
"id": null, "id": null,
"metadata": {}, "metadata": {},
"name": "AuditRow_requestAccessMutation", "name": "AuditRow_requestAccessMutation",
"operationKind": "mutation", "operationKind": "mutation",
"text": "mutation AuditRow_requestAccessMutation(\n $input: RequestReportAccessInput!\n) {\n requestReportAccess(input: $input) {\n trustCenterAccess {\n id\n }\n }\n}\n" "text": "mutation AuditRow_requestAccessMutation(\n $input: RequestReportAccessInput!\n) {\n requestReportAccess(input: $input) {\n audit {\n report {\n access {\n id\n status\n }\n id\n }\n id\n }\n }\n}\n"
} }
}; };
})(); })();
(node as any).hash = "6ab5eb701126385e717a381e21e55ae0"; (node as any).hash = "01e09978f688128c89698e9a0877fa37";
export default node; export default node;

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<396f9d87342c909ca373f60a1e6f7ff3>> * @generated SignedSource<<5698d403c8907dad78a4070f710f46b4>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -9,9 +9,13 @@
// @ts-nocheck // @ts-nocheck
import { ReaderFragment } from 'relay-runtime'; import { ReaderFragment } from 'relay-runtime';
export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED";
import { FragmentRefs } from "relay-runtime"; import { FragmentRefs } from "relay-runtime";
export type DocumentRowFragment$data = { export type DocumentRowFragment$data = {
readonly hasUserRequestedAccess: boolean; readonly access: {
readonly id: string;
readonly status: DocumentAccessStatus;
} | null | undefined;
readonly id: string; readonly id: string;
readonly isUserAuthorized: boolean; readonly isUserAuthorized: boolean;
readonly title: string; readonly title: string;
@@ -22,19 +26,21 @@ export type DocumentRowFragment$key = {
readonly " $fragmentSpreads": FragmentRefs<"DocumentRowFragment">; readonly " $fragmentSpreads": FragmentRefs<"DocumentRowFragment">;
}; };
const node: ReaderFragment = { const node: ReaderFragment = (function(){
"argumentDefinitions": [], var v0 = {
"kind": "Fragment",
"metadata": null,
"name": "DocumentRowFragment",
"selections": [
{
"alias": null, "alias": null,
"args": null, "args": null,
"kind": "ScalarField", "kind": "ScalarField",
"name": "id", "name": "id",
"storageKey": null "storageKey": null
}, };
return {
"argumentDefinitions": [],
"kind": "Fragment",
"metadata": null,
"name": "DocumentRowFragment",
"selections": [
(v0/*: any*/),
{ {
"alias": null, "alias": null,
"args": null, "args": null,
@@ -49,18 +55,31 @@ const node: ReaderFragment = {
"name": "isUserAuthorized", "name": "isUserAuthorized",
"storageKey": null "storageKey": null
}, },
{
"alias": null,
"args": null,
"concreteType": "DocumentAccess",
"kind": "LinkedField",
"name": "access",
"plural": false,
"selections": [
(v0/*: any*/),
{ {
"alias": null, "alias": null,
"args": null, "args": null,
"kind": "ScalarField", "kind": "ScalarField",
"name": "hasUserRequestedAccess", "name": "status",
"storageKey": null
}
],
"storageKey": null "storageKey": null
} }
], ],
"type": "Document", "type": "Document",
"abstractKey": null "abstractKey": null
}; };
})();
(node as any).hash = "1b0f0b9cae621268d72b0fd0646aa672"; (node as any).hash = "6839ab4ad70d571dcce4e74583723244";
export default node; export default node;

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<e62c28d53365ca5d5f3d53282aefd4e7>> * @generated SignedSource<<b24d17465cf3d4aca2ade3fbd21326eb>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -9,6 +9,7 @@
// @ts-nocheck // @ts-nocheck
import { ConcreteRequest } from 'relay-runtime'; import { ConcreteRequest } from 'relay-runtime';
export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED";
export type RequestDocumentAccessInput = { export type RequestDocumentAccessInput = {
documentId: string; documentId: string;
}; };
@@ -17,9 +18,12 @@ export type DocumentRow_requestAccessMutation$variables = {
}; };
export type DocumentRow_requestAccessMutation$data = { export type DocumentRow_requestAccessMutation$data = {
readonly requestDocumentAccess: { readonly requestDocumentAccess: {
readonly trustCenterAccess: { readonly document: {
readonly access: {
readonly id: string; readonly id: string;
}; readonly status: DocumentAccessStatus;
} | null | undefined;
} | null | undefined;
}; };
}; };
export type DocumentRow_requestAccessMutation = { export type DocumentRow_requestAccessMutation = {
@@ -36,16 +40,49 @@ var v0 = [
} }
], ],
v1 = [ v1 = [
{
"alias": null,
"args": [
{ {
"kind": "Variable", "kind": "Variable",
"name": "input", "name": "input",
"variableName": "input" "variableName": "input"
} }
],
v2 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v3 = {
"alias": null,
"args": null,
"concreteType": "DocumentAccess",
"kind": "LinkedField",
"name": "access",
"plural": false,
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "status",
"storageKey": null
}
], ],
"concreteType": "RequestAccessesPayload", "storageKey": null
};
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "DocumentRow_requestAccessMutation",
"selections": [
{
"alias": null,
"args": (v1/*: any*/),
"concreteType": "RequestDocumentAccessPayload",
"kind": "LinkedField", "kind": "LinkedField",
"name": "requestDocumentAccess", "name": "requestDocumentAccess",
"plural": false, "plural": false,
@@ -53,32 +90,19 @@ v1 = [
{ {
"alias": null, "alias": null,
"args": null, "args": null,
"concreteType": "TrustCenterAccess", "concreteType": "Document",
"kind": "LinkedField", "kind": "LinkedField",
"name": "trustCenterAccess", "name": "document",
"plural": false, "plural": false,
"selections": [ "selections": [
{ (v3/*: any*/)
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
}
], ],
"storageKey": null "storageKey": null
} }
], ],
"storageKey": null "storageKey": null
} }
]; ],
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "DocumentRow_requestAccessMutation",
"selections": (v1/*: any*/),
"type": "Mutation", "type": "Mutation",
"abstractKey": null "abstractKey": null
}, },
@@ -87,19 +111,44 @@ return {
"argumentDefinitions": (v0/*: any*/), "argumentDefinitions": (v0/*: any*/),
"kind": "Operation", "kind": "Operation",
"name": "DocumentRow_requestAccessMutation", "name": "DocumentRow_requestAccessMutation",
"selections": (v1/*: any*/) "selections": [
{
"alias": null,
"args": (v1/*: any*/),
"concreteType": "RequestDocumentAccessPayload",
"kind": "LinkedField",
"name": "requestDocumentAccess",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Document",
"kind": "LinkedField",
"name": "document",
"plural": false,
"selections": [
(v3/*: any*/),
(v2/*: any*/)
],
"storageKey": null
}
],
"storageKey": null
}
]
}, },
"params": { "params": {
"cacheID": "13715b7cb8784d050b6d0381e460bbad", "cacheID": "0bd652390e5413f5ba2c66af0796cbc9",
"id": null, "id": null,
"metadata": {}, "metadata": {},
"name": "DocumentRow_requestAccessMutation", "name": "DocumentRow_requestAccessMutation",
"operationKind": "mutation", "operationKind": "mutation",
"text": "mutation DocumentRow_requestAccessMutation(\n $input: RequestDocumentAccessInput!\n) {\n requestDocumentAccess(input: $input) {\n trustCenterAccess {\n id\n }\n }\n}\n" "text": "mutation DocumentRow_requestAccessMutation(\n $input: RequestDocumentAccessInput!\n) {\n requestDocumentAccess(input: $input) {\n document {\n access {\n id\n status\n }\n id\n }\n }\n}\n"
} }
}; };
})(); })();
(node as any).hash = "ca9026b04c2de91067759e3a80e5c276"; (node as any).hash = "bc8897aa5c4a7d7fb05604f8aa3b8491";
export default node; export default node;

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<0261adc72d21035b906b6156ea9d0b40>> * @generated SignedSource<<bd09e92db1b1b5bf9c45145f4058e88f>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -9,9 +9,13 @@
// @ts-nocheck // @ts-nocheck
import { ReaderFragment } from 'relay-runtime'; import { ReaderFragment } from 'relay-runtime';
export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED";
import { FragmentRefs } from "relay-runtime"; import { FragmentRefs } from "relay-runtime";
export type TrustCenterFileRowFragment$data = { export type TrustCenterFileRowFragment$data = {
readonly hasUserRequestedAccess: boolean; readonly access: {
readonly id: string;
readonly status: DocumentAccessStatus;
} | null | undefined;
readonly id: string; readonly id: string;
readonly isUserAuthorized: boolean; readonly isUserAuthorized: boolean;
readonly name: string; readonly name: string;
@@ -22,19 +26,21 @@ export type TrustCenterFileRowFragment$key = {
readonly " $fragmentSpreads": FragmentRefs<"TrustCenterFileRowFragment">; readonly " $fragmentSpreads": FragmentRefs<"TrustCenterFileRowFragment">;
}; };
const node: ReaderFragment = { const node: ReaderFragment = (function(){
"argumentDefinitions": [], var v0 = {
"kind": "Fragment",
"metadata": null,
"name": "TrustCenterFileRowFragment",
"selections": [
{
"alias": null, "alias": null,
"args": null, "args": null,
"kind": "ScalarField", "kind": "ScalarField",
"name": "id", "name": "id",
"storageKey": null "storageKey": null
}, };
return {
"argumentDefinitions": [],
"kind": "Fragment",
"metadata": null,
"name": "TrustCenterFileRowFragment",
"selections": [
(v0/*: any*/),
{ {
"alias": null, "alias": null,
"args": null, "args": null,
@@ -49,18 +55,31 @@ const node: ReaderFragment = {
"name": "isUserAuthorized", "name": "isUserAuthorized",
"storageKey": null "storageKey": null
}, },
{
"alias": null,
"args": null,
"concreteType": "DocumentAccess",
"kind": "LinkedField",
"name": "access",
"plural": false,
"selections": [
(v0/*: any*/),
{ {
"alias": null, "alias": null,
"args": null, "args": null,
"kind": "ScalarField", "kind": "ScalarField",
"name": "hasUserRequestedAccess", "name": "status",
"storageKey": null
}
],
"storageKey": null "storageKey": null
} }
], ],
"type": "TrustCenterFile", "type": "TrustCenterFile",
"abstractKey": null "abstractKey": null
}; };
})();
(node as any).hash = "4ff11c14e65566f0dfe3a77ea73903e8"; (node as any).hash = "98e5e399ab6d45c22cd85d663cfb3748";
export default node; export default node;

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<a8da5aa24d8696b55231f44d861f347c>> * @generated SignedSource<<19d9adae53e45d4399358c9307928265>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -9,6 +9,7 @@
// @ts-nocheck // @ts-nocheck
import { ConcreteRequest } from 'relay-runtime'; import { ConcreteRequest } from 'relay-runtime';
export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED";
export type RequestTrustCenterFileAccessInput = { export type RequestTrustCenterFileAccessInput = {
trustCenterFileId: string; trustCenterFileId: string;
}; };
@@ -17,9 +18,12 @@ export type TrustCenterFileRow_requestAccessMutation$variables = {
}; };
export type TrustCenterFileRow_requestAccessMutation$data = { export type TrustCenterFileRow_requestAccessMutation$data = {
readonly requestTrustCenterFileAccess: { readonly requestTrustCenterFileAccess: {
readonly trustCenterAccess: { readonly file: {
readonly access: {
readonly id: string; readonly id: string;
}; readonly status: DocumentAccessStatus;
} | null | undefined;
} | null | undefined;
}; };
}; };
export type TrustCenterFileRow_requestAccessMutation = { export type TrustCenterFileRow_requestAccessMutation = {
@@ -36,16 +40,49 @@ var v0 = [
} }
], ],
v1 = [ v1 = [
{
"alias": null,
"args": [
{ {
"kind": "Variable", "kind": "Variable",
"name": "input", "name": "input",
"variableName": "input" "variableName": "input"
} }
],
v2 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v3 = {
"alias": null,
"args": null,
"concreteType": "DocumentAccess",
"kind": "LinkedField",
"name": "access",
"plural": false,
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "status",
"storageKey": null
}
], ],
"concreteType": "RequestAccessesPayload", "storageKey": null
};
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "TrustCenterFileRow_requestAccessMutation",
"selections": [
{
"alias": null,
"args": (v1/*: any*/),
"concreteType": "RequestFileAccessPayload",
"kind": "LinkedField", "kind": "LinkedField",
"name": "requestTrustCenterFileAccess", "name": "requestTrustCenterFileAccess",
"plural": false, "plural": false,
@@ -53,32 +90,19 @@ v1 = [
{ {
"alias": null, "alias": null,
"args": null, "args": null,
"concreteType": "TrustCenterAccess", "concreteType": "TrustCenterFile",
"kind": "LinkedField", "kind": "LinkedField",
"name": "trustCenterAccess", "name": "file",
"plural": false, "plural": false,
"selections": [ "selections": [
{ (v3/*: any*/)
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
}
], ],
"storageKey": null "storageKey": null
} }
], ],
"storageKey": null "storageKey": null
} }
]; ],
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "TrustCenterFileRow_requestAccessMutation",
"selections": (v1/*: any*/),
"type": "Mutation", "type": "Mutation",
"abstractKey": null "abstractKey": null
}, },
@@ -87,19 +111,44 @@ return {
"argumentDefinitions": (v0/*: any*/), "argumentDefinitions": (v0/*: any*/),
"kind": "Operation", "kind": "Operation",
"name": "TrustCenterFileRow_requestAccessMutation", "name": "TrustCenterFileRow_requestAccessMutation",
"selections": (v1/*: any*/) "selections": [
{
"alias": null,
"args": (v1/*: any*/),
"concreteType": "RequestFileAccessPayload",
"kind": "LinkedField",
"name": "requestTrustCenterFileAccess",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "TrustCenterFile",
"kind": "LinkedField",
"name": "file",
"plural": false,
"selections": [
(v3/*: any*/),
(v2/*: any*/)
],
"storageKey": null
}
],
"storageKey": null
}
]
}, },
"params": { "params": {
"cacheID": "77a09810aa9c3ddf3a3baddf709f9a42", "cacheID": "f96fd0464a34ad565cc7b6bb2e13308f",
"id": null, "id": null,
"metadata": {}, "metadata": {},
"name": "TrustCenterFileRow_requestAccessMutation", "name": "TrustCenterFileRow_requestAccessMutation",
"operationKind": "mutation", "operationKind": "mutation",
"text": "mutation TrustCenterFileRow_requestAccessMutation(\n $input: RequestTrustCenterFileAccessInput!\n) {\n requestTrustCenterFileAccess(input: $input) {\n trustCenterAccess {\n id\n }\n }\n}\n" "text": "mutation TrustCenterFileRow_requestAccessMutation(\n $input: RequestTrustCenterFileAccessInput!\n) {\n requestTrustCenterFileAccess(input: $input) {\n file {\n access {\n id\n status\n }\n id\n }\n }\n}\n"
} }
}; };
})(); })();
(node as any).hash = "eba04489de9ec18ab9816328a481ef33"; (node as any).hash = "1a9f7ac6860d4bca88d04d73f9c6020d";
export default node; export default node;

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<6b6304c9a22de890f171632f8c9dabe1>> * @generated SignedSource<<aae03fb419e3ef00b45151ceeb0988cd>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -9,6 +9,7 @@
// @ts-nocheck // @ts-nocheck
import { ConcreteRequest } from 'relay-runtime'; import { ConcreteRequest } from 'relay-runtime';
export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED";
export type RequestDocumentAccessInput = { export type RequestDocumentAccessInput = {
documentId: string; documentId: string;
}; };
@@ -17,9 +18,12 @@ export type useRequestAccessCallback_documentMutation$variables = {
}; };
export type useRequestAccessCallback_documentMutation$data = { export type useRequestAccessCallback_documentMutation$data = {
readonly requestDocumentAccess: { readonly requestDocumentAccess: {
readonly trustCenterAccess: { readonly document: {
readonly access: {
readonly id: string; readonly id: string;
}; readonly status: DocumentAccessStatus;
} | null | undefined;
} | null | undefined;
}; };
}; };
export type useRequestAccessCallback_documentMutation = { export type useRequestAccessCallback_documentMutation = {
@@ -36,16 +40,49 @@ var v0 = [
} }
], ],
v1 = [ v1 = [
{
"alias": null,
"args": [
{ {
"kind": "Variable", "kind": "Variable",
"name": "input", "name": "input",
"variableName": "input" "variableName": "input"
} }
],
v2 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v3 = {
"alias": null,
"args": null,
"concreteType": "DocumentAccess",
"kind": "LinkedField",
"name": "access",
"plural": false,
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "status",
"storageKey": null
}
], ],
"concreteType": "RequestAccessesPayload", "storageKey": null
};
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "useRequestAccessCallback_documentMutation",
"selections": [
{
"alias": null,
"args": (v1/*: any*/),
"concreteType": "RequestDocumentAccessPayload",
"kind": "LinkedField", "kind": "LinkedField",
"name": "requestDocumentAccess", "name": "requestDocumentAccess",
"plural": false, "plural": false,
@@ -53,32 +90,19 @@ v1 = [
{ {
"alias": null, "alias": null,
"args": null, "args": null,
"concreteType": "TrustCenterAccess", "concreteType": "Document",
"kind": "LinkedField", "kind": "LinkedField",
"name": "trustCenterAccess", "name": "document",
"plural": false, "plural": false,
"selections": [ "selections": [
{ (v3/*: any*/)
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
}
], ],
"storageKey": null "storageKey": null
} }
], ],
"storageKey": null "storageKey": null
} }
]; ],
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "useRequestAccessCallback_documentMutation",
"selections": (v1/*: any*/),
"type": "Mutation", "type": "Mutation",
"abstractKey": null "abstractKey": null
}, },
@@ -87,19 +111,44 @@ return {
"argumentDefinitions": (v0/*: any*/), "argumentDefinitions": (v0/*: any*/),
"kind": "Operation", "kind": "Operation",
"name": "useRequestAccessCallback_documentMutation", "name": "useRequestAccessCallback_documentMutation",
"selections": (v1/*: any*/) "selections": [
{
"alias": null,
"args": (v1/*: any*/),
"concreteType": "RequestDocumentAccessPayload",
"kind": "LinkedField",
"name": "requestDocumentAccess",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Document",
"kind": "LinkedField",
"name": "document",
"plural": false,
"selections": [
(v3/*: any*/),
(v2/*: any*/)
],
"storageKey": null
}
],
"storageKey": null
}
]
}, },
"params": { "params": {
"cacheID": "849ea6a746660bdee8ebf805baef7a33", "cacheID": "e3153093fd3da3f95ac5bc98a09163a7",
"id": null, "id": null,
"metadata": {}, "metadata": {},
"name": "useRequestAccessCallback_documentMutation", "name": "useRequestAccessCallback_documentMutation",
"operationKind": "mutation", "operationKind": "mutation",
"text": "mutation useRequestAccessCallback_documentMutation(\n $input: RequestDocumentAccessInput!\n) {\n requestDocumentAccess(input: $input) {\n trustCenterAccess {\n id\n }\n }\n}\n" "text": "mutation useRequestAccessCallback_documentMutation(\n $input: RequestDocumentAccessInput!\n) {\n requestDocumentAccess(input: $input) {\n document {\n access {\n id\n status\n }\n id\n }\n }\n}\n"
} }
}; };
})(); })();
(node as any).hash = "1ff8b5f560d8c3024e6d5c11bb2ed889"; (node as any).hash = "afc533a5d5b764f81f6bc7632f1614ff";
export default node; export default node;

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<6db2a4322199d638b3f1ac498ecd066b>> * @generated SignedSource<<688bb06b7534c867b9427a6fcbb52d57>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -9,6 +9,7 @@
// @ts-nocheck // @ts-nocheck
import { ConcreteRequest } from 'relay-runtime'; import { ConcreteRequest } from 'relay-runtime';
export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED";
export type RequestTrustCenterFileAccessInput = { export type RequestTrustCenterFileAccessInput = {
trustCenterFileId: string; trustCenterFileId: string;
}; };
@@ -17,9 +18,12 @@ export type useRequestAccessCallback_fileMutation$variables = {
}; };
export type useRequestAccessCallback_fileMutation$data = { export type useRequestAccessCallback_fileMutation$data = {
readonly requestTrustCenterFileAccess: { readonly requestTrustCenterFileAccess: {
readonly trustCenterAccess: { readonly file: {
readonly access: {
readonly id: string; readonly id: string;
}; readonly status: DocumentAccessStatus;
} | null | undefined;
} | null | undefined;
}; };
}; };
export type useRequestAccessCallback_fileMutation = { export type useRequestAccessCallback_fileMutation = {
@@ -36,16 +40,49 @@ var v0 = [
} }
], ],
v1 = [ v1 = [
{
"alias": null,
"args": [
{ {
"kind": "Variable", "kind": "Variable",
"name": "input", "name": "input",
"variableName": "input" "variableName": "input"
} }
],
v2 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v3 = {
"alias": null,
"args": null,
"concreteType": "DocumentAccess",
"kind": "LinkedField",
"name": "access",
"plural": false,
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "status",
"storageKey": null
}
], ],
"concreteType": "RequestAccessesPayload", "storageKey": null
};
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "useRequestAccessCallback_fileMutation",
"selections": [
{
"alias": null,
"args": (v1/*: any*/),
"concreteType": "RequestFileAccessPayload",
"kind": "LinkedField", "kind": "LinkedField",
"name": "requestTrustCenterFileAccess", "name": "requestTrustCenterFileAccess",
"plural": false, "plural": false,
@@ -53,32 +90,19 @@ v1 = [
{ {
"alias": null, "alias": null,
"args": null, "args": null,
"concreteType": "TrustCenterAccess", "concreteType": "TrustCenterFile",
"kind": "LinkedField", "kind": "LinkedField",
"name": "trustCenterAccess", "name": "file",
"plural": false, "plural": false,
"selections": [ "selections": [
{ (v3/*: any*/)
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
}
], ],
"storageKey": null "storageKey": null
} }
], ],
"storageKey": null "storageKey": null
} }
]; ],
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "useRequestAccessCallback_fileMutation",
"selections": (v1/*: any*/),
"type": "Mutation", "type": "Mutation",
"abstractKey": null "abstractKey": null
}, },
@@ -87,19 +111,44 @@ return {
"argumentDefinitions": (v0/*: any*/), "argumentDefinitions": (v0/*: any*/),
"kind": "Operation", "kind": "Operation",
"name": "useRequestAccessCallback_fileMutation", "name": "useRequestAccessCallback_fileMutation",
"selections": (v1/*: any*/) "selections": [
{
"alias": null,
"args": (v1/*: any*/),
"concreteType": "RequestFileAccessPayload",
"kind": "LinkedField",
"name": "requestTrustCenterFileAccess",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "TrustCenterFile",
"kind": "LinkedField",
"name": "file",
"plural": false,
"selections": [
(v3/*: any*/),
(v2/*: any*/)
],
"storageKey": null
}
],
"storageKey": null
}
]
}, },
"params": { "params": {
"cacheID": "1ed0d9f8a3b3dc08c2af16101729d3a9", "cacheID": "0c66e592bdb92aa92fbaef21c8133e17",
"id": null, "id": null,
"metadata": {}, "metadata": {},
"name": "useRequestAccessCallback_fileMutation", "name": "useRequestAccessCallback_fileMutation",
"operationKind": "mutation", "operationKind": "mutation",
"text": "mutation useRequestAccessCallback_fileMutation(\n $input: RequestTrustCenterFileAccessInput!\n) {\n requestTrustCenterFileAccess(input: $input) {\n trustCenterAccess {\n id\n }\n }\n}\n" "text": "mutation useRequestAccessCallback_fileMutation(\n $input: RequestTrustCenterFileAccessInput!\n) {\n requestTrustCenterFileAccess(input: $input) {\n file {\n access {\n id\n status\n }\n id\n }\n }\n}\n"
} }
}; };
})(); })();
(node as any).hash = "5105b60de987b135523ada9ee2777dea"; (node as any).hash = "0dbe835b29f81d086b94cfecb8fc832f";
export default node; export default node;

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<d36c3f435afa928b80d415bd53786d81>> * @generated SignedSource<<b995c7259ba7df94fbdc49770ec83a92>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -9,6 +9,7 @@
// @ts-nocheck // @ts-nocheck
import { ConcreteRequest } from 'relay-runtime'; import { ConcreteRequest } from 'relay-runtime';
export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED";
export type RequestReportAccessInput = { export type RequestReportAccessInput = {
reportId: string; reportId: string;
}; };
@@ -17,9 +18,14 @@ export type useRequestAccessCallback_reportMutation$variables = {
}; };
export type useRequestAccessCallback_reportMutation$data = { export type useRequestAccessCallback_reportMutation$data = {
readonly requestReportAccess: { readonly requestReportAccess: {
readonly trustCenterAccess: { readonly audit: {
readonly report: {
readonly access: {
readonly id: string; readonly id: string;
}; readonly status: DocumentAccessStatus;
} | null | undefined;
} | null | undefined;
} | null | undefined;
}; };
}; };
export type useRequestAccessCallback_reportMutation = { export type useRequestAccessCallback_reportMutation = {
@@ -36,16 +42,49 @@ var v0 = [
} }
], ],
v1 = [ v1 = [
{
"alias": null,
"args": [
{ {
"kind": "Variable", "kind": "Variable",
"name": "input", "name": "input",
"variableName": "input" "variableName": "input"
} }
],
v2 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v3 = {
"alias": null,
"args": null,
"concreteType": "DocumentAccess",
"kind": "LinkedField",
"name": "access",
"plural": false,
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "status",
"storageKey": null
}
], ],
"concreteType": "RequestAccessesPayload", "storageKey": null
};
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "useRequestAccessCallback_reportMutation",
"selections": [
{
"alias": null,
"args": (v1/*: any*/),
"concreteType": "RequestReportAccessPayload",
"kind": "LinkedField", "kind": "LinkedField",
"name": "requestReportAccess", "name": "requestReportAccess",
"plural": false, "plural": false,
@@ -53,32 +92,30 @@ v1 = [
{ {
"alias": null, "alias": null,
"args": null, "args": null,
"concreteType": "TrustCenterAccess", "concreteType": "Audit",
"kind": "LinkedField", "kind": "LinkedField",
"name": "trustCenterAccess", "name": "audit",
"plural": false, "plural": false,
"selections": [ "selections": [
{ {
"alias": null, "alias": null,
"args": null, "args": null,
"kind": "ScalarField", "concreteType": "Report",
"name": "id", "kind": "LinkedField",
"storageKey": null "name": "report",
} "plural": false,
"selections": [
(v3/*: any*/)
], ],
"storageKey": null "storageKey": null
} }
], ],
"storageKey": null "storageKey": null
} }
]; ],
return { "storageKey": null
"fragment": { }
"argumentDefinitions": (v0/*: any*/), ],
"kind": "Fragment",
"metadata": null,
"name": "useRequestAccessCallback_reportMutation",
"selections": (v1/*: any*/),
"type": "Mutation", "type": "Mutation",
"abstractKey": null "abstractKey": null
}, },
@@ -87,19 +124,56 @@ return {
"argumentDefinitions": (v0/*: any*/), "argumentDefinitions": (v0/*: any*/),
"kind": "Operation", "kind": "Operation",
"name": "useRequestAccessCallback_reportMutation", "name": "useRequestAccessCallback_reportMutation",
"selections": (v1/*: any*/) "selections": [
{
"alias": null,
"args": (v1/*: any*/),
"concreteType": "RequestReportAccessPayload",
"kind": "LinkedField",
"name": "requestReportAccess",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Audit",
"kind": "LinkedField",
"name": "audit",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Report",
"kind": "LinkedField",
"name": "report",
"plural": false,
"selections": [
(v3/*: any*/),
(v2/*: any*/)
],
"storageKey": null
},
(v2/*: any*/)
],
"storageKey": null
}
],
"storageKey": null
}
]
}, },
"params": { "params": {
"cacheID": "c859384ca219b8302245e0bed292e698", "cacheID": "82539e9ad64aa2bd9e5bd2cac4597f23",
"id": null, "id": null,
"metadata": {}, "metadata": {},
"name": "useRequestAccessCallback_reportMutation", "name": "useRequestAccessCallback_reportMutation",
"operationKind": "mutation", "operationKind": "mutation",
"text": "mutation useRequestAccessCallback_reportMutation(\n $input: RequestReportAccessInput!\n) {\n requestReportAccess(input: $input) {\n trustCenterAccess {\n id\n }\n }\n}\n" "text": "mutation useRequestAccessCallback_reportMutation(\n $input: RequestReportAccessInput!\n) {\n requestReportAccess(input: $input) {\n audit {\n report {\n access {\n id\n status\n }\n id\n }\n id\n }\n }\n}\n"
} }
}; };
})(); })();
(node as any).hash = "6ad61c2f6638f5d31c9c25b0044f080a"; (node as any).hash = "6b07d19642a0227f76f81bb64dac82ea";
export default node; export default node;

View File

@@ -3,7 +3,7 @@ import { useTranslate } from "@probo/i18n";
import { useToast } from "@probo/ui"; import { useToast } from "@probo/ui";
import { useEffect } from "react"; import { useEffect } from "react";
import { useMutation } from "react-relay"; import { useMutation } from "react-relay";
import { useSearchParams } from "react-router"; import { useLocation, useSearchParams } from "react-router";
import { graphql } from "relay-runtime"; import { graphql } from "relay-runtime";
import type { useRequestAccessCallback_allMutation } from "./__generated__/useRequestAccessCallback_allMutation.graphql"; import type { useRequestAccessCallback_allMutation } from "./__generated__/useRequestAccessCallback_allMutation.graphql";
@@ -16,8 +16,11 @@ const documentMutation = graphql`
$input: RequestDocumentAccessInput! $input: RequestDocumentAccessInput!
) { ) {
requestDocumentAccess(input: $input) { requestDocumentAccess(input: $input) {
trustCenterAccess { document {
access {
id id
status
}
} }
} }
} }
@@ -28,8 +31,13 @@ const reportMutation = graphql`
$input: RequestReportAccessInput! $input: RequestReportAccessInput!
) { ) {
requestReportAccess(input: $input) { requestReportAccess(input: $input) {
trustCenterAccess { audit {
report {
access {
id id
status
}
}
} }
} }
} }
@@ -40,8 +48,11 @@ const fileMutation = graphql`
$input: RequestTrustCenterFileAccessInput! $input: RequestTrustCenterFileAccessInput!
) { ) {
requestTrustCenterFileAccess(input: $input) { requestTrustCenterFileAccess(input: $input) {
trustCenterAccess { file {
access {
id id
status
}
} }
} }
} }
@@ -75,6 +86,7 @@ function successToastArgs(__: (s: string) => string) {
export function useRequestAccessCallback() { export function useRequestAccessCallback() {
const [searchParams, setSearchParams] = useSearchParams(); const [searchParams, setSearchParams] = useSearchParams();
const location = useLocation();
const documentId = searchParams.get("request-document-id"); const documentId = searchParams.get("request-document-id");
const reportId = searchParams.get("request-report-id"); const reportId = searchParams.get("request-report-id");
@@ -173,6 +185,7 @@ export function useRequestAccessCallback() {
toast(successToastArgs(__)); toast(successToastArgs(__));
searchParams.delete("request-all"); searchParams.delete("request-all");
setSearchParams(searchParams); setSearchParams(searchParams);
window.location.href = location.pathname;
}, },
onError: (error) => { onError: (error) => {
toast(errorToastArgs(__, error)); toast(errorToastArgs(__, error));
@@ -194,5 +207,6 @@ export function useRequestAccessCallback() {
searchParams, searchParams,
setSearchParams, setSearchParams,
toast, toast,
location,
]); ]);
} }

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<dabe16493c003a98ed8fd555efc85ddc>> * @generated SignedSource<<49da700d766fbc346562bd5c8ec01ade>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -87,10 +87,22 @@ v5 = {
"storageKey": null "storageKey": null
}, },
v6 = { v6 = {
"alias": null,
"args": null,
"concreteType": "DocumentAccess",
"kind": "LinkedField",
"name": "access",
"plural": false,
"selections": [
(v0/*: any*/),
{
"alias": null, "alias": null,
"args": null, "args": null,
"kind": "ScalarField", "kind": "ScalarField",
"name": "hasUserRequestedAccess", "name": "status",
"storageKey": null
}
],
"storageKey": null "storageKey": null
}; };
return { return {
@@ -324,12 +336,12 @@ return {
] ]
}, },
"params": { "params": {
"cacheID": "c9c4cb18da98c40646fbbe21c2c5b46f", "cacheID": "479815df76932e5e2a6c57f97efdd029",
"id": null, "id": null,
"metadata": {}, "metadata": {},
"name": "TrustGraphCurrentDocumentsQuery", "name": "TrustGraphCurrentDocumentsQuery",
"operationKind": "query", "operationKind": "query",
"text": "query TrustGraphCurrentDocumentsQuery {\n currentTrustCenter {\n id\n organization {\n name\n id\n }\n documents(first: 50) {\n edges {\n node {\n id\n documentType\n ...DocumentRowFragment\n }\n }\n }\n trustCenterFiles(first: 50) {\n edges {\n node {\n id\n category\n ...TrustCenterFileRowFragment\n }\n }\n }\n }\n}\n\nfragment DocumentRowFragment on Document {\n id\n title\n isUserAuthorized\n hasUserRequestedAccess\n}\n\nfragment TrustCenterFileRowFragment on TrustCenterFile {\n id\n name\n isUserAuthorized\n hasUserRequestedAccess\n}\n" "text": "query TrustGraphCurrentDocumentsQuery {\n currentTrustCenter {\n id\n organization {\n name\n id\n }\n documents(first: 50) {\n edges {\n node {\n id\n documentType\n ...DocumentRowFragment\n }\n }\n }\n trustCenterFiles(first: 50) {\n edges {\n node {\n id\n category\n ...TrustCenterFileRowFragment\n }\n }\n }\n }\n}\n\nfragment DocumentRowFragment on Document {\n id\n title\n isUserAuthorized\n access {\n id\n status\n }\n}\n\nfragment TrustCenterFileRowFragment on TrustCenterFile {\n id\n name\n isUserAuthorized\n access {\n id\n status\n }\n}\n"
} }
}; };
})(); })();

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<e0f568dfda1fadf66ee2ec5f79129196>> * @generated SignedSource<<47a6e80d3532b4c93d18495c2be7676d>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -184,8 +184,14 @@ v15 = {
v16 = { v16 = {
"alias": null, "alias": null,
"args": null, "args": null,
"kind": "ScalarField", "concreteType": "DocumentAccess",
"name": "hasUserRequestedAccess", "kind": "LinkedField",
"name": "access",
"plural": false,
"selections": [
(v0/*: any*/),
(v6/*: any*/)
],
"storageKey": null "storageKey": null
}; };
return { return {
@@ -648,12 +654,12 @@ return {
] ]
}, },
"params": { "params": {
"cacheID": "442afcae5b414e0130cd702cf01f5c63", "cacheID": "42b477429f092f97b0f444433a78c6d1",
"id": null, "id": null,
"metadata": {}, "metadata": {},
"name": "TrustGraphCurrentQuery", "name": "TrustGraphCurrentQuery",
"operationKind": "query", "operationKind": "query",
"text": "query TrustGraphCurrentQuery {\n currentTrustCenter {\n id\n slug\n logoFileUrl\n darkLogoFileUrl\n nonDisclosureAgreement {\n fileName\n fileUrl\n viewerSignature {\n status\n id\n }\n }\n organization {\n name\n description\n websiteUrl\n email\n headquarterAddress\n id\n }\n ...OverviewPageFragment\n vendorInfo: vendors(first: 0) {\n totalCount\n }\n audits(first: 50) {\n edges {\n node {\n id\n ...AuditRowFragment\n }\n }\n }\n }\n}\n\nfragment AuditRowFragment on Audit {\n name\n report {\n id\n filename\n isUserAuthorized\n hasUserRequestedAccess\n }\n framework {\n id\n name\n lightLogoURL\n darkLogoURL\n }\n}\n\nfragment DocumentRowFragment on Document {\n id\n title\n isUserAuthorized\n hasUserRequestedAccess\n}\n\nfragment OverviewPageFragment on TrustCenter {\n references(first: 14) {\n edges {\n node {\n id\n name\n logoUrl\n websiteUrl\n }\n }\n }\n vendors(first: 3) {\n edges {\n node {\n id\n countries\n ...VendorRowFragment\n }\n }\n }\n documents(first: 5) {\n edges {\n node {\n id\n ...DocumentRowFragment\n documentType\n }\n }\n }\n trustCenterFiles(first: 5) {\n edges {\n node {\n id\n category\n ...TrustCenterFileRowFragment\n }\n }\n }\n}\n\nfragment TrustCenterFileRowFragment on TrustCenterFile {\n id\n name\n isUserAuthorized\n hasUserRequestedAccess\n}\n\nfragment VendorRowFragment on Vendor {\n name\n description\n websiteUrl\n countries\n}\n" "text": "query TrustGraphCurrentQuery {\n currentTrustCenter {\n id\n slug\n logoFileUrl\n darkLogoFileUrl\n nonDisclosureAgreement {\n fileName\n fileUrl\n viewerSignature {\n status\n id\n }\n }\n organization {\n name\n description\n websiteUrl\n email\n headquarterAddress\n id\n }\n ...OverviewPageFragment\n vendorInfo: vendors(first: 0) {\n totalCount\n }\n audits(first: 50) {\n edges {\n node {\n id\n ...AuditRowFragment\n }\n }\n }\n }\n}\n\nfragment AuditRowFragment on Audit {\n name\n report {\n id\n filename\n isUserAuthorized\n access {\n id\n status\n }\n }\n framework {\n id\n name\n lightLogoURL\n darkLogoURL\n }\n}\n\nfragment DocumentRowFragment on Document {\n id\n title\n isUserAuthorized\n access {\n id\n status\n }\n}\n\nfragment OverviewPageFragment on TrustCenter {\n references(first: 14) {\n edges {\n node {\n id\n name\n logoUrl\n websiteUrl\n }\n }\n }\n vendors(first: 3) {\n edges {\n node {\n id\n countries\n ...VendorRowFragment\n }\n }\n }\n documents(first: 5) {\n edges {\n node {\n id\n ...DocumentRowFragment\n documentType\n }\n }\n }\n trustCenterFiles(first: 5) {\n edges {\n node {\n id\n category\n ...TrustCenterFileRowFragment\n }\n }\n }\n}\n\nfragment TrustCenterFileRowFragment on TrustCenterFile {\n id\n name\n isUserAuthorized\n access {\n id\n status\n }\n}\n\nfragment VendorRowFragment on Vendor {\n name\n description\n websiteUrl\n countries\n}\n"
} }
}; };
})(); })();

View File

@@ -63,7 +63,7 @@ type Document implements Node @nda {
title: String! title: String!
documentType: DocumentType! documentType: DocumentType!
isUserAuthorized: Boolean! @goField(forceResolver: true) isUserAuthorized: Boolean! @goField(forceResolver: true)
hasUserRequestedAccess: Boolean! @goField(forceResolver: true) access: DocumentAccess @goField(forceResolver: true)
} }
type DocumentConnection @nda { type DocumentConnection @nda {
@@ -87,7 +87,7 @@ type Report implements Node @nda {
id: ID! id: ID!
filename: String! filename: String!
isUserAuthorized: Boolean! @goField(forceResolver: true) isUserAuthorized: Boolean! @goField(forceResolver: true)
hasUserRequestedAccess: Boolean! @goField(forceResolver: true) access: DocumentAccess @goField(forceResolver: true)
} }
type Audit implements Node @nda { type Audit implements Node @nda {
@@ -478,7 +478,7 @@ type TrustCenterFile implements Node @nda {
name: String! name: String!
category: String! category: String!
isUserAuthorized: Boolean! @goField(forceResolver: true) isUserAuthorized: Boolean! @goField(forceResolver: true)
hasUserRequestedAccess: Boolean! @goField(forceResolver: true) access: DocumentAccess @goField(forceResolver: true)
} }
type TrustCenterFileConnection @nda { type TrustCenterFileConnection @nda {
@@ -552,6 +552,33 @@ type TrustCenterAccess implements Node {
updatedAt: Datetime! updatedAt: Datetime!
} }
enum DocumentAccessStatus
@goModel(
model: "go.probo.inc/probo/pkg/coredata.TrustCenterDocumentAccessStatus"
) {
REQUESTED
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.TrustCenterDocumentAccessStatusRequested"
)
GRANTED
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.TrustCenterDocumentAccessStatusGranted"
)
REJECTED
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.TrustCenterDocumentAccessStatusRejected"
)
REVOKED
@goEnum(
value: "go.probo.inc/probo/pkg/coredata.TrustCenterDocumentAccessStatusRevoked"
)
}
type DocumentAccess implements Node {
id: ID!
status: DocumentAccessStatus!
}
input SendMagicLinkInput { input SendMagicLinkInput {
email: EmailAddr! email: EmailAddr!
continue: String continue: String
@@ -569,6 +596,18 @@ type VerifyMagicLinkPayload {
continue: String continue: String
} }
type RequestDocumentAccessPayload {
document: Document
}
type RequestReportAccessPayload {
audit: Audit
}
type RequestFileAccessPayload {
file: TrustCenterFile
}
type RequestAccessesPayload { type RequestAccessesPayload {
trustCenterAccess: TrustCenterAccess! trustCenterAccess: TrustCenterAccess!
} }
@@ -772,15 +811,15 @@ type Mutation {
requestDocumentAccess( requestDocumentAccess(
input: RequestDocumentAccessInput! input: RequestDocumentAccessInput!
): RequestAccessesPayload! @session(required: PRESENT) @nda ): RequestDocumentAccessPayload! @session(required: PRESENT) @nda
requestReportAccess( requestReportAccess(
input: RequestReportAccessInput! input: RequestReportAccessInput!
): RequestAccessesPayload! @session(required: PRESENT) @nda ): RequestReportAccessPayload! @session(required: PRESENT) @nda
requestTrustCenterFileAccess( requestTrustCenterFileAccess(
input: RequestTrustCenterFileAccessInput! input: RequestTrustCenterFileAccessInput!
): RequestAccessesPayload! @session(required: PRESENT) @nda ): RequestFileAccessPayload! @session(required: PRESENT) @nda
acceptElectronicSignature( acceptElectronicSignature(
input: AcceptElectronicSignatureInput! input: AcceptElectronicSignatureInput!

File diff suppressed because it is too large Load Diff

View File

@@ -50,12 +50,20 @@ type Document struct {
Title string `json:"title"` Title string `json:"title"`
DocumentType coredata.DocumentType `json:"documentType"` DocumentType coredata.DocumentType `json:"documentType"`
IsUserAuthorized bool `json:"isUserAuthorized"` IsUserAuthorized bool `json:"isUserAuthorized"`
HasUserRequestedAccess bool `json:"hasUserRequestedAccess"` Access *DocumentAccess `json:"access,omitempty"`
} }
func (Document) IsNode() {} func (Document) IsNode() {}
func (this Document) GetID() gid.GID { return this.ID } func (this Document) GetID() gid.GID { return this.ID }
type DocumentAccess struct {
ID gid.GID `json:"id"`
Status coredata.TrustCenterDocumentAccessStatus `json:"status"`
}
func (DocumentAccess) IsNode() {}
func (this DocumentAccess) GetID() gid.GID { return this.ID }
type DocumentConnection struct { type DocumentConnection struct {
Edges []*DocumentEdge `json:"edges"` Edges []*DocumentEdge `json:"edges"`
PageInfo *PageInfo `json:"pageInfo"` PageInfo *PageInfo `json:"pageInfo"`
@@ -171,7 +179,7 @@ type Report struct {
ID gid.GID `json:"id"` ID gid.GID `json:"id"`
Filename string `json:"filename"` Filename string `json:"filename"`
IsUserAuthorized bool `json:"isUserAuthorized"` IsUserAuthorized bool `json:"isUserAuthorized"`
HasUserRequestedAccess bool `json:"hasUserRequestedAccess"` Access *DocumentAccess `json:"access,omitempty"`
} }
func (Report) IsNode() {} func (Report) IsNode() {}
@@ -185,10 +193,22 @@ type RequestDocumentAccessInput struct {
DocumentID gid.GID `json:"documentId"` DocumentID gid.GID `json:"documentId"`
} }
type RequestDocumentAccessPayload struct {
Document *Document `json:"document,omitempty"`
}
type RequestFileAccessPayload struct {
File *TrustCenterFile `json:"file,omitempty"`
}
type RequestReportAccessInput struct { type RequestReportAccessInput struct {
ReportID gid.GID `json:"reportId"` ReportID gid.GID `json:"reportId"`
} }
type RequestReportAccessPayload struct {
Audit *Audit `json:"audit,omitempty"`
}
type RequestTrustCenterFileAccessInput struct { type RequestTrustCenterFileAccessInput struct {
TrustCenterFileID gid.GID `json:"trustCenterFileId"` TrustCenterFileID gid.GID `json:"trustCenterFileId"`
} }
@@ -236,7 +256,7 @@ type TrustCenterFile struct {
Name string `json:"name"` Name string `json:"name"`
Category string `json:"category"` Category string `json:"category"`
IsUserAuthorized bool `json:"isUserAuthorized"` IsUserAuthorized bool `json:"isUserAuthorized"`
HasUserRequestedAccess bool `json:"hasUserRequestedAccess"` Access *DocumentAccess `json:"access,omitempty"`
} }
func (TrustCenterFile) IsNode() {} func (TrustCenterFile) IsNode() {}

View File

@@ -115,30 +115,35 @@ func (r *documentResolver) IsUserAuthorized(ctx context.Context, obj *types.Docu
return documentAccess.Status == coredata.TrustCenterDocumentAccessStatusGranted, nil return documentAccess.Status == coredata.TrustCenterDocumentAccessStatusGranted, nil
} }
// HasUserRequestedAccess is the resolver for the hasUserRequestedAccess field. // Access is the resolver for the access field.
func (r *documentResolver) HasUserRequestedAccess(ctx context.Context, obj *types.Document) (bool, error) { func (r *documentResolver) Access(ctx context.Context, obj *types.Document) (*types.DocumentAccess, error) {
trustService := r.TrustService(ctx, obj.ID.TenantID()) trustService := r.TrustService(ctx, obj.ID.TenantID())
trustCenter := compliancepage.CompliancePageFromContext(ctx) trustCenter := compliancepage.CompliancePageFromContext(ctx)
identity := authn.IdentityFromContext(ctx) identity := authn.IdentityFromContext(ctx)
if identity == nil { if identity == nil {
return false, nil // User is not authenticated, so no access requested return nil, nil // User is not authenticated, so no access requested
} }
// Try to load document access - if it exists (regardless of active status), user has requested it access, err := trustService.TrustCenterAccesses.GetDocumentAccess(
_, err := trustService.TrustCenterAccesses.GetDocumentAccess(
ctx, ctx,
trustCenter.ID, trustCenter.ID,
identity.EmailAddress, identity.EmailAddress,
obj.ID, obj.ID,
) )
if err != nil { if err != nil {
// FIXME check for not found and return without error in this case if errors.Is(err, trust.ErrDocumentAccessNotFound) {
// r.logger.ErrorCtx(ctx, "cannot check trust center file access", log.Error(err)) return nil, nil
// return false, gqlutils.Internal(ctx)
return false, nil
} }
return true, nil // Access exists (requested)
r.logger.ErrorCtx(ctx, "cannot get document access", log.Error(err))
return nil, gqlutils.Internal(ctx)
}
return &types.DocumentAccess{
ID: access.ID,
Status: access.Status,
}, nil
} }
// LightLogoURL is the resolver for the lightLogoURL field. // LightLogoURL is the resolver for the lightLogoURL field.
@@ -410,7 +415,7 @@ func (r *mutationResolver) ExportTrustCenterFile(ctx context.Context, input type
} }
// RequestDocumentAccess is the resolver for the requestDocumentAccess field. // RequestDocumentAccess is the resolver for the requestDocumentAccess field.
func (r *mutationResolver) RequestDocumentAccess(ctx context.Context, input types.RequestDocumentAccessInput) (*types.RequestAccessesPayload, error) { func (r *mutationResolver) RequestDocumentAccess(ctx context.Context, input types.RequestDocumentAccessInput) (*types.RequestDocumentAccessPayload, error) {
trustCenter := compliancepage.CompliancePageFromContext(ctx) trustCenter := compliancepage.CompliancePageFromContext(ctx)
trustService := r.TrustService(ctx, trustCenter.ID.TenantID()) trustService := r.TrustService(ctx, trustCenter.ID.TenantID())
@@ -431,7 +436,7 @@ func (r *mutationResolver) RequestDocumentAccess(ctx context.Context, input type
return nil, gqlutils.Unauthenticatedf(ctx, "authentication is required to request access") return nil, gqlutils.Unauthenticatedf(ctx, "authentication is required to request access")
} }
access, err := trustService.TrustCenterAccesses.Request( if _, err := trustService.TrustCenterAccesses.Request(
ctx, ctx,
&trust.TrustCenterAccessRequest{ &trust.TrustCenterAccessRequest{
TrustCenterID: trustCenter.ID, TrustCenterID: trustCenter.ID,
@@ -441,25 +446,18 @@ func (r *mutationResolver) RequestDocumentAccess(ctx context.Context, input type
ReportIDs: []gid.GID{}, ReportIDs: []gid.GID{},
TrustCenterFileIDs: []gid.GID{}, TrustCenterFileIDs: []gid.GID{},
}, },
) ); err != nil {
if err != nil {
r.logger.ErrorCtx(ctx, "cannot request document access", log.Error(err)) r.logger.ErrorCtx(ctx, "cannot request document access", log.Error(err))
return nil, gqlutils.Internal(ctx) return nil, gqlutils.Internal(ctx)
} }
return &types.RequestAccessesPayload{ return &types.RequestDocumentAccessPayload{
TrustCenterAccess: &types.TrustCenterAccess{ Document: types.NewDocument(document),
ID: access.ID,
Email: access.Email,
Name: access.Name,
CreatedAt: access.CreatedAt,
UpdatedAt: access.UpdatedAt,
},
}, nil }, nil
} }
// RequestReportAccess is the resolver for the requestReportAccess field. // RequestReportAccess is the resolver for the requestReportAccess field.
func (r *mutationResolver) RequestReportAccess(ctx context.Context, input types.RequestReportAccessInput) (*types.RequestAccessesPayload, error) { func (r *mutationResolver) RequestReportAccess(ctx context.Context, input types.RequestReportAccessInput) (*types.RequestReportAccessPayload, error) {
trustCenter := compliancepage.CompliancePageFromContext(ctx) trustCenter := compliancepage.CompliancePageFromContext(ctx)
trustService := r.TrustService(ctx, trustCenter.ID.TenantID()) trustService := r.TrustService(ctx, trustCenter.ID.TenantID())
@@ -481,7 +479,7 @@ func (r *mutationResolver) RequestReportAccess(ctx context.Context, input types.
return nil, gqlutils.Unauthenticatedf(ctx, "authentication is required to request access") return nil, gqlutils.Unauthenticatedf(ctx, "authentication is required to request access")
} }
access, err := trustService.TrustCenterAccesses.Request( if _, err := trustService.TrustCenterAccesses.Request(
ctx, ctx,
&trust.TrustCenterAccessRequest{ &trust.TrustCenterAccessRequest{
TrustCenterID: trustCenter.ID, TrustCenterID: trustCenter.ID,
@@ -491,25 +489,18 @@ func (r *mutationResolver) RequestReportAccess(ctx context.Context, input types.
ReportIDs: []gid.GID{input.ReportID}, ReportIDs: []gid.GID{input.ReportID},
TrustCenterFileIDs: []gid.GID{}, TrustCenterFileIDs: []gid.GID{},
}, },
) ); err != nil {
if err != nil {
r.logger.ErrorCtx(ctx, "cannot request report access", log.Error(err)) r.logger.ErrorCtx(ctx, "cannot request report access", log.Error(err))
return nil, gqlutils.Internal(ctx) return nil, gqlutils.Internal(ctx)
} }
return &types.RequestAccessesPayload{ return &types.RequestReportAccessPayload{
TrustCenterAccess: &types.TrustCenterAccess{ Audit: types.NewAudit(audit),
ID: access.ID,
Email: access.Email,
Name: access.Name,
CreatedAt: access.CreatedAt,
UpdatedAt: access.UpdatedAt,
},
}, nil }, nil
} }
// RequestTrustCenterFileAccess is the resolver for the requestTrustCenterFileAccess field. // RequestTrustCenterFileAccess is the resolver for the requestTrustCenterFileAccess field.
func (r *mutationResolver) RequestTrustCenterFileAccess(ctx context.Context, input types.RequestTrustCenterFileAccessInput) (*types.RequestAccessesPayload, error) { func (r *mutationResolver) RequestTrustCenterFileAccess(ctx context.Context, input types.RequestTrustCenterFileAccessInput) (*types.RequestFileAccessPayload, error) {
trustCenter := compliancepage.CompliancePageFromContext(ctx) trustCenter := compliancepage.CompliancePageFromContext(ctx)
trustService := r.TrustService(ctx, trustCenter.ID.TenantID()) trustService := r.TrustService(ctx, trustCenter.ID.TenantID())
@@ -531,7 +522,7 @@ func (r *mutationResolver) RequestTrustCenterFileAccess(ctx context.Context, inp
return nil, gqlutils.Unauthenticatedf(ctx, "authentication is required to request access") return nil, gqlutils.Unauthenticatedf(ctx, "authentication is required to request access")
} }
access, err := trustService.TrustCenterAccesses.Request( if _, err := trustService.TrustCenterAccesses.Request(
ctx, ctx,
&trust.TrustCenterAccessRequest{ &trust.TrustCenterAccessRequest{
TrustCenterID: trustCenter.ID, TrustCenterID: trustCenter.ID,
@@ -541,20 +532,13 @@ func (r *mutationResolver) RequestTrustCenterFileAccess(ctx context.Context, inp
ReportIDs: []gid.GID{}, ReportIDs: []gid.GID{},
TrustCenterFileIDs: []gid.GID{input.TrustCenterFileID}, TrustCenterFileIDs: []gid.GID{input.TrustCenterFileID},
}, },
) ); err != nil {
if err != nil {
r.logger.ErrorCtx(ctx, "cannot request trust center file access", log.Error(err)) r.logger.ErrorCtx(ctx, "cannot request trust center file access", log.Error(err))
return nil, gqlutils.Internal(ctx) return nil, gqlutils.Internal(ctx)
} }
return &types.RequestAccessesPayload{ return &types.RequestFileAccessPayload{
TrustCenterAccess: &types.TrustCenterAccess{ File: types.NewTrustCenterFile(trustCenterFile),
ID: access.ID,
Email: access.Email,
Name: access.Name,
CreatedAt: access.CreatedAt,
UpdatedAt: access.UpdatedAt,
},
}, nil }, nil
} }
@@ -850,30 +834,35 @@ func (r *reportResolver) IsUserAuthorized(ctx context.Context, obj *types.Report
return reportAccess.Status == coredata.TrustCenterDocumentAccessStatusGranted, nil return reportAccess.Status == coredata.TrustCenterDocumentAccessStatusGranted, nil
} }
// HasUserRequestedAccess is the resolver for the hasUserRequestedAccess field. // Access is the resolver for the access field.
func (r *reportResolver) HasUserRequestedAccess(ctx context.Context, obj *types.Report) (bool, error) { func (r *reportResolver) Access(ctx context.Context, obj *types.Report) (*types.DocumentAccess, error) {
trustService := r.TrustService(ctx, obj.ID.TenantID()) trustService := r.TrustService(ctx, obj.ID.TenantID())
trustCenter := compliancepage.CompliancePageFromContext(ctx) trustCenter := compliancepage.CompliancePageFromContext(ctx)
identity := authn.IdentityFromContext(ctx) identity := authn.IdentityFromContext(ctx)
if identity == nil { if identity == nil {
return false, nil // User is not authenticated, so no access requested return nil, nil // User is not authenticated, so no access requested
} }
_, err := trustService.TrustCenterAccesses.GetReportAccess(ctx, access, err := trustService.TrustCenterAccesses.GetReportAccess(
ctx,
trustCenter.ID, trustCenter.ID,
identity.EmailAddress, identity.EmailAddress,
obj.ID, obj.ID,
) )
if err != nil { if err != nil {
// FIXME check for not found and return without error in this case if errors.Is(err, trust.ErrDocumentAccessNotFound) {
// r.logger.ErrorCtx(ctx, "cannot check report access", log.Error(err)) return nil, nil
// return false, gqlutils.Internal(ctx)
return false, nil
} }
return true, nil r.logger.ErrorCtx(ctx, "cannot get document access", log.Error(err))
return nil, gqlutils.Internal(ctx)
}
return &types.DocumentAccess{
ID: access.ID,
Status: access.Status,
}, nil
} }
// LogoFileURL is the resolver for the logoFileUrl field. // LogoFileURL is the resolver for the logoFileUrl field.
@@ -1061,30 +1050,35 @@ func (r *trustCenterFileResolver) IsUserAuthorized(ctx context.Context, obj *typ
return fileAccess.Status == coredata.TrustCenterDocumentAccessStatusGranted, nil return fileAccess.Status == coredata.TrustCenterDocumentAccessStatusGranted, nil
} }
// HasUserRequestedAccess is the resolver for the hasUserRequestedAccess field. // Access is the resolver for the access field.
func (r *trustCenterFileResolver) HasUserRequestedAccess(ctx context.Context, obj *types.TrustCenterFile) (bool, error) { func (r *trustCenterFileResolver) Access(ctx context.Context, obj *types.TrustCenterFile) (*types.DocumentAccess, error) {
trustService := r.TrustService(ctx, obj.ID.TenantID()) trustService := r.TrustService(ctx, obj.ID.TenantID())
trustCenter := compliancepage.CompliancePageFromContext(ctx) trustCenter := compliancepage.CompliancePageFromContext(ctx)
identity := authn.IdentityFromContext(ctx) identity := authn.IdentityFromContext(ctx)
if identity == nil { if identity == nil {
return false, nil // User is not authenticated, so no access requested return nil, nil // User is not authenticated, so no access requested
} }
_, err := trustService.TrustCenterAccesses.GetTrustCenterFileAccess(ctx, access, err := trustService.TrustCenterAccesses.GetTrustCenterFileAccess(
ctx,
trustCenter.ID, trustCenter.ID,
identity.EmailAddress, identity.EmailAddress,
obj.ID, obj.ID,
) )
if err != nil { if err != nil {
// FIXME check for not found and return without error in this case if errors.Is(err, trust.ErrDocumentAccessNotFound) {
// r.logger.ErrorCtx(ctx, "cannot check trust center file access", log.Error(err)) return nil, nil
// return false, gqlutils.Internal(ctx)
return false, nil
} }
return true, nil r.logger.ErrorCtx(ctx, "cannot get document access", log.Error(err))
return nil, gqlutils.Internal(ctx)
}
return &types.DocumentAccess{
ID: access.ID,
Status: access.Status,
}, nil
} }
// LogoURL is the resolver for the logoUrl field. // LogoURL is the resolver for the logoUrl field.