Add request param presence callback to request accesses

Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
Émile Ré
2026-02-20 16:54:11 +04:00
parent c79c62fc78
commit bb8d477495
15 changed files with 738 additions and 128 deletions

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<72029a8e627a0b60cb1e2c226af0d535>>
* @generated SignedSource<<754e567fe99c9c96b8d4e324ce5373b8>>
* @lightSyntaxTransform
* @nogrep
*/

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<310671de1c8bca322875bfca9102fcbf>>
* @generated SignedSource<<876124efbbec99a5059c28550cb638c0>>
* @lightSyntaxTransform
* @nogrep
*/

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<c58f6047e14212818972c5cf56162c1c>>
* @generated SignedSource<<ad43a2ccfc4f0bd38bf04b06ae2f8183>>
* @lightSyntaxTransform
* @nogrep
*/

View File

@@ -11,10 +11,11 @@ import {
} from "@probo/ui";
import { useState } from "react";
import { useFragment, useMutation } from "react-relay";
import { useLocation, useNavigate } from "react-router";
import { useLocation, useNavigate, useSearchParams } from "react-router";
import { graphql } from "relay-runtime";
import { useMutationWithToasts } from "#/hooks/useMutationWithToast";
import { getPathPrefix } from "#/utils/pathPrefix";
import type { DocumentRow_requestAccessMutation } from "./__generated__/DocumentRow_requestAccessMutation.graphql";
import type { DocumentRowDownloadMutation } from "./__generated__/DocumentRowDownloadMutation.graphql";
@@ -54,6 +55,7 @@ export function DocumentRow(props: { document: DocumentRowFragment$key }) {
const { toast } = useToast();
const navigate = useNavigate();
const location = useLocation();
const [searchParams] = useSearchParams();
const document = useFragment(documentRowFragment, props.document);
const [hasRequested, setHasRequested] = useState(
@@ -90,10 +92,15 @@ export function DocumentRow(props: { document: DocumentRowFragment$key }) {
},
onError: (error) => {
if (error instanceof UnAuthenticatedError) {
const searchParams = new URLSearchParams([[
"continue", window.location.origin + location.pathname + location.search,
const pathPrefix = getPathPrefix();
searchParams.set("request-document-id", document.id);
const urlSearchParams = new URLSearchParams([[
"continue",
window.location.origin + pathPrefix + location.pathname + "?" + searchParams.toString(),
]]);
void navigate(`/connect?${searchParams.toString()}`);
void navigate(`/connect?${urlSearchParams.toString()}`);
return;
}
toast({

View File

@@ -0,0 +1,87 @@
/**
* @generated SignedSource<<71c76287347e6e819c625f5072b4fae4>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type useRequestAccessCallback_allMutation$variables = Record<PropertyKey, never>;
export type useRequestAccessCallback_allMutation$data = {
readonly requestAllAccesses: {
readonly trustCenterAccess: {
readonly id: string;
};
};
};
export type useRequestAccessCallback_allMutation = {
response: useRequestAccessCallback_allMutation$data;
variables: useRequestAccessCallback_allMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"alias": null,
"args": null,
"concreteType": "RequestAccessesPayload",
"kind": "LinkedField",
"name": "requestAllAccesses",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "TrustCenterAccess",
"kind": "LinkedField",
"name": "trustCenterAccess",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
}
];
return {
"fragment": {
"argumentDefinitions": [],
"kind": "Fragment",
"metadata": null,
"name": "useRequestAccessCallback_allMutation",
"selections": (v0/*: any*/),
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": [],
"kind": "Operation",
"name": "useRequestAccessCallback_allMutation",
"selections": (v0/*: any*/)
},
"params": {
"cacheID": "dd26f85da037142a278f934f06c8c0a0",
"id": null,
"metadata": {},
"name": "useRequestAccessCallback_allMutation",
"operationKind": "mutation",
"text": "mutation useRequestAccessCallback_allMutation {\n requestAllAccesses {\n trustCenterAccess {\n id\n }\n }\n}\n"
}
};
})();
(node as any).hash = "7f32c58dba23b76a39950d08c25eaaa7";
export default node;

View File

@@ -0,0 +1,105 @@
/**
* @generated SignedSource<<6b6304c9a22de890f171632f8c9dabe1>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type RequestDocumentAccessInput = {
documentId: string;
};
export type useRequestAccessCallback_documentMutation$variables = {
input: RequestDocumentAccessInput;
};
export type useRequestAccessCallback_documentMutation$data = {
readonly requestDocumentAccess: {
readonly trustCenterAccess: {
readonly id: string;
};
};
};
export type useRequestAccessCallback_documentMutation = {
response: useRequestAccessCallback_documentMutation$data;
variables: useRequestAccessCallback_documentMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
}
],
v1 = [
{
"alias": null,
"args": [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
"concreteType": "RequestAccessesPayload",
"kind": "LinkedField",
"name": "requestDocumentAccess",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "TrustCenterAccess",
"kind": "LinkedField",
"name": "trustCenterAccess",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
}
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "useRequestAccessCallback_documentMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "useRequestAccessCallback_documentMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "849ea6a746660bdee8ebf805baef7a33",
"id": null,
"metadata": {},
"name": "useRequestAccessCallback_documentMutation",
"operationKind": "mutation",
"text": "mutation useRequestAccessCallback_documentMutation(\n $input: RequestDocumentAccessInput!\n) {\n requestDocumentAccess(input: $input) {\n trustCenterAccess {\n id\n }\n }\n}\n"
}
};
})();
(node as any).hash = "1ff8b5f560d8c3024e6d5c11bb2ed889";
export default node;

View File

@@ -0,0 +1,105 @@
/**
* @generated SignedSource<<6db2a4322199d638b3f1ac498ecd066b>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type RequestTrustCenterFileAccessInput = {
trustCenterFileId: string;
};
export type useRequestAccessCallback_fileMutation$variables = {
input: RequestTrustCenterFileAccessInput;
};
export type useRequestAccessCallback_fileMutation$data = {
readonly requestTrustCenterFileAccess: {
readonly trustCenterAccess: {
readonly id: string;
};
};
};
export type useRequestAccessCallback_fileMutation = {
response: useRequestAccessCallback_fileMutation$data;
variables: useRequestAccessCallback_fileMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
}
],
v1 = [
{
"alias": null,
"args": [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
"concreteType": "RequestAccessesPayload",
"kind": "LinkedField",
"name": "requestTrustCenterFileAccess",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "TrustCenterAccess",
"kind": "LinkedField",
"name": "trustCenterAccess",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
}
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "useRequestAccessCallback_fileMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "useRequestAccessCallback_fileMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "1ed0d9f8a3b3dc08c2af16101729d3a9",
"id": null,
"metadata": {},
"name": "useRequestAccessCallback_fileMutation",
"operationKind": "mutation",
"text": "mutation useRequestAccessCallback_fileMutation(\n $input: RequestTrustCenterFileAccessInput!\n) {\n requestTrustCenterFileAccess(input: $input) {\n trustCenterAccess {\n id\n }\n }\n}\n"
}
};
})();
(node as any).hash = "5105b60de987b135523ada9ee2777dea";
export default node;

View File

@@ -0,0 +1,105 @@
/**
* @generated SignedSource<<d36c3f435afa928b80d415bd53786d81>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ConcreteRequest } from 'relay-runtime';
export type RequestReportAccessInput = {
reportId: string;
};
export type useRequestAccessCallback_reportMutation$variables = {
input: RequestReportAccessInput;
};
export type useRequestAccessCallback_reportMutation$data = {
readonly requestReportAccess: {
readonly trustCenterAccess: {
readonly id: string;
};
};
};
export type useRequestAccessCallback_reportMutation = {
response: useRequestAccessCallback_reportMutation$data;
variables: useRequestAccessCallback_reportMutation$variables;
};
const node: ConcreteRequest = (function(){
var v0 = [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "input"
}
],
v1 = [
{
"alias": null,
"args": [
{
"kind": "Variable",
"name": "input",
"variableName": "input"
}
],
"concreteType": "RequestAccessesPayload",
"kind": "LinkedField",
"name": "requestReportAccess",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "TrustCenterAccess",
"kind": "LinkedField",
"name": "trustCenterAccess",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
}
];
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "useRequestAccessCallback_reportMutation",
"selections": (v1/*: any*/),
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "useRequestAccessCallback_reportMutation",
"selections": (v1/*: any*/)
},
"params": {
"cacheID": "c859384ca219b8302245e0bed292e698",
"id": null,
"metadata": {},
"name": "useRequestAccessCallback_reportMutation",
"operationKind": "mutation",
"text": "mutation useRequestAccessCallback_reportMutation(\n $input: RequestReportAccessInput!\n) {\n requestReportAccess(input: $input) {\n trustCenterAccess {\n id\n }\n }\n}\n"
}
};
})();
(node as any).hash = "6ad61c2f6638f5d31c9c25b0044f080a";
export default node;

