Refactor compliance page documents page

Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
Émile Ré
2026-01-28 16:52:17 +04:00
parent 3e3c3a8ebb
commit 36a936fcf4
17 changed files with 584 additions and 787 deletions

View File

@@ -0,0 +1,116 @@
/**
* @generated SignedSource<<520e633d06f7c68a9270600108ec81da>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ReaderFragment } from 'relay-runtime';
import { FragmentRefs } from "relay-runtime";
export type CompliancePageDocumentListFragment$data = {
readonly compliancePage: {
readonly " $fragmentSpreads": FragmentRefs<"CompliancePageDocumentListItem_compliancePageFragment">;
};
readonly documents: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly id: string;
readonly " $fragmentSpreads": FragmentRefs<"CompliancePageDocumentListItem_documentFragment">;
};
}>;
};
readonly " $fragmentType": "CompliancePageDocumentListFragment";
};
export type CompliancePageDocumentListFragment$key = {
readonly " $data"?: CompliancePageDocumentListFragment$data;
readonly " $fragmentSpreads": FragmentRefs<"CompliancePageDocumentListFragment">;
};
const node: ReaderFragment = {
"argumentDefinitions": [],
"kind": "Fragment",
"metadata": null,
"name": "CompliancePageDocumentListFragment",
"selections": [
{
"kind": "RequiredField",
"field": {
"alias": "compliancePage",
"args": null,
"concreteType": "TrustCenter",
"kind": "LinkedField",
"name": "trustCenter",
"plural": false,
"selections": [
{
"args": null,
"kind": "FragmentSpread",
"name": "CompliancePageDocumentListItem_compliancePageFragment"
}
],
"storageKey": null
},
"action": "THROW"
},
{
"alias": null,
"args": [
{
"kind": "Literal",
"name": "first",
"value": 1000
}
],
"concreteType": "DocumentConnection",
"kind": "LinkedField",
"name": "documents",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "DocumentEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Document",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
{
"args": null,
"kind": "FragmentSpread",
"name": "CompliancePageDocumentListItem_documentFragment"
}
],
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": "documents(first:1000)"
}
],
"type": "Organization",
"abstractKey": null
};
(node as any).hash = "10da8f0838c700d4a2535ec5193844a8";
export default node;

View File

@@ -0,0 +1,48 @@
/**
* @generated SignedSource<<24c6b253b4339703abe0106728cb4a6f>>
* @lightSyntaxTransform
* @nogrep
*/
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
import { ReaderFragment } from 'relay-runtime';
import { FragmentRefs } from "relay-runtime";
export type CompliancePageDocumentListItem_compliancePageFragment$data = {
readonly canUpdate: boolean;
readonly " $fragmentType": "CompliancePageDocumentListItem_compliancePageFragment";
};
export type CompliancePageDocumentListItem_compliancePageFragment$key = {
readonly " $data"?: CompliancePageDocumentListItem_compliancePageFragment$data;
readonly " $fragmentSpreads": FragmentRefs<"CompliancePageDocumentListItem_compliancePageFragment">;
};
const node: ReaderFragment = {
"argumentDefinitions": [],
"kind": "Fragment",
"metadata": null,
"name": "CompliancePageDocumentListItem_compliancePageFragment",
"selections": [
{
"alias": "canUpdate",
"args": [
{
"kind": "Literal",
"name": "action",
"value": "core:trust-center:update"
}
],
"kind": "ScalarField",
"name": "permission",
"storageKey": "permission(action:\"core:trust-center:update\")"
}
],
"type": "TrustCenter",
"abstractKey": null
};
(node as any).hash = "7c884fb02ab6613707d02aa44c547ac7";
export default node;

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<ef7a2d6e28f14d4b48c27c6db864b876>>
* @generated SignedSource<<112e917e3fb881859a56b794f07ce7e7>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -13,13 +13,10 @@ export type DocumentStatus = "DRAFT" | "PUBLISHED";
export type DocumentType = "ISMS" | "OTHER" | "POLICY" | "PROCEDURE";
export type TrustCenterVisibility = "NONE" | "PRIVATE" | "PUBLIC";
import { FragmentRefs } from "relay-runtime";
export type TrustCenterDocumentsCardFragment$data = {
readonly createdAt: string;
export type CompliancePageDocumentListItem_documentFragment$data = {
readonly documentType: DocumentType;
readonly id: string;
readonly title: string;
readonly trustCenterVisibility: TrustCenterVisibility;
readonly versions: {
readonly lastVersion: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly id: string;
@@ -27,11 +24,13 @@ export type TrustCenterDocumentsCardFragment$data = {
};
}>;
};
readonly " $fragmentType": "TrustCenterDocumentsCardFragment";
readonly title: string;
readonly trustCenterVisibility: TrustCenterVisibility;
readonly " $fragmentType": "CompliancePageDocumentListItem_documentFragment";
};
export type TrustCenterDocumentsCardFragment$key = {
readonly " $data"?: TrustCenterDocumentsCardFragment$data;
readonly " $fragmentSpreads": FragmentRefs<"TrustCenterDocumentsCardFragment">;
export type CompliancePageDocumentListItem_documentFragment$key = {
readonly " $data"?: CompliancePageDocumentListItem_documentFragment$data;
readonly " $fragmentSpreads": FragmentRefs<"CompliancePageDocumentListItem_documentFragment">;
};
const node: ReaderFragment = (function(){
@@ -46,23 +45,9 @@ return {
"argumentDefinitions": [],
"kind": "Fragment",
"metadata": null,
"name": "TrustCenterDocumentsCardFragment",
"name": "CompliancePageDocumentListItem_documentFragment",
"selections": [
(v0/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "title",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "createdAt",
"storageKey": null
},
{
"alias": null,
"args": null,
@@ -74,16 +59,31 @@ return {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "trustCenterVisibility",
"name": "title",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "trustCenterVisibility",
"storageKey": null
},
{
"alias": "lastVersion",
"args": [
{
"kind": "Literal",
"name": "first",
"value": 1
},
{
"kind": "Literal",
"name": "orderBy",
"value": {
"direction": "DESC",
"field": "CREATED_AT"
}
}
],
"concreteType": "DocumentVersionConnection",
@@ -122,7 +122,7 @@ return {
"storageKey": null
}
],
"storageKey": "versions(first:1)"
"storageKey": "versions(first:1,orderBy:{\"direction\":\"DESC\",\"field\":\"CREATED_AT\"})"
}
],
"type": "Document",
@@ -130,6 +130,6 @@ return {
};
})();
(node as any).hash = "a90715444be8a289eae6615ce44e244d";
(node as any).hash = "ab2b10ffbd76c59d1a3facab0f794402";
export default node;

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<383c2d6a9d25911bb5df8c148a8a3e51>>
* @generated SignedSource<<499820c9df6a66e5a4969b593e6f257c>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -22,21 +22,19 @@ export type UpdateDocumentInput = {
title?: string | null | undefined;
trustCenterVisibility?: TrustCenterVisibility | null | undefined;
};
export type TrustCenterDocumentGraphUpdateMutation$variables = {
export type CompliancePageDocumentListItem_updateVisibilityMutation$variables = {
input: UpdateDocumentInput;
};
export type TrustCenterDocumentGraphUpdateMutation$data = {
export type CompliancePageDocumentListItem_updateVisibilityMutation$data = {
readonly updateDocument: {
readonly document: {
readonly id: string;
readonly trustCenterVisibility: TrustCenterVisibility;
readonly " $fragmentSpreads": FragmentRefs<"TrustCenterDocumentsCardFragment">;
readonly " $fragmentSpreads": FragmentRefs<"CompliancePageDocumentListItem_documentFragment">;
};
};
};
export type TrustCenterDocumentGraphUpdateMutation = {
response: TrustCenterDocumentGraphUpdateMutation$data;
variables: TrustCenterDocumentGraphUpdateMutation$variables;
export type CompliancePageDocumentListItem_updateVisibilityMutation = {
response: CompliancePageDocumentListItem_updateVisibilityMutation$data;
variables: CompliancePageDocumentListItem_updateVisibilityMutation$variables;
};
const node: ConcreteRequest = (function(){
@@ -60,20 +58,13 @@ v2 = {
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v3 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "trustCenterVisibility",
"storageKey": null
};
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "TrustCenterDocumentGraphUpdateMutation",
"name": "CompliancePageDocumentListItem_updateVisibilityMutation",
"selections": [
{
"alias": null,
@@ -91,12 +82,10 @@ return {
"name": "document",
"plural": false,
"selections": [
(v2/*: any*/),
(v3/*: any*/),
{
"args": null,
"kind": "FragmentSpread",
"name": "TrustCenterDocumentsCardFragment"
"name": "CompliancePageDocumentListItem_documentFragment"
}
],
"storageKey": null
@@ -112,7 +101,7 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "TrustCenterDocumentGraphUpdateMutation",
"name": "CompliancePageDocumentListItem_updateVisibilityMutation",
"selections": [
{
"alias": null,
@@ -131,7 +120,13 @@ return {
"plural": false,
"selections": [
(v2/*: any*/),
(v3/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "documentType",
"storageKey": null
},
{
"alias": null,
"args": null,
@@ -143,23 +138,24 @@ return {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "createdAt",
"name": "trustCenterVisibility",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "documentType",
"storageKey": null
},
{
"alias": null,
"alias": "lastVersion",
"args": [
{
"kind": "Literal",
"name": "first",
"value": 1
},
{
"kind": "Literal",
"name": "orderBy",
"value": {
"direction": "DESC",
"field": "CREATED_AT"
}
}
],
"concreteType": "DocumentVersionConnection",
@@ -198,7 +194,7 @@ return {
"storageKey": null
}
],
"storageKey": "versions(first:1)"
"storageKey": "versions(first:1,orderBy:{\"direction\":\"DESC\",\"field\":\"CREATED_AT\"})"
}
],
"storageKey": null
@@ -209,16 +205,16 @@ return {
]
},
"params": {
"cacheID": "04cb2a4e83386dfffce8c12eae320cfe",
"cacheID": "f72f0dd5039dbfeaa609b7914308c0fe",
"id": null,
"metadata": {},
"name": "TrustCenterDocumentGraphUpdateMutation",
"name": "CompliancePageDocumentListItem_updateVisibilityMutation",
"operationKind": "mutation",
"text": "mutation TrustCenterDocumentGraphUpdateMutation(\n $input: UpdateDocumentInput!\n) {\n updateDocument(input: $input) {\n document {\n id\n trustCenterVisibility\n ...TrustCenterDocumentsCardFragment\n }\n }\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"
"text": "mutation CompliancePageDocumentListItem_updateVisibilityMutation(\n $input: UpdateDocumentInput!\n) {\n updateDocument(input: $input) {\n document {\n ...CompliancePageDocumentListItem_documentFragment\n id\n }\n }\n}\n\nfragment CompliancePageDocumentListItem_documentFragment on Document {\n id\n documentType\n title\n trustCenterVisibility\n lastVersion: versions(first: 1, orderBy: {field: CREATED_AT, direction: DESC}) {\n edges {\n node {\n id\n status\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "293896dbfec4de53d0fe30a2462f833b";
(node as any).hash = "3f49f1e719ba93bc8cc69c483d50e225";
export default node;

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<1135bf3b786a26466e2763cbeecb7b5b>>
* @generated SignedSource<<d8855e4115fa54daf8305e6427c8e519>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -10,25 +10,17 @@
import { ConcreteRequest } from 'relay-runtime';
import { FragmentRefs } from "relay-runtime";
export type TrustCenterDocumentGraphQuery$variables = {
export type CompliancePageDocumentsPageQuery$variables = {
organizationId: string;
};
export type TrustCenterDocumentGraphQuery$data = {
export type CompliancePageDocumentsPageQuery$data = {
readonly organization: {
readonly documents?: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly id: string;
readonly " $fragmentSpreads": FragmentRefs<"TrustCenterDocumentsCardFragment">;
};
}>;
};
readonly id?: string;
readonly " $fragmentSpreads": FragmentRefs<"CompliancePageDocumentListFragment">;
};
};
export type TrustCenterDocumentGraphQuery = {
response: TrustCenterDocumentGraphQuery$data;
variables: TrustCenterDocumentGraphQuery$variables;
export type CompliancePageDocumentsPageQuery = {
response: CompliancePageDocumentsPageQuery$data;
variables: CompliancePageDocumentsPageQuery$variables;
};
const node: ConcreteRequest = (function(){
@@ -52,20 +44,13 @@ v2 = {
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
v3 = [
{
"kind": "Literal",
"name": "first",
"value": 100
}
];
};
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Fragment",
"metadata": null,
"name": "TrustCenterDocumentGraphQuery",
"name": "CompliancePageDocumentsPageQuery",
"selections": [
{
"alias": "organization",
@@ -76,51 +61,9 @@ return {
"plural": false,
"selections": [
{
"kind": "InlineFragment",
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": (v3/*: any*/),
"concreteType": "DocumentConnection",
"kind": "LinkedField",
"name": "documents",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "DocumentEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Document",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"args": null,
"kind": "FragmentSpread",
"name": "TrustCenterDocumentsCardFragment"
}
],
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": "documents(first:100)"
}
],
"type": "Organization",
"abstractKey": null
"args": null,
"kind": "FragmentSpread",
"name": "CompliancePageDocumentListFragment"
}
],
"storageKey": null
@@ -133,7 +76,7 @@ return {
"operation": {
"argumentDefinitions": (v0/*: any*/),
"kind": "Operation",
"name": "TrustCenterDocumentGraphQuery",
"name": "CompliancePageDocumentsPageQuery",
"selections": [
{
"alias": "organization",
@@ -150,13 +93,43 @@ return {
"name": "__typename",
"storageKey": null
},
(v2/*: any*/),
{
"kind": "InlineFragment",
"selections": [
{
"alias": "compliancePage",
"args": null,
"concreteType": "TrustCenter",
"kind": "LinkedField",
"name": "trustCenter",
"plural": false,
"selections": [
{
"alias": "canUpdate",
"args": [
{
"kind": "Literal",
"name": "action",
"value": "core:trust-center:update"
}
],
"kind": "ScalarField",
"name": "permission",
"storageKey": "permission(action:\"core:trust-center:update\")"
},
(v2/*: any*/)
],
"storageKey": null
},
{
"alias": null,
"args": (v3/*: any*/),
"args": [
{
"kind": "Literal",
"name": "first",
"value": 1000
}
],
"concreteType": "DocumentConnection",
"kind": "LinkedField",
"name": "documents",
@@ -179,20 +152,6 @@ return {
"plural": false,
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "title",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "createdAt",
"storageKey": null
},
{
"alias": null,
"args": null,
@@ -200,6 +159,13 @@ return {
"name": "documentType",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "title",
"storageKey": null
},
{
"alias": null,
"args": null,
@@ -208,12 +174,20 @@ return {
"storageKey": null
},
{
"alias": null,
"alias": "lastVersion",
"args": [
{
"kind": "Literal",
"name": "first",
"value": 1
},
{
"kind": "Literal",
"name": "orderBy",
"value": {
"direction": "DESC",
"field": "CREATED_AT"
}
}
],
"concreteType": "DocumentVersionConnection",
@@ -252,7 +226,7 @@ return {
"storageKey": null
}
],
"storageKey": "versions(first:1)"
"storageKey": "versions(first:1,orderBy:{\"direction\":\"DESC\",\"field\":\"CREATED_AT\"})"
}
],
"storageKey": null
@@ -261,28 +235,29 @@ return {
"storageKey": null
}
],
"storageKey": "documents(first:100)"
"storageKey": "documents(first:1000)"
}
],
"type": "Organization",
"abstractKey": null
}
},
(v2/*: any*/)
],
"storageKey": null
}
]
},
"params": {
"cacheID": "1df18b182ace4562ffa876b7e8073a22",
"cacheID": "675dc82aa65110e99b4ddc51992999c3",
"id": null,
"metadata": {},
"name": "TrustCenterDocumentGraphQuery",
"name": "CompliancePageDocumentsPageQuery",
"operationKind": "query",
"text": "query TrustCenterDocumentGraphQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n ... on Organization {\n id\n documents(first: 100) {\n edges {\n node {\n id\n ...TrustCenterDocumentsCardFragment\n }\n }\n }\n }\n id\n }\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"
"text": "query CompliancePageDocumentsPageQuery(\n $organizationId: ID!\n) {\n organization: node(id: $organizationId) {\n __typename\n ...CompliancePageDocumentListFragment\n id\n }\n}\n\nfragment CompliancePageDocumentListFragment on Organization {\n compliancePage: trustCenter {\n ...CompliancePageDocumentListItem_compliancePageFragment\n id\n }\n documents(first: 1000) {\n edges {\n node {\n id\n ...CompliancePageDocumentListItem_documentFragment\n }\n }\n }\n}\n\nfragment CompliancePageDocumentListItem_compliancePageFragment on TrustCenter {\n canUpdate: permission(action: \"core:trust-center:update\")\n}\n\nfragment CompliancePageDocumentListItem_documentFragment on Document {\n id\n documentType\n title\n trustCenterVisibility\n lastVersion: versions(first: 1, orderBy: {field: CREATED_AT, direction: DESC}) {\n edges {\n node {\n id\n status\n }\n }\n }\n}\n"
}
};
})();
(node as any).hash = "f4e34ac09a2b56c2298bc319d9701f4d";
(node as any).hash = "d81c7a5da1810d0e8d7fadb5b8a3766a";
export default node;

View File

@@ -1,5 +1,5 @@
/**
* @generated SignedSource<<409b8c7ffaa92ad8d718689cb254228e>>
* @generated SignedSource<<0f4473cdf4275afaab6b6825f6b6d546>>
* @lightSyntaxTransform
* @nogrep
*/
@@ -20,27 +20,8 @@ export type TrustCenterGraphQuery$data = {
readonly domain: string;
readonly id: string;
} | null | undefined;
readonly documents?: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly id: string;
readonly " $fragmentSpreads": FragmentRefs<"TrustCenterDocumentsCardFragment">;
};
}>;
};
readonly id?: string;
readonly name?: string;
readonly slackConnections?: {
readonly edges: ReadonlyArray<{
readonly node: {
readonly channel: string | null | undefined;
readonly channelId: string | null | undefined;
readonly createdAt: string;
readonly id: string;
readonly updatedAt: string;
};
}>;
};
readonly trustCenter?: {
readonly active: boolean;
readonly canCreateAccess: boolean;
@@ -326,63 +307,6 @@ v13 = {
]
},
v14 = {
"alias": null,
"args": (v9/*: any*/),
"concreteType": "SlackConnectionConnection",
"kind": "LinkedField",
"name": "slackConnections",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "SlackConnectionEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "SlackConnection",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "channel",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "channelId",
"storageKey": null
},
(v6/*: any*/),
(v7/*: any*/)
],
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": "slackConnections(first:100)"
},
v15 = {
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "trustCenterVisibility",
"storageKey": null
},
v16 = {
"alias": null,
"args": null,
"kind": "ScalarField",
@@ -412,45 +336,6 @@ return {
(v4/*: any*/),
(v5/*: any*/),
(v8/*: any*/),
{
"alias": null,
"args": (v9/*: any*/),
"concreteType": "DocumentConnection",
"kind": "LinkedField",
"name": "documents",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "DocumentEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Document",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"args": null,
"kind": "FragmentSpread",
"name": "TrustCenterDocumentsCardFragment"
}
],
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": "documents(first:100)"
},
{
"alias": null,
"args": (v9/*: any*/),
@@ -532,8 +417,7 @@ return {
(v13/*: any*/)
],
"storageKey": null
},
(v14/*: any*/)
}
],
"type": "Organization",
"abstractKey": null
@@ -568,103 +452,6 @@ return {
(v4/*: any*/),
(v5/*: any*/),
(v8/*: any*/),
{
"alias": null,
"args": (v9/*: any*/),
"concreteType": "DocumentConnection",
"kind": "LinkedField",
"name": "documents",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "DocumentEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "Document",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "title",
"storageKey": null
},
(v6/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "documentType",
"storageKey": null
},
(v15/*: any*/),
{
"alias": null,
"args": [
{
"kind": "Literal",
"name": "first",
"value": 1
}
],
"concreteType": "DocumentVersionConnection",
"kind": "LinkedField",
"name": "versions",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "DocumentVersionEdge",
"kind": "LinkedField",
"name": "edges",
"plural": true,
"selections": [
{
"alias": null,
"args": null,
"concreteType": "DocumentVersion",
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
(v2/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "status",
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": "versions(first:1)"
}
],
"storageKey": null
}
],
"storageKey": null
}
],
"storageKey": "documents(first:100)"
},
{
"alias": null,
"args": (v9/*: any*/),
@@ -691,7 +478,7 @@ return {
"selections": [
(v2/*: any*/),
(v3/*: any*/),
(v16/*: any*/),
(v14/*: any*/),
{
"alias": null,
"args": null,
@@ -755,7 +542,7 @@ return {
"selections": [
(v2/*: any*/),
(v3/*: any*/),
(v16/*: any*/),
(v14/*: any*/),
{
"alias": null,
"args": null,
@@ -763,7 +550,13 @@ return {
"name": "fileUrl",
"storageKey": null
},
(v15/*: any*/),
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "trustCenterVisibility",
"storageKey": null
},
(v6/*: any*/),
(v7/*: any*/),
{
@@ -813,8 +606,7 @@ return {
"key": "TrustCenterPage_trustCenterFiles",
"kind": "LinkedHandle",
"name": "trustCenterFiles"
},
(v14/*: any*/)
}
],
"type": "Organization",
"abstractKey": null
@@ -825,7 +617,7 @@ return {
]
},
"params": {
"cacheID": "9c65178da92b31263957b8ccc6747639",
"cacheID": "ae3ba021303da59b774b89df514bd91e",
"id": null,
"metadata": {
"connection": [
@@ -842,11 +634,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 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 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 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 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 }\n id\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 = "5f4dd8eb5f6ceb0dcb1d3ce3eff4978c";
(node as any).hash = "abd5b3222d2bd168213a8ede829b4881";
export default node;

View File

@@ -1,104 +0,0 @@
import { sprintf } from "@probo/helpers";
import { useTranslate } from "@probo/i18n";
import { Badge, Button, Card } from "@probo/ui";
import type { TrustCenterGraphQuery$data } from "#/__generated__/core/TrustCenterGraphQuery.graphql";
type Props = {
canUpdate: boolean;
organizationId: string;
slackConnections: NonNullable<
TrustCenterGraphQuery$data["organization"]["slackConnections"]
>["edges"][number]["node"][];
};
export function SlackConnections({
canUpdate,
organizationId,
slackConnections: connectedSlackConnections,
}: Props) {
const { __, dateTimeFormat } = useTranslate();
const slackConnectionDefinitions = [
{
id: "SLACK",
name: "Slack",
protocol: "OAUTH2",
description: __("Manage your trust center access with slack"),
},
];
const slackConnections = slackConnectionDefinitions.map((def) => {
const connected = connectedSlackConnections.find(c => c.id);
return {
...def,
createdAt: connected?.createdAt,
channel: connected?.channel,
channelId: connected?.channelId,
};
});
const getUrl = (provider: string) => {
const baseUrl = import.meta.env.VITE_API_URL || window.location.origin;
const url = new URL("/api/console/v1/connectors/initiate", baseUrl);
url.searchParams.append("organization_id", organizationId);
url.searchParams.append("provider", provider);
const trustCenterUrl = `/organizations/${organizationId}/trust-center`;
url.searchParams.append("continue", trustCenterUrl);
const finalUrl = url.toString();
return finalUrl;
};
return (
<div className="space-y-2">
{slackConnections.map(slackConnection => (
<Card
key={slackConnection.id}
padded
className="flex items-center gap-3"
>
<div>
<img src={`/${slackConnection.id.toLowerCase()}.png`} alt="" />
</div>
<div className="mr-auto">
<h3 className="text-base font-semibold">{slackConnection.name}</h3>
<p className="text-sm text-txt-tertiary">
{slackConnection.createdAt
? (
<>
{sprintf(
__("Connected on %s"),
dateTimeFormat(slackConnection.createdAt),
)}
{slackConnection.channel && (
<>
{" • "}
{sprintf(__("Channel: %s"), slackConnection.channel)}
</>
)}
</>
)
: (
slackConnection.description
)}
</p>
</div>
{slackConnection.createdAt
? (
<div>
<Badge variant="success" size="md">
{__("Connected")}
</Badge>
</div>
)
: (
canUpdate && (
<Button variant="secondary" asChild>
<a href={getUrl(slackConnection.id)}>{__("Connect")}</a>
</Button>
)
)}
</Card>
))}
</div>
);
}

View File

@@ -1,188 +0,0 @@
import { getTrustCenterVisibilityOptions, sprintf } from "@probo/helpers";
import { useTranslate } from "@probo/i18n";
import {
Badge,
Button,
DocumentTypeBadge,
DocumentVersionBadge,
Field,
IconChevronDown,
Option,
Table,
Tbody,
Td,
Th,
Thead,
Tr,
} from "@probo/ui";
import { useCallback, useMemo, useState } from "react";
import { useFragment } from "react-relay";
import { graphql } from "relay-runtime";
import type { TrustCenterDocumentsCardFragment$key } from "#/__generated__/core/TrustCenterDocumentsCardFragment.graphql";
import { useOrganizationId } from "#/hooks/useOrganizationId";
const trustCenterDocumentFragment = graphql`
fragment TrustCenterDocumentsCardFragment on Document {
id
title
createdAt
documentType
trustCenterVisibility
versions(first: 1) {
edges {
node {
id
status
}
}
}
}
`;
type Mutation<Params> = (p: {
variables: {
input: {
id: string;
trustCenterVisibility: "NONE" | "PRIVATE" | "PUBLIC";
} & Params;
};
}) => Promise<void>;
type Props<Params> = {
documents: TrustCenterDocumentsCardFragment$key[];
params: Params;
disabled?: boolean;
onChangeVisibility: Mutation<Params>;
canUpdate: boolean;
};
export function TrustCenterDocumentsCard<Params>(props: Props<Params>) {
const { __ } = useTranslate();
const [limit, setLimit] = useState<number | null>(100);
const documents = useMemo(() => {
return limit ? props.documents.slice(0, limit) : props.documents;
}, [props.documents, limit]);
const showMoreButton = limit !== null && props.documents.length > limit;
const onChangeVisibility = async (
documentId: string,
trustCenterVisibility: "NONE" | "PRIVATE" | "PUBLIC",
) => {
await props.onChangeVisibility({
variables: {
input: {
id: documentId,
trustCenterVisibility,
...props.params,
},
},
});
};
return (
<div className="space-y-[10px]">
<Table>
<Thead>
<Tr>
<Th>{__("Name")}</Th>
<Th>{__("Type")}</Th>
<Th>{__("State")}</Th>
<Th>{__("Visibility")}</Th>
</Tr>
</Thead>
<Tbody>
{documents.length === 0 && (
<Tr>
<Td colSpan={5} className="text-center text-txt-secondary">
{__("No documents available")}
</Td>
</Tr>
)}
{documents.map((document, index) => (
<DocumentRow
key={index}
documentFragmentRef={document}
onChangeVisibility={onChangeVisibility}
disabled={props.disabled}
canUpdate={props.canUpdate}
/>
))}
</Tbody>
</Table>
{showMoreButton && (
<Button
variant="tertiary"
onClick={() => setLimit(null)}
className="mt-3 mx-auto"
icon={IconChevronDown}
>
{sprintf(__("Show %s more"), props.documents.length - limit)}
</Button>
)}
</div>
);
}
function DocumentRow(props: {
documentFragmentRef: TrustCenterDocumentsCardFragment$key;
onChangeVisibility: (
documentId: string,
trustCenterVisibility: "NONE" | "PRIVATE" | "PUBLIC",
) => Promise<void>;
disabled?: boolean;
canUpdate: boolean;
}) {
const { documentFragmentRef, onChangeVisibility, disabled, canUpdate }
= props;
const document = useFragment(
trustCenterDocumentFragment,
documentFragmentRef,
);
const organizationId = useOrganizationId();
const { __ } = useTranslate();
const handleValueChange = useCallback(
async (value: string) => {
const stringValue = typeof value === "string" ? value : "";
const typedValue = stringValue as "NONE" | "PRIVATE" | "PUBLIC";
await onChangeVisibility(document.id, typedValue);
},
[document.id, onChangeVisibility],
);
const visibilityOptions = getTrustCenterVisibilityOptions(__);
return (
<Tr to={`/organizations/${organizationId}/documents/${document.id}`}>
<Td>
<div className="flex gap-4 items-center">{document.title}</div>
</Td>
<Td>
<DocumentTypeBadge type={document.documentType} />
</Td>
<Td>
<DocumentVersionBadge
state={document.versions?.edges?.[0]?.node?.status}
/>
</Td>
<Td noLink width={130} className="pr-0">
<Field
type="select"
value={document.trustCenterVisibility}
onValueChange={value => void handleValueChange(value)}
disabled={disabled || !canUpdate}
className="w-[105px]"
>
{visibilityOptions.map(option => (
<Option key={option.value} value={option.value}>
<div className="flex items-center justify-between w-full">
<Badge variant={option.variant}>{option.label}</Badge>
</div>
</Option>
))}
</Field>
</Td>
</Tr>
);
}

View File

@@ -1,49 +0,0 @@
import { useTranslate } from "@probo/i18n";
import { graphql } from "relay-runtime";
import type { TrustCenterDocumentGraphUpdateMutation } from "#/__generated__/core/TrustCenterDocumentGraphUpdateMutation.graphql";
import { useMutationWithToasts } from "#/hooks/useMutationWithToasts";
export const trustCenterDocumentsQuery = graphql`
query TrustCenterDocumentGraphQuery($organizationId: ID!) {
organization: node(id: $organizationId) {
... on Organization {
id
documents(first: 100) {
edges {
node {
id
...TrustCenterDocumentsCardFragment
}
}
}
}
}
}
`;
export const updateDocumentVisibilityMutation = graphql`
mutation TrustCenterDocumentGraphUpdateMutation(
$input: UpdateDocumentInput!
) {
updateDocument(input: $input) {
document {
id
trustCenterVisibility
...TrustCenterDocumentsCardFragment
}
}
}
`;
export function useUpdateDocumentVisibilityMutation() {
const { __ } = useTranslate();
return useMutationWithToasts<TrustCenterDocumentGraphUpdateMutation>(
updateDocumentVisibilityMutation,
{
successMessage: __("Document visibility updated successfully."),
errorMessage: __("Failed to update document visibility"),
},
);
}

View File

@@ -32,14 +32,6 @@ export const trustCenterQuery = graphql`
)
canCreateAccess: permission(action: "core:trust-center-access:create")
}
documents(first: 100) {
edges {
node {
id
...TrustCenterDocumentsCardFragment
}
}
}
vendors(first: 100) {
edges {
node {
@@ -58,17 +50,6 @@ export const trustCenterQuery = graphql`
}
}
}
slackConnections(first: 100) {
edges {
node {
id
channel
channelId
createdAt
updatedAt
}
}
}
}
}
}

