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

@@ -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,
]);
}