View File

@@ -0,0 +1,198 @@
import { formatError, type GraphQLError } from "@probo/helpers";
import { useTranslate } from "@probo/i18n";
import { useToast } from "@probo/ui";
import { useEffect } from "react";
import { useMutation } from "react-relay";
import { useSearchParams } from "react-router";
import { graphql } from "relay-runtime";
import type { useRequestAccessCallback_allMutation } from "./__generated__/useRequestAccessCallback_allMutation.graphql";
import type { useRequestAccessCallback_documentMutation } from "./__generated__/useRequestAccessCallback_documentMutation.graphql";
import type { useRequestAccessCallback_fileMutation } from "./__generated__/useRequestAccessCallback_fileMutation.graphql";
import type { useRequestAccessCallback_reportMutation } from "./__generated__/useRequestAccessCallback_reportMutation.graphql";
const documentMutation = graphql`
mutation useRequestAccessCallback_documentMutation(
$input: RequestDocumentAccessInput!
) {
requestDocumentAccess(input: $input) {
trustCenterAccess {
id
}
}
}
`;
const reportMutation = graphql`
mutation useRequestAccessCallback_reportMutation(
$input: RequestReportAccessInput!
) {
requestReportAccess(input: $input) {
trustCenterAccess {
id
}
}
}
`;
const fileMutation = graphql`
mutation useRequestAccessCallback_fileMutation(
$input: RequestTrustCenterFileAccessInput!
) {
requestTrustCenterFileAccess(input: $input) {
trustCenterAccess {
id
}
}
}
`;
const allMutation = graphql`
mutation useRequestAccessCallback_allMutation {
requestAllAccesses {
trustCenterAccess {
id
}
}
}
`;
function errorToastArgs(__: (s: string) => string, error: GraphQLError | GraphQLError[]) {
return {
title: __("Error"),
description: formatError(__("Cannot request access"), error),
variant: "error" as const,
};
}
function successToastArgs(__: (s: string) => string) {
return {
title: __("Success"),
description: __("Access request submitted successfully."),
variant: "success" as const,
};
}
export function useRequestAccessCallback() {
const [searchParams, setSearchParams] = useSearchParams();
const documentId = searchParams.get("request-document-id");
const reportId = searchParams.get("request-report-id");
const fileId = searchParams.get("request-file-id");
const all = searchParams.get("request-all");
const { __ } = useTranslate();
const { toast } = useToast();
const [requestDocumentAccess] = useMutation<useRequestAccessCallback_documentMutation>(documentMutation);
const [requestReportAccess] = useMutation<useRequestAccessCallback_reportMutation>(reportMutation);
const [requestFileAccess] = useMutation<useRequestAccessCallback_fileMutation>(fileMutation);
const [requestAll] = useMutation<useRequestAccessCallback_allMutation>(allMutation);
useEffect(() => {
if (documentId) {
void requestDocumentAccess({
variables: {
input: { documentId },
},
onCompleted: (_, errors) => {
if (errors?.length) {
toast(errorToastArgs(__, errors));
searchParams.delete("request-document-id");
setSearchParams(searchParams);
return;
}
toast(successToastArgs(__));
searchParams.delete("request-document-id");
setSearchParams(searchParams);
},
onError: (error) => {
toast(errorToastArgs(__, error));
searchParams.delete("request-document-id");
setSearchParams(searchParams);
},
});
} else if (reportId) {
void requestReportAccess({
variables: {
input: { reportId },
},
onCompleted: (_, errors) => {
if (errors?.length) {
toast(errorToastArgs(__, errors));
searchParams.delete("request-report-id");
setSearchParams(searchParams);
return;
}
toast(successToastArgs(__));
searchParams.delete("request-report-id");
setSearchParams(searchParams);
},
onError: (error) => {
toast(errorToastArgs(__, error));
searchParams.delete("request-report-id");
setSearchParams(searchParams);
},
});
} else if (fileId) {
void requestFileAccess({
variables: {
input: { trustCenterFileId: fileId },
},
onCompleted: (_, errors) => {
if (errors?.length) {
toast(errorToastArgs(__, errors));
searchParams.delete("request-file-id");
setSearchParams(searchParams);
return;
}
toast(successToastArgs(__));
searchParams.delete("request-file-id");
setSearchParams(searchParams);
},
onError: (error) => {
toast(errorToastArgs(__, error));
searchParams.delete("request-file-id");
setSearchParams(searchParams);
},
});
} else if (all) {
void requestAll({
variables: {},
onCompleted: (_, errors) => {
if (errors?.length) {
toast(errorToastArgs(__, errors));
searchParams.delete("request-all");
setSearchParams(searchParams);
return;
}
toast(successToastArgs(__));
searchParams.delete("request-all");
setSearchParams(searchParams);
},
onError: (error) => {
toast(errorToastArgs(__, error));
searchParams.delete("request-all");
setSearchParams(searchParams);
},
});
}
}, [
documentId,
reportId,
fileId,
all,
__,
requestDocumentAccess,
requestReportAccess,
requestFileAccess,
requestAll,
searchParams,
setSearchParams,
toast,
]);
}