View File

@@ -0,0 +1,40 @@
import { useTranslate } from "@probo/i18n";
import { graphql, type PreloadedQuery, usePreloadedQuery } from "react-relay";
import type { CompliancePageDocumentsPageQuery } from "#/__generated__/core/CompliancePageDocumentsPageQuery.graphql";
import { CompliancePageDocumentList } from "./_components/CompliancePageDocumentList";
export const compliancePageDocumentsPageQuery = graphql`
query CompliancePageDocumentsPageQuery($organizationId: ID!) {
organization: node(id: $organizationId) {
...CompliancePageDocumentListFragment
}
}
`;
export function CompliancePageDocumentsPage(props: { queryRef: PreloadedQuery<CompliancePageDocumentsPageQuery> }) {
const { queryRef } = props;
const { __ } = useTranslate();
const { organization } = usePreloadedQuery<CompliancePageDocumentsPageQuery>(
compliancePageDocumentsPageQuery,
queryRef,
);
return (
<div className="space-y-4">
<div className="flex items-center justify-between">
<div>
<h3 className="text-base font-medium">{__("Documents")}</h3>
<p className="text-sm text-txt-tertiary">
{__("Manage policies, procedures and compliance documents")}
</p>
</div>
</div>
<CompliancePageDocumentList fragmentRef={organization} />
</div>
);
};

