From aa6ca266d0dc64717bac4c0119a61d88b2beefa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89mile=20R=C3=A9?= Date: Fri, 2 Jan 2026 12:11:55 +0100 Subject: [PATCH] Fix trust center access tab permissions handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Émile Ré --- ...CenterAccessGraphCreateMutation.graphql.ts | 36 ++++- ...enterAccessGraphPaginationQuery.graphql.ts | 34 ++++- .../TrustCenterAccessGraphQuery.graphql.ts | 32 ++++- ...TrustCenterAccessGraph_accesses.graphql.ts | 32 ++++- .../core/TrustCenterGraphQuery.graphql.ts | 22 +++- .../src/hooks/graph/TrustCenterAccessGraph.ts | 4 + .../src/hooks/graph/TrustCenterGraph.ts | 1 + .../TrustCenterAccessEditDialog.tsx | 11 +- .../TrustCenterAccessItem.tsx | 82 +++++++----- .../TrustCenterAccessTab.tsx | 123 ++++++++---------- packages/coredata/src/TrustCenterAccess.ts | 14 -- packages/coredata/src/index.ts | 6 +- 12 files changed, 255 insertions(+), 142 deletions(-) delete mode 100644 packages/coredata/src/TrustCenterAccess.ts diff --git a/apps/console/src/__generated__/core/TrustCenterAccessGraphCreateMutation.graphql.ts b/apps/console/src/__generated__/core/TrustCenterAccessGraphCreateMutation.graphql.ts index a92f94d6e..9f44e90a9 100644 --- a/apps/console/src/__generated__/core/TrustCenterAccessGraphCreateMutation.graphql.ts +++ b/apps/console/src/__generated__/core/TrustCenterAccessGraphCreateMutation.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<<5b13ffbac04cd7b7bdfa68d47f6ad6ee>> + * @generated SignedSource<<7a9c0c1a8292affc2ed9584fca098c64>> * @lightSyntaxTransform * @nogrep */ @@ -26,6 +26,8 @@ export type TrustCenterAccessGraphCreateMutation$data = { readonly node: { readonly active: boolean; readonly activeCount: number; + readonly canDelete: boolean; + readonly canUpdate: boolean; readonly createdAt: string; readonly email: string; readonly hasAcceptedNonDisclosureAgreement: boolean; @@ -145,6 +147,32 @@ v3 = { "kind": "ScalarField", "name": "activeCount", "storageKey": null + }, + { + "alias": "canUpdate", + "args": [ + { + "kind": "Literal", + "name": "action", + "value": "core:trust-center-access:update" + } + ], + "kind": "ScalarField", + "name": "permission", + "storageKey": "permission(action:\"core:trust-center-access:update\")" + }, + { + "alias": "canDelete", + "args": [ + { + "kind": "Literal", + "name": "action", + "value": "core:trust-center-access:delete" + } + ], + "kind": "ScalarField", + "name": "permission", + "storageKey": "permission(action:\"core:trust-center-access:delete\")" } ], "storageKey": null @@ -218,16 +246,16 @@ return { ] }, "params": { - "cacheID": "501c3c38f8d44e41a178514443803ce2", + "cacheID": "b080e2a38e706bea45f06507675582a4", "id": null, "metadata": {}, "name": "TrustCenterAccessGraphCreateMutation", "operationKind": "mutation", - "text": "mutation TrustCenterAccessGraphCreateMutation(\n $input: CreateTrustCenterAccessInput!\n) {\n createTrustCenterAccess(input: $input) {\n trustCenterAccessEdge {\n cursor\n node {\n id\n email\n name\n active\n hasAcceptedNonDisclosureAgreement\n createdAt\n lastTokenExpiresAt\n pendingRequestCount\n activeCount\n }\n }\n }\n}\n" + "text": "mutation TrustCenterAccessGraphCreateMutation(\n $input: CreateTrustCenterAccessInput!\n) {\n createTrustCenterAccess(input: $input) {\n trustCenterAccessEdge {\n cursor\n node {\n id\n email\n name\n active\n hasAcceptedNonDisclosureAgreement\n createdAt\n lastTokenExpiresAt\n pendingRequestCount\n activeCount\n canUpdate: permission(action: \"core:trust-center-access:update\")\n canDelete: permission(action: \"core:trust-center-access:delete\")\n }\n }\n }\n}\n" } }; })(); -(node as any).hash = "bfe1841f269ba04a77e9b3ecf73665d2"; +(node as any).hash = "c33af388ca0957f16ee36e06339d61d3"; export default node; diff --git a/apps/console/src/__generated__/core/TrustCenterAccessGraphPaginationQuery.graphql.ts b/apps/console/src/__generated__/core/TrustCenterAccessGraphPaginationQuery.graphql.ts index 0172250a5..38aa639f9 100644 --- a/apps/console/src/__generated__/core/TrustCenterAccessGraphPaginationQuery.graphql.ts +++ b/apps/console/src/__generated__/core/TrustCenterAccessGraphPaginationQuery.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<> + * @generated SignedSource<<103e4c33c37a708bdc24fe74767725b9>> * @lightSyntaxTransform * @nogrep */ @@ -257,6 +257,32 @@ return { "name": "activeCount", "storageKey": null }, + { + "alias": "canUpdate", + "args": [ + { + "kind": "Literal", + "name": "action", + "value": "core:trust-center-access:update" + } + ], + "kind": "ScalarField", + "name": "permission", + "storageKey": "permission(action:\"core:trust-center-access:update\")" + }, + { + "alias": "canDelete", + "args": [ + { + "kind": "Literal", + "name": "action", + "value": "core:trust-center-access:delete" + } + ], + "kind": "ScalarField", + "name": "permission", + "storageKey": "permission(action:\"core:trust-center-access:delete\")" + }, (v2/*: any*/) ], "storageKey": null @@ -300,16 +326,16 @@ return { ] }, "params": { - "cacheID": "98a87a363a8a26e30506346db052e11a", + "cacheID": "6b9515ca548d21d6ba53ac5d830010f5", "id": null, "metadata": {}, "name": "TrustCenterAccessGraphPaginationQuery", "operationKind": "query", - "text": "query TrustCenterAccessGraphPaginationQuery(\n $count: Int\n $cursor: CursorKey\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ...TrustCenterAccessGraph_accesses\n id\n }\n}\n\nfragment TrustCenterAccessGraph_accesses on TrustCenter {\n accesses(first: $count, after: $cursor, orderBy: {field: CREATED_AT, direction: DESC}) {\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n edges {\n cursor\n node {\n id\n email\n name\n active\n hasAcceptedNonDisclosureAgreement\n createdAt\n lastTokenExpiresAt\n pendingRequestCount\n activeCount\n __typename\n }\n }\n }\n id\n}\n" + "text": "query TrustCenterAccessGraphPaginationQuery(\n $count: Int\n $cursor: CursorKey\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ...TrustCenterAccessGraph_accesses\n id\n }\n}\n\nfragment TrustCenterAccessGraph_accesses on TrustCenter {\n accesses(first: $count, after: $cursor, orderBy: {field: CREATED_AT, direction: DESC}) {\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n edges {\n cursor\n node {\n id\n email\n name\n active\n hasAcceptedNonDisclosureAgreement\n createdAt\n lastTokenExpiresAt\n pendingRequestCount\n activeCount\n canUpdate: permission(action: \"core:trust-center-access:update\")\n canDelete: permission(action: \"core:trust-center-access:delete\")\n __typename\n }\n }\n }\n id\n}\n" } }; })(); -(node as any).hash = "10bb084980182a1e2334be77c29cf1ec"; +(node as any).hash = "41517deef6af7eec916f3a4bbfc217b7"; export default node; diff --git a/apps/console/src/__generated__/core/TrustCenterAccessGraphQuery.graphql.ts b/apps/console/src/__generated__/core/TrustCenterAccessGraphQuery.graphql.ts index 5777140f3..e299c0f94 100644 --- a/apps/console/src/__generated__/core/TrustCenterAccessGraphQuery.graphql.ts +++ b/apps/console/src/__generated__/core/TrustCenterAccessGraphQuery.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<<4b12d9aad859607c861537fbdf5ea292>> + * @generated SignedSource<<4f1a16e8b28a887285c9bc578e201f75>> * @lightSyntaxTransform * @nogrep */ @@ -272,6 +272,32 @@ return { "name": "activeCount", "storageKey": null }, + { + "alias": "canUpdate", + "args": [ + { + "kind": "Literal", + "name": "action", + "value": "core:trust-center-access:update" + } + ], + "kind": "ScalarField", + "name": "permission", + "storageKey": "permission(action:\"core:trust-center-access:update\")" + }, + { + "alias": "canDelete", + "args": [ + { + "kind": "Literal", + "name": "action", + "value": "core:trust-center-access:delete" + } + ], + "kind": "ScalarField", + "name": "permission", + "storageKey": "permission(action:\"core:trust-center-access:delete\")" + }, (v5/*: any*/) ], "storageKey": null @@ -315,12 +341,12 @@ return { ] }, "params": { - "cacheID": "703f94692a1696b15e0c92b282866673", + "cacheID": "a8ee8e139d510095436df64e84d7a5ba", "id": null, "metadata": {}, "name": "TrustCenterAccessGraphQuery", "operationKind": "query", - "text": "query TrustCenterAccessGraphQuery(\n $trustCenterId: ID!\n $count: Int!\n $cursor: CursorKey\n) {\n node(id: $trustCenterId) {\n __typename\n ... on TrustCenter {\n id\n ...TrustCenterAccessGraph_accesses\n }\n id\n }\n}\n\nfragment TrustCenterAccessGraph_accesses on TrustCenter {\n accesses(first: $count, after: $cursor, orderBy: {field: CREATED_AT, direction: DESC}) {\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n edges {\n cursor\n node {\n id\n email\n name\n active\n hasAcceptedNonDisclosureAgreement\n createdAt\n lastTokenExpiresAt\n pendingRequestCount\n activeCount\n __typename\n }\n }\n }\n id\n}\n" + "text": "query TrustCenterAccessGraphQuery(\n $trustCenterId: ID!\n $count: Int!\n $cursor: CursorKey\n) {\n node(id: $trustCenterId) {\n __typename\n ... on TrustCenter {\n id\n ...TrustCenterAccessGraph_accesses\n }\n id\n }\n}\n\nfragment TrustCenterAccessGraph_accesses on TrustCenter {\n accesses(first: $count, after: $cursor, orderBy: {field: CREATED_AT, direction: DESC}) {\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n edges {\n cursor\n node {\n id\n email\n name\n active\n hasAcceptedNonDisclosureAgreement\n createdAt\n lastTokenExpiresAt\n pendingRequestCount\n activeCount\n canUpdate: permission(action: \"core:trust-center-access:update\")\n canDelete: permission(action: \"core:trust-center-access:delete\")\n __typename\n }\n }\n }\n id\n}\n" } }; })(); diff --git a/apps/console/src/__generated__/core/TrustCenterAccessGraph_accesses.graphql.ts b/apps/console/src/__generated__/core/TrustCenterAccessGraph_accesses.graphql.ts index c520981fb..18e4e053c 100644 --- a/apps/console/src/__generated__/core/TrustCenterAccessGraph_accesses.graphql.ts +++ b/apps/console/src/__generated__/core/TrustCenterAccessGraph_accesses.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<> + * @generated SignedSource<<6cbc57ab24be22cdb76257d73f3a47d5>> * @lightSyntaxTransform * @nogrep */ @@ -18,6 +18,8 @@ export type TrustCenterAccessGraph_accesses$data = { readonly node: { readonly active: boolean; readonly activeCount: number; + readonly canDelete: boolean; + readonly canUpdate: boolean; readonly createdAt: string; readonly email: string; readonly hasAcceptedNonDisclosureAgreement: boolean; @@ -233,6 +235,32 @@ return { "name": "activeCount", "storageKey": null }, + { + "alias": "canUpdate", + "args": [ + { + "kind": "Literal", + "name": "action", + "value": "core:trust-center-access:update" + } + ], + "kind": "ScalarField", + "name": "permission", + "storageKey": "permission(action:\"core:trust-center-access:update\")" + }, + { + "alias": "canDelete", + "args": [ + { + "kind": "Literal", + "name": "action", + "value": "core:trust-center-access:delete" + } + ], + "kind": "ScalarField", + "name": "permission", + "storageKey": "permission(action:\"core:trust-center-access:delete\")" + }, { "alias": null, "args": null, @@ -268,6 +296,6 @@ return { }; })(); -(node as any).hash = "10bb084980182a1e2334be77c29cf1ec"; +(node as any).hash = "41517deef6af7eec916f3a4bbfc217b7"; export default node; diff --git a/apps/console/src/__generated__/core/TrustCenterGraphQuery.graphql.ts b/apps/console/src/__generated__/core/TrustCenterGraphQuery.graphql.ts index 9c845dfb5..b126ee7ad 100644 --- a/apps/console/src/__generated__/core/TrustCenterGraphQuery.graphql.ts +++ b/apps/console/src/__generated__/core/TrustCenterGraphQuery.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<> + * @generated SignedSource<> * @lightSyntaxTransform * @nogrep */ @@ -51,6 +51,7 @@ export type TrustCenterGraphQuery$data = { }; readonly trustCenter?: { readonly active: boolean; + readonly canCreateAccess: boolean; readonly canCreateReference: boolean; readonly canDeleteNDA: boolean; readonly canGetNDA: boolean; @@ -257,6 +258,19 @@ v8 = { "kind": "ScalarField", "name": "permission", "storageKey": "permission(action:\"core:trust-center-reference:create\")" + }, + { + "alias": "canCreateAccess", + "args": [ + { + "kind": "Literal", + "name": "action", + "value": "core:trust-center-access:create" + } + ], + "kind": "ScalarField", + "name": "permission", + "storageKey": "permission(action:\"core:trust-center-access:create\")" } ], "storageKey": null @@ -929,7 +943,7 @@ return { ] }, "params": { - "cacheID": "0e95539cb6609d5698a7311262b81a99", + "cacheID": "e04f245ca84bd7221a3e0187b8e988a5", "id": null, "metadata": { "connection": [ @@ -946,11 +960,11 @@ return { }, "name": "TrustCenterGraphQuery", "operationKind": "query", - "text": "query TrustCenterGraphQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n ... on Organization {\n id\n name\n canCreateTrustCenterFile: permission(action: \"core:trust-center-file:create\")\n customDomain {\n id\n domain\n }\n trustCenter {\n id\n active\n ndaFileName\n ndaFileUrl\n createdAt\n updatedAt\n canUpdate: permission(action: \"core:trust-center:update\")\n canGetNDA: permission(action: \"core:trust-center:get-nda\")\n canUploadNDA: permission(action: \"core:trust-center:upload-nda\")\n canDeleteNDA: permission(action: \"core:trust-center:delete-nda\")\n canCreateReference: permission(action: \"core:trust-center-reference:create\")\n }\n documents(first: 100) {\n edges {\n node {\n id\n ...TrustCenterDocumentsCardFragment\n }\n }\n }\n audits(first: 100) {\n edges {\n node {\n id\n ...TrustCenterAuditsCardFragment\n }\n }\n }\n vendors(first: 100) {\n edges {\n node {\n id\n ...TrustCenterVendorsCardFragment\n }\n }\n }\n trustCenterFiles(first: 100) {\n edges {\n node {\n id\n ...TrustCenterFilesCardFragment\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n slackConnections(first: 100) {\n edges {\n node {\n id\n channel\n channelId\n createdAt\n updatedAt\n }\n }\n }\n }\n id\n }\n}\n\nfragment TrustCenterAuditsCardFragment on Audit {\n id\n name\n framework {\n name\n id\n }\n validFrom\n validUntil\n state\n trustCenterVisibility\n createdAt\n}\n\nfragment TrustCenterDocumentsCardFragment on Document {\n id\n title\n createdAt\n documentType\n trustCenterVisibility\n versions(first: 1) {\n edges {\n node {\n id\n status\n }\n }\n }\n}\n\nfragment TrustCenterFilesCardFragment on TrustCenterFile {\n id\n name\n category\n fileUrl\n trustCenterVisibility\n createdAt\n updatedAt\n canUpdate: permission(action: \"core:trust-center-file:update\")\n canDelete: permission(action: \"core:trust-center-file:delete\")\n}\n\nfragment TrustCenterVendorsCardFragment on Vendor {\n id\n name\n category\n description\n showOnTrustCenter\n createdAt\n canUpdate: permission(action: \"core:vendor:update\")\n}\n" + "text": "query TrustCenterGraphQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n ... on Organization {\n id\n name\n canCreateTrustCenterFile: permission(action: \"core:trust-center-file:create\")\n customDomain {\n id\n domain\n }\n trustCenter {\n id\n active\n ndaFileName\n ndaFileUrl\n createdAt\n updatedAt\n canUpdate: permission(action: \"core:trust-center:update\")\n canGetNDA: permission(action: \"core:trust-center:get-nda\")\n canUploadNDA: permission(action: \"core:trust-center:upload-nda\")\n canDeleteNDA: permission(action: \"core:trust-center:delete-nda\")\n canCreateReference: permission(action: \"core:trust-center-reference:create\")\n canCreateAccess: permission(action: \"core:trust-center-access:create\")\n }\n documents(first: 100) {\n edges {\n node {\n id\n ...TrustCenterDocumentsCardFragment\n }\n }\n }\n audits(first: 100) {\n edges {\n node {\n id\n ...TrustCenterAuditsCardFragment\n }\n }\n }\n vendors(first: 100) {\n edges {\n node {\n id\n ...TrustCenterVendorsCardFragment\n }\n }\n }\n trustCenterFiles(first: 100) {\n edges {\n node {\n id\n ...TrustCenterFilesCardFragment\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n slackConnections(first: 100) {\n edges {\n node {\n id\n channel\n channelId\n createdAt\n updatedAt\n }\n }\n }\n }\n id\n }\n}\n\nfragment TrustCenterAuditsCardFragment on Audit {\n id\n name\n framework {\n name\n id\n }\n validFrom\n validUntil\n state\n trustCenterVisibility\n createdAt\n}\n\nfragment TrustCenterDocumentsCardFragment on Document {\n id\n title\n createdAt\n documentType\n trustCenterVisibility\n versions(first: 1) {\n edges {\n node {\n id\n status\n }\n }\n }\n}\n\nfragment TrustCenterFilesCardFragment on TrustCenterFile {\n id\n name\n category\n fileUrl\n trustCenterVisibility\n createdAt\n updatedAt\n canUpdate: permission(action: \"core:trust-center-file:update\")\n canDelete: permission(action: \"core:trust-center-file:delete\")\n}\n\nfragment TrustCenterVendorsCardFragment on Vendor {\n id\n name\n category\n description\n showOnTrustCenter\n createdAt\n canUpdate: permission(action: \"core:vendor:update\")\n}\n" } }; })(); -(node as any).hash = "9669200b7f9e58c412b73b30fa506f51"; +(node as any).hash = "c2590192391f38eab216d98c0c536118"; export default node; diff --git a/apps/console/src/hooks/graph/TrustCenterAccessGraph.ts b/apps/console/src/hooks/graph/TrustCenterAccessGraph.ts index f9981503d..96c87b238 100644 --- a/apps/console/src/hooks/graph/TrustCenterAccessGraph.ts +++ b/apps/console/src/hooks/graph/TrustCenterAccessGraph.ts @@ -33,6 +33,8 @@ export const trustCenterAccessesPaginationFragment = graphql` lastTokenExpiresAt pendingRequestCount activeCount + canUpdate: permission(action: "core:trust-center-access:update") + canDelete: permission(action: "core:trust-center-access:delete") } } } @@ -72,6 +74,8 @@ export const createTrustCenterAccessMutation = graphql` lastTokenExpiresAt pendingRequestCount activeCount + canUpdate: permission(action: "core:trust-center-access:update") + canDelete: permission(action: "core:trust-center-access:delete") } } } diff --git a/apps/console/src/hooks/graph/TrustCenterGraph.ts b/apps/console/src/hooks/graph/TrustCenterGraph.ts index f1a956881..f6bd7d639 100644 --- a/apps/console/src/hooks/graph/TrustCenterGraph.ts +++ b/apps/console/src/hooks/graph/TrustCenterGraph.ts @@ -29,6 +29,7 @@ export const trustCenterQuery = graphql` canCreateReference: permission( action: "core:trust-center-reference:create" ) + canCreateAccess: permission(action: "core:trust-center-access:create") } documents(first: 100) { edges { diff --git a/apps/console/src/pages/organizations/trustCenter/TrustCenterAccessTab/TrustCenterAccessEditDialog.tsx b/apps/console/src/pages/organizations/trustCenter/TrustCenterAccessTab/TrustCenterAccessEditDialog.tsx index 09f24bf4d..8bf3a8801 100644 --- a/apps/console/src/pages/organizations/trustCenter/TrustCenterAccessTab/TrustCenterAccessEditDialog.tsx +++ b/apps/console/src/pages/organizations/trustCenter/TrustCenterAccessTab/TrustCenterAccessEditDialog.tsx @@ -1,7 +1,4 @@ -import type { - TrustCenterAccess, - TrustCenterDocumentAccessStatus, -} from "@probo/coredata"; +import type { TrustCenterDocumentAccessStatus } from "@probo/coredata"; import { getTrustCenterDocumentAccessInfo, type TrustCenterDocumentAccessInfo, @@ -31,9 +28,11 @@ import { useFormWithSchema } from "/hooks/useFormWithSchema"; import { useMutationWithToasts } from "/hooks/useMutationWithToasts"; import { Suspense, useCallback, useEffect, useState } from "react"; import { TrustCenterDocumentAccessList } from "./TrustCenterDocumentAccessList"; +import type { TrustCenterAccessGraph_accesses$data } from "/__generated__/core/TrustCenterAccessGraph_accesses.graphql"; +import type { NodeOf } from "/types"; interface TrustCenterAccessEditDialogProps { - access: TrustCenterAccess; + access: NodeOf; onClose: () => void; } @@ -76,7 +75,7 @@ export function TrustCenterAccessEditDialog( } interface TrustCenterAccessEditFormProps { - access: TrustCenterAccess; + access: NodeOf; onSubmit: () => void; queryRef: PreloadedQuery; } diff --git a/apps/console/src/pages/organizations/trustCenter/TrustCenterAccessTab/TrustCenterAccessItem.tsx b/apps/console/src/pages/organizations/trustCenter/TrustCenterAccessTab/TrustCenterAccessItem.tsx index 10e5618a9..c2fb8362d 100644 --- a/apps/console/src/pages/organizations/trustCenter/TrustCenterAccessTab/TrustCenterAccessItem.tsx +++ b/apps/console/src/pages/organizations/trustCenter/TrustCenterAccessTab/TrustCenterAccessItem.tsx @@ -1,56 +1,71 @@ -import type { TrustCenterAccess } from "@probo/coredata"; -import { Button, IconCheckmark1, IconCrossLargeX, IconPencil, IconTrashCan, Td, Tr } from "@probo/ui"; +import { + Button, + IconCheckmark1, + IconCrossLargeX, + IconPencil, + IconTrashCan, + Td, + Tr, +} from "@probo/ui"; import { formatDate } from "@probo/helpers"; -import { use, useCallback, useState } from "react"; -import { PermissionsContext } from "/providers/PermissionsContext"; +import { useCallback, useState } from "react"; import { useMutationWithToasts } from "/hooks/useMutationWithToasts"; import { deleteTrustCenterAccessMutation } from "/hooks/graph/TrustCenterAccessGraph"; import { useTranslate } from "@probo/i18n"; import { TrustCenterAccessEditDialog } from "./TrustCenterAccessEditDialog"; +import type { TrustCenterAccessGraph_accesses$data } from "/__generated__/core/TrustCenterAccessGraph_accesses.graphql"; +import type { NodeOf } from "/types"; interface TrustCenterAccessItemProps { - access: TrustCenterAccess + access: NodeOf; connectionId?: string; - dialogOpen: boolean, + dialogOpen: boolean; } export function TrustCenterAccessItem(props: TrustCenterAccessItemProps) { const { access, connectionId, dialogOpen: initialDialogOpen } = props; const { __ } = useTranslate(); - const { isAuthorized } = use(PermissionsContext); - const [dialogOpen, setDialogOpen] = useState(initialDialogOpen) + const [dialogOpen, setDialogOpen] = useState(initialDialogOpen); - const [deleteInvitation, isDeleting] = useMutationWithToasts(deleteTrustCenterAccessMutation, { - successMessage: __("Access deleted successfully"), - errorMessage: __("Failed to delete access"), - }); + const [deleteInvitation, isDeleting] = useMutationWithToasts( + deleteTrustCenterAccessMutation, + { + successMessage: __("Access deleted successfully"), + errorMessage: __("Failed to delete access"), + }, + ); - const handleDelete = useCallback(async (id: string) => { - await deleteInvitation({ - variables: { - input: { id }, - connections: connectionId ? [connectionId] : [], - }, - }); - }, [deleteInvitation, connectionId]); + const handleDelete = useCallback( + async (id: string) => { + await deleteInvitation({ + variables: { + input: { id }, + connections: connectionId ? [connectionId] : [], + }, + }); + }, + [deleteInvitation, connectionId], + ); - const isExpired = access.lastTokenExpiresAt ? new Date(access.lastTokenExpiresAt) < new Date() : false; + const isExpired = access.lastTokenExpiresAt + ? new Date(access.lastTokenExpiresAt) < new Date() + : false; return ( <> setDialogOpen(true)} + onClick={() => access.canUpdate && setDialogOpen(true)} className="cursor-pointer hover:bg-bg-secondary transition-colors" > {access.name} {access.email} - - {formatDate(access.createdAt)} - + {formatDate(access.createdAt)} - {access.lastTokenExpiresAt ? formatDate(access.lastTokenExpiresAt) : "-"} + {access.lastTokenExpiresAt + ? formatDate(access.lastTokenExpiresAt) + : "-"}
@@ -61,9 +76,7 @@ export function TrustCenterAccessItem(props: TrustCenterAccessItemProps) { )}
- - {access.activeCount} - + {access.activeCount} {access.pendingRequestCount > 0 ? access.pendingRequestCount : ""} @@ -79,14 +92,14 @@ export function TrustCenterAccessItem(props: TrustCenterAccessItemProps) { className="flex gap-2 justify-end" onClick={(e) => e.stopPropagation()} > - {isAuthorized("TrustCenterAccess", "updateTrustCenterAccess") && ( + {access.canUpdate && ( - ) - )} + )} {!organization.trustCenter?.id ? ( @@ -221,15 +203,14 @@ export default function TrustCenterAccessTab() { )} - +

- {__("Send a 30-day access token to an external person to view your trust center")} + {__( + "Send a 30-day access token to an external person to view your trust center", + )}