View File

@@ -5,6 +5,7 @@ import { type PreloadedQuery, usePreloadedQuery } from "react-relay";
import { Navigate, Outlet } from "react-router";
import { OrganizationSidebar } from "#/components/OrganizationSidebar";
import { useRequestAccessCallback } from "#/hooks/useRequestAccessCallback";
import { TrustCenterProvider } from "#/providers/TrustCenterProvider";
import { Viewer } from "#/providers/Viewer";
import type { TrustGraphCurrentQuery } from "#/queries/__generated__/TrustGraphCurrentQuery.graphql";
@@ -21,11 +22,12 @@ export function MainLayout(props: Props) {
const theme = useSystemTheme();
useFavicon(theme === "dark" ? (trustCenter?.darkLogoFileUrl ?? trustCenter?.logoFileUrl) : trustCenter?.logoFileUrl);
if (!trustCenter) {
return null;
}
useFavicon(
theme === "dark"
? (trustCenter?.darkLogoFileUrl ?? trustCenter?.logoFileUrl)
: trustCenter?.logoFileUrl,
);
useRequestAccessCallback();
const hasPendingNDA
= data.viewer

View File

@@ -1,5 +1,4 @@
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import "./index.css";
@@ -17,13 +16,11 @@ const queryClient = new QueryClient({
});
createRoot(document.getElementById("root")!).render(
<StrictMode>
<QueryClientProvider client={queryClient}>
<RelayProvider>
<TranslatorProvider>
<App />
</TranslatorProvider>
</RelayProvider>
</QueryClientProvider>
</StrictMode>,
<QueryClientProvider client={queryClient}>
<RelayProvider>
<TranslatorProvider>
<App />
</TranslatorProvider>
</RelayProvider>
</QueryClientProvider>,
);

View File

@@ -7,7 +7,7 @@ export const currentTrustGraphQuery = graphql`
email
fullName
}
currentTrustCenter {
currentTrustCenter @required(action: THROW) {
id
slug
isViewerMember

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<663225cc4e0d94b50dc97084c3d51aae>>
* @generated SignedSource<<700a3b76b18e7182c5a08c98b5d7fa2a>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -45,7 +45,7 @@ export type TrustGraphCurrentQuery$data = {
readonly totalCount: number;
};
readonly " $fragmentSpreads": FragmentRefs<"OverviewPageFragment">;
} | null | undefined;
};
readonly viewer: {
readonly email: any;
readonly fullName: string;
@@ -228,106 +228,110 @@ return {
"storageKey": null
},
{
"alias": null,
"args": null,
"concreteType": "TrustCenter",
"kind": "LinkedField",
"name": "currentTrustCenter",
"plural": false,
"selections": [
(v2/*: any*/),
(v3/*: any*/),
(v4/*: any*/),
(v5/*: any*/),
(v6/*: any*/),
{
"alias": null,
"args": null,
"concreteType": "NonDisclosureAgreement",
"kind": "LinkedField",
"name": "nonDisclosureAgreement",
"plural": false,
"selections": [
(v7/*: any*/),
(v8/*: any*/),
{
"alias": null,
"args": null,
"concreteType": "ElectronicSignature",
"kind": "LinkedField",
"name": "viewerSignature",
"plural": false,
"selections": [
(v9/*: any*/)
],
"storageKey": null
}
],
"storageKey": null
},
{
"alias": null,
"args": null,
"concreteType": "Organization",
"kind": "LinkedField",
"name": "organization",
"plural": false,
"selections": [
(v10/*: any*/),
(v11/*: any*/),
(v12/*: any*/),
(v0/*: any*/),
(v13/*: any*/)
],
"storageKey": null
},
{
"args": null,
"kind": "FragmentSpread",
"name": "OverviewPageFragment"
},
(v14/*: any*/),
{
"alias": null,
"args": (v15/*: any*/),
"concreteType": "AuditConnection",
"kind": "LinkedField",
"name": "audits",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "AuditEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Audit",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"args": null,
"kind": "FragmentSpread",
"name": "AuditRowFragment"
}
],
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": "audits(first:50)"
}
],
"storageKey": null
"kind": "RequiredField",
"field": {
"alias": null,
"args": null,
"concreteType": "TrustCenter",
"kind": "LinkedField",
"name": "currentTrustCenter",
"plural": false,
"selections": [
(v2/*: any*/),
(v3/*: any*/),
(v4/*: any*/),
(v5/*: any*/),
(v6/*: any*/),
{
"alias": null,
"args": null,
"concreteType": "NonDisclosureAgreement",
"kind": "LinkedField",
"name": "nonDisclosureAgreement",
"plural": false,
"selections": [
(v7/*: any*/),
(v8/*: any*/),
{
"alias": null,
"args": null,
"concreteType": "ElectronicSignature",
"kind": "LinkedField",
"name": "viewerSignature",
"plural": false,
"selections": [
(v9/*: any*/)
],
"storageKey": null
}
],
"storageKey": null
},
{
"alias": null,
"args": null,
"concreteType": "Organization",
"kind": "LinkedField",
"name": "organization",
"plural": false,
"selections": [
(v10/*: any*/),
(v11/*: any*/),
(v12/*: any*/),
(v0/*: any*/),
(v13/*: any*/)
],
"storageKey": null
},
{
"args": null,
"kind": "FragmentSpread",
"name": "OverviewPageFragment"
},
(v14/*: any*/),
{
"alias": null,
"args": (v15/*: any*/),
"concreteType": "AuditConnection",
"kind": "LinkedField",
"name": "audits",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "AuditEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Audit",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"args": null,
"kind": "FragmentSpread",
"name": "AuditRowFragment"
}
],
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": "audits(first:50)"
}
],
"storageKey": null
},
"action": "THROW"
}
],
"type": "Query",
@@ -702,6 +706,6 @@ return {
};
})();
(node as any).hash = "6cbe676214b698d12e2cae08060a7285";
(node as any).hash = "64b166174da80cd3082ab4becf716b1c";
export default node;

View File

@@ -769,7 +769,7 @@ type Mutation {
input: ExportTrustCenterFileInput!
): ExportTrustCenterFilePayload! @session(required: OPTIONAL)
requestDocumentAccess(
requestDocumentAccess(
input: RequestDocumentAccessInput!
): RequestAccessesPayload! @session(required: PRESENT)

View File

@@ -2076,7 +2076,7 @@ type Mutation {
input: ExportTrustCenterFileInput!
): ExportTrustCenterFilePayload! @session(required: OPTIONAL)
requestDocumentAccess(
requestDocumentAccess(
input: RequestDocumentAccessInput!
): RequestAccessesPayload! @session(required: PRESENT)