View File

@@ -0,0 +1,32 @@
import { useEffect } from "react";
import { useQueryLoader } from "react-relay";
import type { CompliancePageDocumentsPageQuery } from "#/__generated__/core/CompliancePageDocumentsPageQuery.graphql";
import { LinkCardSkeleton } from "#/components/skeletons/LinkCardSkeleton";
import { useOrganizationId } from "#/hooks/useOrganizationId";
import { CoreRelayProvider } from "#/providers/CoreRelayProvider";
import { CompliancePageDocumentsPage, compliancePageDocumentsPageQuery } from "./CompliancePageDocumentsPage";
function CompliancePageDocumentsPageQueryLoader() {
const organizationId = useOrganizationId();
const [queryRef, loadQuery] = useQueryLoader<CompliancePageDocumentsPageQuery>(compliancePageDocumentsPageQuery);
useEffect(() => {
if (!queryRef) {
loadQuery({ organizationId });
}
});
if (!queryRef) return <LinkCardSkeleton />;
return <CompliancePageDocumentsPage queryRef={queryRef} />;
}
export default function CompliancePageDocumentsPageLoader() {
return (
<CoreRelayProvider>
<CompliancePageDocumentsPageQueryLoader />
</CoreRelayProvider>
);
}

View File

@@ -0,0 +1,78 @@
import { sprintf } from "@probo/helpers";
import { useTranslate } from "@probo/i18n";
import { Button, IconChevronDown, Table, Tbody, Td, Th, Thead, Tr } from "@probo/ui";
import { useState } from "react";
import { useFragment } from "react-relay";
import { graphql } from "relay-runtime";
import type { CompliancePageDocumentListFragment$key } from "#/__generated__/core/CompliancePageDocumentListFragment.graphql";
import { CompliancePageDocumentListItem } from "./CompliancePageDocumentListItem";
const fragment = graphql`
fragment CompliancePageDocumentListFragment on Organization {
compliancePage: trustCenter @required(action: THROW) {
...CompliancePageDocumentListItem_compliancePageFragment
}
documents(first: 1000) {
edges {
node {
id
...CompliancePageDocumentListItem_documentFragment
}
}
}
}
`;
export function CompliancePageDocumentList(props: { fragmentRef: CompliancePageDocumentListFragment$key }) {
const { fragmentRef } = props;
const { __ } = useTranslate();
const { compliancePage, documents } = useFragment<CompliancePageDocumentListFragment$key>(fragment, fragmentRef);
const [limit, setLimit] = useState<number | null>(100);
const showMoreButton = limit !== null && documents.edges.length > limit;
return (
<div className="space-y-[10px]">
<Table>
<Thead>
<Tr>
<Th>{__("Name")}</Th>
<Th>{__("Type")}</Th>
<Th>{__("State")}</Th>
<Th>{__("Visibility")}</Th>
</Tr>
</Thead>
<Tbody>
{documents.edges.length === 0 && (
<Tr>
<Td colSpan={5} className="text-center text-txt-secondary">
{__("No documents available")}
</Td>
</Tr>
)}
{documents.edges.map(({ node: document }) => (
<CompliancePageDocumentListItem
key={document.id}
compliancePageFragmentRef={compliancePage}
documentFragmentRef={document}
/>
))}
</Tbody>
</Table>
{showMoreButton && (
<Button
variant="tertiary"
onClick={() => setLimit(null)}
className="mt-3 mx-auto"
icon={IconChevronDown}
>
{sprintf(__("Show %s more"), documents.edges.length - limit)}
</Button>
)}
</div>
);
};

View File

@@ -0,0 +1,121 @@
import { getTrustCenterVisibilityOptions } from "@probo/helpers";
import { useTranslate } from "@probo/i18n";
import { Badge, DocumentTypeBadge, DocumentVersionBadge, Field, Option, Td, Tr } from "@probo/ui";
import { useCallback } from "react";
import { useFragment } from "react-relay";
import { graphql } from "relay-runtime";
import type { CompliancePageDocumentListItem_compliancePageFragment$key } from "#/__generated__/core/CompliancePageDocumentListItem_compliancePageFragment.graphql";
import type { CompliancePageDocumentListItem_documentFragment$key } from "#/__generated__/core/CompliancePageDocumentListItem_documentFragment.graphql";
import { useMutationWithToasts } from "#/hooks/useMutationWithToasts";
import { useOrganizationId } from "#/hooks/useOrganizationId";
const compliancePageFragment = graphql`
fragment CompliancePageDocumentListItem_compliancePageFragment on TrustCenter {
canUpdate: permission(action: "core:trust-center:update")
}
`;
const documentFragment = graphql`
fragment CompliancePageDocumentListItem_documentFragment on Document {
id
documentType
title
trustCenterVisibility
lastVersion: versions(first: 1, orderBy: { field: CREATED_AT, direction: DESC }) {
edges {
node {
id
status
}
}
}
}
`;
const updateDocumentVisibilityMutation = graphql`
mutation CompliancePageDocumentListItem_updateVisibilityMutation(
$input: UpdateDocumentInput!
) {
updateDocument(input: $input) {
document {
...CompliancePageDocumentListItem_documentFragment
}
}
}
`;
export function CompliancePageDocumentListItem(props: {
compliancePageFragmentRef: CompliancePageDocumentListItem_compliancePageFragment$key;
documentFragmentRef: CompliancePageDocumentListItem_documentFragment$key;
}) {
const { compliancePageFragmentRef, documentFragmentRef } = props;
const organizationId = useOrganizationId();
const { __ } = useTranslate();
const visibilityOptions = getTrustCenterVisibilityOptions(__);
const compliancePage = useFragment<CompliancePageDocumentListItem_compliancePageFragment$key>(
compliancePageFragment,
compliancePageFragmentRef,
);
const document = useFragment<CompliancePageDocumentListItem_documentFragment$key>(
documentFragment,
documentFragmentRef,
);
const [updateDocumentVisibility, isUpdatingDocumentVisibility] = useMutationWithToasts(
updateDocumentVisibilityMutation,
{
successMessage: __("Document visibility updated successfully."),
errorMessage: __("Failed to update document visibility"),
},
);
const handleVsibilityChange = useCallback(
async (value: string) => {
const stringValue = typeof value === "string" ? value : "";
const typedValue = stringValue as "NONE" | "PRIVATE" | "PUBLIC";
await updateDocumentVisibility({
variables: {
input: {
id: document.id,
trustCenterVisibility: typedValue,
},
},
});
},
[document.id, updateDocumentVisibility],
);
return (
<Tr to={`/organizations/${organizationId}/documents/${document.id}`}>
<Td>
<div className="flex gap-4 items-center">{document.title}</div>
</Td>
<Td>
<DocumentTypeBadge type={document.documentType} />
</Td>
<Td>
<DocumentVersionBadge
state={document.lastVersion.edges[0].node.status}
/>
</Td>
<Td noLink width={130} className="pr-0">
<Field
type="select"
value={document.trustCenterVisibility}
onValueChange={value => void handleVsibilityChange(value)}
disabled={isUpdatingDocumentVisibility || !compliancePage.canUpdate}
className="w-[105px]"
>
{visibilityOptions.map(option => (
<Option key={option.value} value={option.value}>
<div className="flex items-center justify-between w-full">
<Badge variant={option.variant}>{option.label}</Badge>
</div>
</Option>
))}
</Field>
</Td>
</Tr>
);
}

View File

@@ -24,6 +24,11 @@ export const compliancePageRoutes = [
Fallback: LinkCardSkeleton,
Component: lazy(() => import("#/pages/organizations/compliance-page/audits/CompliancePageAuditsPageLoader")),
},
{
path: "documents",
Fallback: LinkCardSkeleton,
Component: lazy(() => import("#/pages/organizations/compliance-page/documents/CompliancePageDocumentsPageLoader")),
},
],
},
];

View File

@@ -1,38 +0,0 @@
import { useTranslate } from "@probo/i18n";
import { Spinner } from "@probo/ui";
import { useOutletContext } from "react-router";
import type { TrustCenterGraphQuery$data } from "#/__generated__/core/TrustCenterGraphQuery.graphql";
import { TrustCenterDocumentsCard } from "#/components/trustCenter/TrustCenterDocumentsCard";
import { useUpdateDocumentVisibilityMutation } from "#/hooks/graph/TrustCenterDocumentGraph";
export default function TrustCenterDocumentsTab() {
const { __ } = useTranslate();
const { organization } = useOutletContext<TrustCenterGraphQuery$data>();
const [updateDocumentVisibility, isUpdatingDocuments]
= useUpdateDocumentVisibilityMutation();
const documents
= organization.documents?.edges?.map(edge => edge.node) || [];
return (
<div className="space-y-4">
<div className="flex items-center justify-between">
<div>
<h3 className="text-base font-medium">{__("Documents")}</h3>
<p className="text-sm text-txt-tertiary">
{__("Manage policies, procedures and compliance documents")}
</p>
</div>
{isUpdatingDocuments && <Spinner />}
</div>
<TrustCenterDocumentsCard
documents={documents}
params={{}}
disabled={isUpdatingDocuments}
onChangeVisibility={updateDocumentVisibility}
canUpdate={!!organization.trustCenter?.canUpdate}
/>
</div>
);
}

View File

@@ -29,14 +29,6 @@ export const trustCenterRoutes = [
lazy(() => import("#/pages/organizations/trustCenter/TrustCenterPage")),
),
children: [
{
path: "documents",
Fallback: LinkCardSkeleton,
Component: lazy(
() =>
import("#/pages/organizations/trustCenter/TrustCenterDocumentsTab"),
),
},
{
path: "files",
Fallback: LinkCardSkeleton,