Rename portal and trust frontends

Update visitor-facing apps to Compliance Portal
types, hooks, and resolvers so they match the
backend GraphQL rename.

Signed-off-by: Bryan Frimin <bryan@probo.com>
This commit is contained in:
Bryan Frimin
2026-07-20 18:08:35 +02:00
parent 53cc6c487e
commit d914cb9ac7
42 changed files with 295 additions and 295 deletions

View File

@@ -32,14 +32,14 @@ import { useFragment, useMutation } from "react-relay";
import { useLocation, useNavigate, useSearchParams } from "react-router";
import { graphql } from "relay-runtime";
import type { TrustCenterFileRow_requestAccessMutation } from "./__generated__/TrustCenterFileRow_requestAccessMutation.graphql";
import type { TrustCenterFileRowFragment$key } from "./__generated__/TrustCenterFileRowFragment.graphql";
import type { CompliancePortalFileRow_requestAccessMutation } from "./__generated__/CompliancePortalFileRow_requestAccessMutation.graphql";
import type { CompliancePortalFileRowFragment$key } from "./__generated__/CompliancePortalFileRowFragment.graphql";
const requestAccessMutation = graphql`
mutation TrustCenterFileRow_requestAccessMutation(
$input: RequestTrustCenterFileAccessInput!
mutation CompliancePortalFileRow_requestAccessMutation(
$input: RequestCompliancePortalFileAccessInput!
) {
requestTrustCenterFileAccess(input: $input) {
requestCompliancePortalFileAccess(input: $input) {
file {
access {
id
@@ -50,8 +50,8 @@ const requestAccessMutation = graphql`
}
`;
const trustCenterFileRowFragment = graphql`
fragment TrustCenterFileRowFragment on TrustCenterFile {
const compliancePortalFileRowFragment = graphql`
fragment CompliancePortalFileRowFragment on CompliancePortalFile {
id
alias
name
@@ -63,8 +63,8 @@ const trustCenterFileRowFragment = graphql`
}
`;
export function TrustCenterFileRow(props: {
file: TrustCenterFileRowFragment$key;
export function CompliancePortalFileRow(props: {
file: CompliancePortalFileRowFragment$key;
}) {
const { __ } = useTranslate();
const { toast } = useToast();
@@ -72,12 +72,12 @@ export function TrustCenterFileRow(props: {
const [searchParams] = useSearchParams();
const navigate = useNavigate();
const file = useFragment(trustCenterFileRowFragment, props.file);
const file = useFragment(compliancePortalFileRowFragment, props.file);
const filePath = file.alias ?? file.id;
const hasRequested = file.access?.status === "REQUESTED";
const [requestAccess, isRequestingAccess]
= useMutation<TrustCenterFileRow_requestAccessMutation>(
= useMutation<CompliancePortalFileRow_requestAccessMutation>(
requestAccessMutation,
);
@@ -85,7 +85,7 @@ export function TrustCenterFileRow(props: {
requestAccess({
variables: {
input: {
trustCenterFileId: file.id,
compliancePortalFileId: file.id,
},
},
onCompleted: (_, errors) => {

View File

@@ -37,7 +37,7 @@ import { useMutation } from "react-relay";
import { useLocation, useNavigate, useSearchParams } from "react-router";
import { graphql } from "relay-runtime";
import type { TrustGraphCurrentQuery$data } from "#/queries/__generated__/TrustGraphCurrentQuery.graphql";
import type { CompliancePortalGraphCurrentQuery$data } from "#/queries/__generated__/CompliancePortalGraphCurrentQuery.graphql";
import type { OrganizationSidebar_requestAllAccessesMutation } from "./__generated__/OrganizationSidebar_requestAllAccessesMutation.graphql";
import type { OrganizationSidebar_subscribeToMailingListMutation } from "./__generated__/OrganizationSidebar_subscribeToMailingListMutation.graphql";
@@ -47,7 +47,7 @@ import { FrameworkBadge } from "./FrameworkBadge";
const requestAllAccessesMutation = graphql`
mutation OrganizationSidebar_requestAllAccessesMutation {
requestAllAccesses {
trustCenterAccess {
compliancePortalAccess {
id
}
}
@@ -76,13 +76,13 @@ const unsubscribeFromMailingListMutation = graphql`
`;
export function OrganizationSidebar({
trustCenter,
compliancePortal,
isAuthenticated,
}: {
trustCenter: TrustGraphCurrentQuery$data["currentTrustCenter"];
compliancePortal: CompliancePortalGraphCurrentQuery$data["currentCompliancePortal"];
isAuthenticated: boolean;
}) {
const trustCenterId = trustCenter?.id;
const compliancePortalId = compliancePortal?.id;
const { __ } = useTranslate();
const { toast } = useToast();
const theme = useSystemTheme();
@@ -91,8 +91,8 @@ export function OrganizationSidebar({
const location = useLocation();
const logoFileUrl = theme === "dark"
? (trustCenter?.darkLogo?.downloadUrl ?? trustCenter?.logo?.downloadUrl)
: trustCenter?.logo?.downloadUrl;
? (compliancePortal?.darkLogo?.downloadUrl ?? compliancePortal?.logo?.downloadUrl)
: compliancePortal?.logo?.downloadUrl;
const [requestAllAccesses, isRequestingAccess]
= useMutation<OrganizationSidebar_requestAllAccessesMutation>(
@@ -155,12 +155,12 @@ export function OrganizationSidebar({
variables: {},
updater: (store, data) => {
const subscription = data?.subscribeToMailingList?.subscription;
if (!subscription?.id || !trustCenterId) return;
const trustCenterRecord = store.get(trustCenterId);
if (!trustCenterRecord) return;
if (!subscription?.id || !compliancePortalId) return;
const compliancePortalRecord = store.get(compliancePortalId);
if (!compliancePortalRecord) return;
const subscriptionRecord = store.get(subscription.id);
if (!subscriptionRecord) return;
trustCenterRecord.setLinkedRecord(subscriptionRecord, "viewerSubscription");
compliancePortalRecord.setLinkedRecord(subscriptionRecord, "viewerSubscription");
},
onCompleted: (_, errors) => {
if (errors?.length) {
@@ -215,7 +215,7 @@ export function OrganizationSidebar({
});
};
if (!trustCenter) {
if (!compliancePortal) {
return null;
}
@@ -233,9 +233,9 @@ export function OrganizationSidebar({
: (
<div className="size-24 rounded-2xl border border-border-mid shadow-mid bg-level-1" />
)}
<h1 className="text-2xl mt-6">{trustCenter.title}</h1>
<h1 className="text-2xl mt-6">{compliancePortal.title}</h1>
<p className="text-sm text-txt-secondary mt-1">
{trustCenter.description}
{compliancePortal.description}
</p>
<hr className="my-6 -mx-6 h-px bg-border-low border-none" />
@@ -246,32 +246,32 @@ export function OrganizationSidebar({
<IconBlock size={16} />
{__("Business information")}
</h2>
{trustCenter.websiteUrl && (
{compliancePortal.websiteUrl && (
<BusinessInfo label={__("Website")}>
<a {...externalLinkProps(trustCenter.websiteUrl)}>
<a {...externalLinkProps(compliancePortal.websiteUrl)}>
<span className="text-txt-info hover:underline ">
{new URL(trustCenter.websiteUrl).host}
{new URL(compliancePortal.websiteUrl).host}
</span>
</a>
</BusinessInfo>
)}
{trustCenter.email && (
{compliancePortal.email && (
<BusinessInfo label={__("Contact")}>
<a href={`mailto:${trustCenter.email}`}>
<a href={`mailto:${compliancePortal.email}`}>
<span className="text-txt-info hover:underline ">
{trustCenter.email}
{compliancePortal.email}
</span>
</a>
</BusinessInfo>
)}
{trustCenter.headquarterAddress && (
{compliancePortal.headquarterAddress && (
<BusinessInfo label={__("HQ address")}>
{trustCenter.headquarterAddress}
{compliancePortal.headquarterAddress}
</BusinessInfo>
)}
{trustCenter.customLinks.edges.length > 0 && (
{compliancePortal.customLinks.edges.length > 0 && (
<div className="flex flex-wrap gap-x-4 gap-y-2">
{trustCenter.customLinks.edges.map(({ node }) => (
{compliancePortal.customLinks.edges.map(({ node }) => (
<a
key={node.id}
{...externalLinkProps(node.url)}
@@ -287,7 +287,7 @@ export function OrganizationSidebar({
<hr className="my-6 -mx-6 h-px bg-border-low border-none" />
{/* Certifications */}
{trustCenter.complianceFrameworks.edges.length > 0 && (
{compliancePortal.complianceFrameworks.edges.length > 0 && (
<>
<div className="space-y-4">
<h2 className="text-xs text-txt-secondary flex gap-1 items-center">
@@ -300,7 +300,7 @@ export function OrganizationSidebar({
gridTemplateColumns: "repeat(auto-fit, 75px",
}}
>
{trustCenter.complianceFrameworks.edges.map(edge => (
{compliancePortal.complianceFrameworks.edges.map(edge => (
<FrameworkBadge key={edge.node.id} framework={edge.node.framework} />
))}
</div>
@@ -322,7 +322,7 @@ export function OrganizationSidebar({
{__("Request access")}
</Button>
{isAuthenticated && (
trustCenter.viewerSubscription
compliancePortal.viewerSubscription
? (
<Button
disabled={isUnsubscribing}

View File

@@ -18,7 +18,7 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
import { getTrustCenterUrl } from "@probo/helpers";
import { getCompliancePortalUrl } from "@probo/helpers";
import { useTranslate } from "@probo/i18n";
import { Skeleton, TabLink, Tabs } from "@probo/ui";
@@ -31,12 +31,12 @@ export function MainSkeleton() {
<Skeleton className="w-full h-300" />
<main>
<Tabs className="mb-8">
<TabLink to={getTrustCenterUrl("overview")}>{__("Overview")}</TabLink>
<TabLink to={getTrustCenterUrl("documents")}>{__("Documents")}</TabLink>
<TabLink to={getTrustCenterUrl("subprocessors")}>
<TabLink to={getCompliancePortalUrl("overview")}>{__("Overview")}</TabLink>
<TabLink to={getCompliancePortalUrl("documents")}>{__("Documents")}</TabLink>
<TabLink to={getCompliancePortalUrl("subprocessors")}>
{__("Subprocessors")}
</TabLink>
<TabLink to={getTrustCenterUrl("updates")}>{__("Updates")}</TabLink>
<TabLink to={getCompliancePortalUrl("updates")}>{__("Updates")}</TabLink>
</Tabs>
<TabSkeleton />
</main>

View File

@@ -20,15 +20,15 @@
import { useContext } from "react";
import { TrustCenterContext } from "#/providers/TrustCenterProvider";
import { CompliancePortalContext } from "#/providers/CompliancePortalProvider";
export function useTrustCenter(): {
export function useCompliancePortal(): {
id: string;
title: string;
} {
const context = useContext(TrustCenterContext);
const context = useContext(CompliancePortalContext);
if (!context) {
throw new Error("useTrustCenter must be used within a TrustCenterProvider");
throw new Error("useCompliancePortal must be used within a CompliancePortalProvider");
}
return context;
}

View File

@@ -65,9 +65,9 @@ const reportMutation = graphql`
const fileMutation = graphql`
mutation useRequestAccessCallback_fileMutation(
$input: RequestTrustCenterFileAccessInput!
$input: RequestCompliancePortalFileAccessInput!
) {
requestTrustCenterFileAccess(input: $input) {
requestCompliancePortalFileAccess(input: $input) {
file {
access {
id
@@ -81,7 +81,7 @@ const fileMutation = graphql`
const allMutation = graphql`
mutation useRequestAccessCallback_allMutation {
requestAllAccesses {
trustCenterAccess {
compliancePortalAccess {
id
}
}
@@ -164,7 +164,7 @@ export function useRequestAccessCallback() {
searchParams.delete("request-file-id");
void requestFileAccess({
variables: {
input: { trustCenterFileId: fileId },
input: { compliancePortalFileId: fileId },
},
onCompleted: (_, errors) => {
if (errors?.length) {

View File

@@ -26,42 +26,42 @@ import { Outlet } from "react-router";
import { OrganizationSidebar } from "#/components/OrganizationSidebar";
import { useRequestAccessCallback } from "#/hooks/useRequestAccessCallback";
import { TrustCenterProvider } from "#/providers/TrustCenterProvider";
import type { TrustGraphCurrentQuery } from "#/queries/__generated__/TrustGraphCurrentQuery.graphql";
import { currentTrustGraphQuery } from "#/queries/TrustGraph";
import { CompliancePortalProvider } from "#/providers/CompliancePortalProvider";
import type { CompliancePortalGraphCurrentQuery } from "#/queries/__generated__/CompliancePortalGraphCurrentQuery.graphql";
import { currentCompliancePortalGraphQuery } from "#/queries/CompliancePortalGraph";
type Props = {
queryRef: PreloadedQuery<TrustGraphCurrentQuery>;
queryRef: PreloadedQuery<CompliancePortalGraphCurrentQuery>;
};
export function MainLayout(props: Props) {
const { __ } = useTranslate();
const data = usePreloadedQuery<TrustGraphCurrentQuery>(currentTrustGraphQuery, props.queryRef);
const trustCenter = data.currentTrustCenter;
const data = usePreloadedQuery<CompliancePortalGraphCurrentQuery>(currentCompliancePortalGraphQuery, props.queryRef);
const compliancePortal = data.currentCompliancePortal;
const isAuthenticated = data.viewer != null;
const theme = useSystemTheme();
useFavicon(
theme === "dark"
? (trustCenter?.darkLogo?.downloadUrl ?? trustCenter?.logo?.downloadUrl)
: trustCenter?.logo?.downloadUrl,
? (compliancePortal?.darkLogo?.downloadUrl ?? compliancePortal?.logo?.downloadUrl)
: compliancePortal?.logo?.downloadUrl,
);
useRequestAccessCallback();
return (
<TrustCenterProvider trustCenter={trustCenter}>
<CompliancePortalProvider compliancePortal={compliancePortal}>
<div className="grid grid-cols-1 max-w-[1280px] mx-4 pt-6 gap-4 lg:mx-auto lg:gap-10 lg:pt-20 lg:grid-cols-[400px_1fr] lg:items-start ">
<OrganizationSidebar trustCenter={trustCenter} isAuthenticated={isAuthenticated} />
<OrganizationSidebar compliancePortal={compliancePortal} isAuthenticated={isAuthenticated} />
<main>
<Tabs className="mb-8">
<TabLink to="/overview">{__("Overview")}</TabLink>
<TabLink to="/documents">{__("Documents")}</TabLink>
{trustCenter.subprocessorInfo.totalCount > 0
{compliancePortal.subprocessorInfo.totalCount > 0
&& <TabLink to="/subprocessors">{__("Subprocessors")}</TabLink>}
<TabLink to="/updates">{__("Updates")}</TabLink>
</Tabs>
<Outlet context={{ trustCenter }} />
<Outlet context={{ compliancePortal }} />
</main>
</div>
@@ -73,6 +73,6 @@ export function MainLayout(props: Props) {
{" "}
<Logo withPicto className="h-6" />
</a>
</TrustCenterProvider>
</CompliancePortalProvider>
);
}

View File

@@ -43,15 +43,15 @@ import { PDFPreview } from "#/components/PDFPreview";
import type { DocumentPageExportDocumentMutation } from "./__generated__/DocumentPageExportDocumentMutation.graphql";
import type { DocumentPageExportReportMutation } from "./__generated__/DocumentPageExportReportMutation.graphql";
import type { DocumentPageExportTrustCenterFileMutation } from "./__generated__/DocumentPageExportTrustCenterFileMutation.graphql";
import type { DocumentPageExportCompliancePortalFileMutation } from "./__generated__/DocumentPageExportCompliancePortalFileMutation.graphql";
import type { DocumentPageQuery as DocumentPageQueryType } from "./__generated__/DocumentPageQuery.graphql";
import type { DocumentPageRequestDocumentAccessMutation } from "./__generated__/DocumentPageRequestDocumentAccessMutation.graphql";
import type { DocumentPageRequestReportAccessMutation } from "./__generated__/DocumentPageRequestReportAccessMutation.graphql";
import type { DocumentPageRequestTrustCenterFileAccessMutation } from "./__generated__/DocumentPageRequestTrustCenterFileAccessMutation.graphql";
import type { DocumentPageRequestCompliancePortalFileAccessMutation } from "./__generated__/DocumentPageRequestCompliancePortalFileAccessMutation.graphql";
export const documentPageQuery = graphql`
query DocumentPageQuery($alias: String!) {
currentTrustCenter {
currentCompliancePortal {
logo {
downloadUrl
}
@@ -70,7 +70,7 @@ export const documentPageQuery = graphql`
status
}
}
... on TrustCenterFile {
... on CompliancePortalFile {
id
name
isUserAuthorized
@@ -102,11 +102,11 @@ const exportDocumentMutation = graphql`
}
`;
const exportTrustCenterFileMutation = graphql`
mutation DocumentPageExportTrustCenterFileMutation(
$input: ExportTrustCenterFileInput!
const exportCompliancePortalFileMutation = graphql`
mutation DocumentPageExportCompliancePortalFileMutation(
$input: ExportCompliancePortalFileInput!
) {
exportTrustCenterFile(input: $input) {
exportCompliancePortalFile(input: $input) {
data
}
}
@@ -137,11 +137,11 @@ const requestDocumentAccessMutation = graphql`
}
`;
const requestTrustCenterFileAccessMutation = graphql`
mutation DocumentPageRequestTrustCenterFileAccessMutation(
$input: RequestTrustCenterFileAccessInput!
const requestCompliancePortalFileAccessMutation = graphql`
mutation DocumentPageRequestCompliancePortalFileAccessMutation(
$input: RequestCompliancePortalFileAccessInput!
) {
requestTrustCenterFileAccess(input: $input) {
requestCompliancePortalFileAccess(input: $input) {
file {
access {
id
@@ -192,7 +192,7 @@ function getNodeTitle(node: DocumentPageQueryType["response"]["aliasedNode"]): s
switch (node.__typename) {
case "Document":
return node.title;
case "TrustCenterFile":
case "CompliancePortalFile":
return node.name;
case "AuditReport":
return node.fileName;
@@ -204,7 +204,7 @@ function getNodeTitle(node: DocumentPageQueryType["response"]["aliasedNode"]): s
function getNodeId(node: DocumentPageQueryType["response"]["aliasedNode"]): string | undefined {
switch (node.__typename) {
case "Document":
case "TrustCenterFile":
case "CompliancePortalFile":
case "AuditReport":
return node.id;
default:
@@ -224,12 +224,12 @@ export function DocumentPage({ queryRef }: Props) {
const [exportError, setExportError] = useState<string | null>(null);
const data = usePreloadedQuery<DocumentPageQueryType>(documentPageQuery, queryRef);
const trustCenter = data.currentTrustCenter;
const compliancePortal = data.currentCompliancePortal;
const node = data.aliasedNode;
if (
node.__typename !== "Document"
&& node.__typename !== "TrustCenterFile"
&& node.__typename !== "CompliancePortalFile"
&& node.__typename !== "AuditReport"
) {
throw new Error(`Unexpected node type: ${node.__typename}`);
@@ -239,19 +239,19 @@ export function DocumentPage({ queryRef }: Props) {
const nodeId = getNodeId(node);
const logoFileUrl = theme === "dark"
? (trustCenter?.darkLogo?.downloadUrl ?? trustCenter?.logo?.downloadUrl)
: trustCenter?.logo?.downloadUrl;
? (compliancePortal?.darkLogo?.downloadUrl ?? compliancePortal?.logo?.downloadUrl)
: compliancePortal?.logo?.downloadUrl;
const [exportDocument, isExportingDocument]
= useMutation<DocumentPageExportDocumentMutation>(exportDocumentMutation);
const [exportFile, isExportingFile]
= useMutation<DocumentPageExportTrustCenterFileMutation>(exportTrustCenterFileMutation);
= useMutation<DocumentPageExportCompliancePortalFileMutation>(exportCompliancePortalFileMutation);
const [exportReport, isExportingReport]
= useMutation<DocumentPageExportReportMutation>(exportReportMutation);
const [requestAccess, isRequestingAccess]
= useMutation<DocumentPageRequestDocumentAccessMutation>(requestDocumentAccessMutation);
const [requestFileAccess, isRequestingFileAccess]
= useMutation<DocumentPageRequestTrustCenterFileAccessMutation>(requestTrustCenterFileAccessMutation);
= useMutation<DocumentPageRequestCompliancePortalFileAccessMutation>(requestCompliancePortalFileAccessMutation);
const [requestReportAccess, isRequestingReportAccess]
= useMutation<DocumentPageRequestReportAccessMutation>(requestReportAccessMutation);
@@ -291,15 +291,15 @@ export function DocumentPage({ queryRef }: Props) {
onError,
});
break;
case "TrustCenterFile":
case "CompliancePortalFile":
exportFile({
variables: { input: { trustCenterFileId: node.id } },
variables: { input: { compliancePortalFileId: node.id } },
onCompleted: (response, errors) => {
if (onCompletedErrors(errors)) return;
if (isPdfDataUri(response.exportTrustCenterFile.data)) {
setPdfData(response.exportTrustCenterFile.data);
if (isPdfDataUri(response.exportCompliancePortalFile.data)) {
setPdfData(response.exportCompliancePortalFile.data);
} else {
setFileData(response.exportTrustCenterFile.data);
setFileData(response.exportCompliancePortalFile.data);
}
},
onError,
@@ -359,9 +359,9 @@ export function DocumentPage({ queryRef }: Props) {
onError,
});
break;
case "TrustCenterFile":
case "CompliancePortalFile":
requestFileAccess({
variables: { input: { trustCenterFileId: node.id } },
variables: { input: { compliancePortalFileId: node.id } },
onCompleted,
onError,
});
@@ -378,7 +378,7 @@ export function DocumentPage({ queryRef }: Props) {
const isRequesting = isRequestingAccess || isRequestingFileAccess || isRequestingReportAccess;
const hasRequested = node.access?.status === "REQUESTED";
const isPdf = node.__typename === "Document" || node.__typename === "AuditReport" || (node.__typename === "TrustCenterFile" && pdfData !== null);
const isPdf = node.__typename === "Document" || node.__typename === "AuditReport" || (node.__typename === "CompliancePortalFile" && pdfData !== null);
const handleDownload = () => {
if (!fileData || !nodeTitle) return;

View File

@@ -26,25 +26,25 @@ import { type PreloadedQuery, usePreloadedQuery } from "react-relay";
import { DocumentRow } from "#/components/DocumentRow";
import { RowHeader } from "#/components/RowHeader";
import { Rows } from "#/components/Rows";
import { TrustCenterFileRow } from "#/components/TrustCenterFileRow";
import { CompliancePortalFileRow } from "#/components/CompliancePortalFileRow";
import { documentTypeLabel } from "#/helpers/documents";
import type { TrustGraphCurrentDocumentsQuery } from "#/queries/__generated__/TrustGraphCurrentDocumentsQuery.graphql";
import { currentTrustDocumentsQuery } from "#/queries/TrustGraph";
import type { CompliancePortalGraphCurrentDocumentsQuery } from "#/queries/__generated__/CompliancePortalGraphCurrentDocumentsQuery.graphql";
import { currentTrustDocumentsQuery } from "#/queries/CompliancePortalGraph";
type Props = {
queryRef: PreloadedQuery<TrustGraphCurrentDocumentsQuery>;
queryRef: PreloadedQuery<CompliancePortalGraphCurrentDocumentsQuery>;
};
export function DocumentsPage({ queryRef }: Props) {
const { __ } = useTranslate();
const data = usePreloadedQuery<TrustGraphCurrentDocumentsQuery>(
const data = usePreloadedQuery<CompliancePortalGraphCurrentDocumentsQuery>(
currentTrustDocumentsQuery,
queryRef,
);
const documents
= data.currentTrustCenter?.documents.edges.map(edge => edge.node) ?? [];
= data.currentCompliancePortal?.documents.edges.map(edge => edge.node) ?? [];
const files
= data.currentTrustCenter?.trustCenterFiles.edges.map(edge => edge.node) ?? [];
= data.currentCompliancePortal?.compliancePortalFiles.edges.map(edge => edge.node) ?? [];
const documentsPerType = groupBy(documents, document =>
documentTypeLabel(document.documentType, __),
);
@@ -68,7 +68,7 @@ export function DocumentsPage({ queryRef }: Props) {
<Fragment key={category}>
<RowHeader>{category}</RowHeader>
{files.map(file => (
<TrustCenterFileRow key={file.id} file={file} />
<CompliancePortalFileRow key={file.id} file={file} />
))}
</Fragment>
))}

View File

@@ -46,7 +46,7 @@ export const ndaPageQuery = graphql`
# eslint-disable-next-line relay/unused-fields
id
}
currentTrustCenter @required(action: THROW) {
currentCompliancePortal @required(action: THROW) {
title
nonDisclosureAgreement {
fileName
@@ -61,7 +61,7 @@ export const ndaPageQuery = graphql`
`;
const ndaPageFragment = graphql`
fragment NDAPageFragment on TrustCenter
fragment NDAPageFragment on CompliancePortal
@refetchable(queryName: "NDAPageRefetchQuery") {
nonDisclosureAgreement @required(action: THROW) {
viewerSignature {
@@ -108,12 +108,12 @@ export function NDAPage(props: {
const isDesktop = !isMobile;
const queryData = usePreloadedQuery<NDAPageQueryType>(ndaPageQuery, props.queryRef);
const trustCenter = queryData.currentTrustCenter;
const compliancePortal = queryData.currentCompliancePortal;
const viewer = queryData.viewer;
const [data, refetch] = useRefetchableFragment<NDAPageRefetchQuery, NDAPageFragment$key>(
ndaPageFragment,
trustCenter,
compliancePortal,
);
const ndaSignature = data.nonDisclosureAgreement.viewerSignature;
@@ -217,7 +217,7 @@ export function NDAPage(props: {
});
};
const nda = trustCenter.nonDisclosureAgreement;
const nda = compliancePortal.nonDisclosureAgreement;
if (!viewer) {
return <Navigate to="/connect" replace />;
}
@@ -244,7 +244,7 @@ export function NDAPage(props: {
__(
"%s requires you to sign an NDA before accessing compliance documents.",
),
trustCenter.title,
compliancePortal.title,
)}
</p>
{isMobile && nda?.fileUrl && (

View File

@@ -19,7 +19,7 @@
// SOFTWARE.
import {
getTrustCenterUrl,
getCompliancePortalUrl,
groupBy,
objectEntries,
sprintf,
@@ -36,9 +36,9 @@ import { DocumentRow } from "#/components/DocumentRow";
import { RowHeader } from "#/components/RowHeader";
import { Rows } from "#/components/Rows";
import { SubprocessorRow } from "#/components/SubprocessorRow";
import { TrustCenterFileRow } from "#/components/TrustCenterFileRow";
import { CompliancePortalFileRow } from "#/components/CompliancePortalFileRow";
import { documentTypeLabel } from "#/helpers/documents";
import type { TrustGraphCurrentQuery$data } from "#/queries/__generated__/TrustGraphCurrentQuery.graphql";
import type { CompliancePortalGraphCurrentQuery$data } from "#/queries/__generated__/CompliancePortalGraphCurrentQuery.graphql";
import type {
OverviewPageFragment$data,
@@ -46,7 +46,7 @@ import type {
} from "./__generated__/OverviewPageFragment.graphql";
const overviewFragment = graphql`
fragment OverviewPageFragment on TrustCenter {
fragment OverviewPageFragment on CompliancePortal {
references(first: 14) {
edges {
node {
@@ -77,12 +77,12 @@ const overviewFragment = graphql`
}
}
}
trustCenterFiles(first: 5) {
compliancePortalFiles(first: 5) {
edges {
node {
id
category
...TrustCenterFileRowFragment
...CompliancePortalFileRowFragment
}
}
}
@@ -90,26 +90,26 @@ const overviewFragment = graphql`
`;
export function OverviewPage() {
const { trustCenter } = useOutletContext<{
trustCenter: OverviewPageFragment$key
& TrustGraphCurrentQuery$data["currentTrustCenter"];
const { compliancePortal } = useOutletContext<{
compliancePortal: OverviewPageFragment$key
& CompliancePortalGraphCurrentQuery$data["currentCompliancePortal"];
}>();
const fragment = useFragment(overviewFragment, trustCenter);
const fragment = useFragment(overviewFragment, compliancePortal);
return (
<div>
<References
references={fragment.references.edges.map(edge => edge.node)}
/>
<Documents
audits={trustCenter.audits.edges}
audits={compliancePortal.audits.edges}
documents={fragment.documents.edges}
files={fragment.trustCenterFiles.edges}
url={getTrustCenterUrl("documents")}
files={fragment.compliancePortalFiles.edges}
url={getCompliancePortalUrl("documents")}
/>
<Subprocessors
title={trustCenter.title}
title={compliancePortal.title}
subprocessors={fragment.subprocessors.edges}
url={getTrustCenterUrl("subprocessors")}
url={getCompliancePortalUrl("subprocessors")}
/>
</div>
);
@@ -122,9 +122,9 @@ function Documents({
url,
}: {
documents: OverviewPageFragment$data["documents"]["edges"];
files: OverviewPageFragment$data["trustCenterFiles"]["edges"];
files: OverviewPageFragment$data["compliancePortalFiles"]["edges"];
audits: NonNullable<
TrustGraphCurrentQuery$data["currentTrustCenter"]
CompliancePortalGraphCurrentQuery$data["currentCompliancePortal"]
>["audits"]["edges"];
url: string;
}) {
@@ -171,7 +171,7 @@ function Documents({
<Fragment key={category}>
<RowHeader>{category}</RowHeader>
{files.map(file => (
<TrustCenterFileRow key={file.id} file={file} />
<CompliancePortalFileRow key={file.id} file={file} />
))}
</Fragment>
))}

View File

@@ -24,18 +24,18 @@ import { type PreloadedQuery, usePreloadedQuery } from "react-relay";
import { Rows } from "#/components/Rows";
import { SubprocessorRow } from "#/components/SubprocessorRow";
import type { TrustGraphCurrentSubprocessorsQuery } from "#/queries/__generated__/TrustGraphCurrentSubprocessorsQuery.graphql";
import { currentTrustSubprocessorsQuery } from "#/queries/TrustGraph";
import type { CompliancePortalGraphCurrentSubprocessorsQuery } from "#/queries/__generated__/CompliancePortalGraphCurrentSubprocessorsQuery.graphql";
import { currentTrustSubprocessorsQuery } from "#/queries/CompliancePortalGraph";
type Props = {
queryRef: PreloadedQuery<TrustGraphCurrentSubprocessorsQuery>;
queryRef: PreloadedQuery<CompliancePortalGraphCurrentSubprocessorsQuery>;
};
export function SubprocessorsPage({ queryRef }: Props) {
const { __ } = useTranslate();
const data = usePreloadedQuery<TrustGraphCurrentSubprocessorsQuery>(currentTrustSubprocessorsQuery, queryRef);
const data = usePreloadedQuery<CompliancePortalGraphCurrentSubprocessorsQuery>(currentTrustSubprocessorsQuery, queryRef);
const subprocessors
= data.currentTrustCenter?.subprocessors.edges.map(edge => edge.node) ?? [];
= data.currentCompliancePortal?.subprocessors.edges.map(edge => edge.node) ?? [];
const hasAnyCountries = subprocessors.some(subprocessor => subprocessor.countries.length > 0);
@@ -45,7 +45,7 @@ export function SubprocessorsPage({ queryRef }: Props) {
<p className="text-sm text-txt-secondary mb-4">
{sprintf(
__("Third-party subprocessors %s work with:"),
data.currentTrustCenter?.title ?? "",
data.currentCompliancePortal?.title ?? "",
)}
</p>
<Rows>

View File

@@ -29,7 +29,7 @@ import type { UpdatesPageQuery } from "#/pages/__generated__/UpdatesPageQuery.gr
export const currentTrustUpdatesQuery = graphql`
query UpdatesPageQuery {
currentTrustCenter {
currentCompliancePortal {
id
updates(first: 50) {
edges {
@@ -57,7 +57,7 @@ export function UpdatesPage({ queryRef }: Props) {
);
const items
= data.currentTrustCenter?.updates.edges.map(e => e.node) ?? [];
= data.currentCompliancePortal?.updates.edges.map(e => e.node) ?? [];
return (
<div>

View File

@@ -28,7 +28,7 @@ import type { AuthLayoutQuery } from "./__generated__/AuthLayoutQuery.graphql";
export const authLayoutQuery = graphql`
query AuthLayoutQuery {
currentTrustCenter @required(action: THROW) {
currentCompliancePortal @required(action: THROW) {
logo {
downloadUrl
}
@@ -42,7 +42,7 @@ export const authLayoutQuery = graphql`
export function AuthLayout(props: { queryRef: PreloadedQuery<AuthLayoutQuery> }) {
const { queryRef } = props;
const { currentTrustCenter: compliancePage } = usePreloadedQuery<AuthLayoutQuery>(authLayoutQuery, queryRef);
const { currentCompliancePortal: compliancePage } = usePreloadedQuery<AuthLayoutQuery>(authLayoutQuery, queryRef);
const theme = useSystemTheme();
const logoFileUrl = theme === "dark"

View File

@@ -30,7 +30,7 @@ import type { ConnectPageQuery } from "./__generated__/ConnectPageQuery.graphql"
export const connectPageQuery = graphql`
query ConnectPageQuery {
currentTrustCenter @required(action: THROW) {
currentCompliancePortal @required(action: THROW) {
title
}
}
@@ -45,7 +45,7 @@ export function ConnectPage(props: {
const safeContinueUrl = useSafeContinueUrl();
const {
currentTrustCenter: { title },
currentCompliancePortal: { title },
} = usePreloadedQuery<ConnectPageQuery>(connectPageQuery, queryRef);
usePageTitle(__(`Connect to ${title}'s Compliance Page`));

View File

@@ -20,22 +20,22 @@
import { createContext, type ReactNode } from "react";
import type { TrustGraphCurrentQuery$data } from "#/queries/__generated__/TrustGraphCurrentQuery.graphql";
import type { CompliancePortalGraphCurrentQuery$data } from "#/queries/__generated__/CompliancePortalGraphCurrentQuery.graphql";
export const TrustCenterContext = createContext<
TrustGraphCurrentQuery$data["currentTrustCenter"] | null
export const CompliancePortalContext = createContext<
CompliancePortalGraphCurrentQuery$data["currentCompliancePortal"] | null
>(null);
export const TrustCenterProvider = ({
export const CompliancePortalProvider = ({
children,
trustCenter,
compliancePortal,
}: {
children: ReactNode;
trustCenter: TrustGraphCurrentQuery$data["currentTrustCenter"];
compliancePortal: CompliancePortalGraphCurrentQuery$data["currentCompliancePortal"];
}) => {
return (
<TrustCenterContext.Provider value={trustCenter}>
<CompliancePortalContext.Provider value={compliancePortal}>
{children}
</TrustCenterContext.Provider>
</CompliancePortalContext.Provider>
);
};

View File

@@ -23,12 +23,12 @@ import { graphql } from "relay-runtime";
/* eslint-disable relay/unused-fields, relay/must-colocate-fragment-spreads */
// Queries for custom domain (subdomain) approach
export const currentTrustGraphQuery = graphql`
query TrustGraphCurrentQuery {
export const currentCompliancePortalGraphQuery = graphql`
query CompliancePortalGraphCurrentQuery {
viewer {
id
}
currentTrustCenter @required(action: THROW) {
currentCompliancePortal @required(action: THROW) {
id
slug
title
@@ -91,8 +91,8 @@ export const currentTrustGraphQuery = graphql`
`;
export const currentTrustDocumentsQuery = graphql`
query TrustGraphCurrentDocumentsQuery {
currentTrustCenter {
query CompliancePortalGraphCurrentDocumentsQuery {
currentCompliancePortal {
id
documents(first: 50) {
edges {
@@ -103,12 +103,12 @@ export const currentTrustDocumentsQuery = graphql`
}
}
}
trustCenterFiles(first: 50) {
compliancePortalFiles(first: 50) {
edges {
node {
id
category
...TrustCenterFileRowFragment
...CompliancePortalFileRowFragment
}
}
}
@@ -117,8 +117,8 @@ export const currentTrustDocumentsQuery = graphql`
`;
export const currentTrustSubprocessorsQuery = graphql`
query TrustGraphCurrentSubprocessorsQuery {
currentTrustCenter {
query CompliancePortalGraphCurrentSubprocessorsQuery {
currentCompliancePortal {
id
subprocessors(first: 50) {
edges {

View File

@@ -36,9 +36,9 @@ import { SubprocessorsPage } from "#/pages/SubprocessorsPage";
import { currentTrustUpdatesQuery, UpdatesPage } from "#/pages/UpdatesPage";
import {
currentTrustDocumentsQuery,
currentTrustGraphQuery,
currentCompliancePortalGraphQuery,
currentTrustSubprocessorsQuery,
} from "#/queries/TrustGraph";
} from "#/queries/CompliancePortalGraph";
import { DocumentPageErrorBoundary } from "./components/DocumentPageErrorBoundary";
import { PageError } from "./components/PageError";
@@ -79,7 +79,7 @@ const routes = [
{
path: "/overview",
loader: loaderFromQueryLoader(() =>
loadQuery(consoleEnvironment, currentTrustGraphQuery, {}),
loadQuery(consoleEnvironment, currentCompliancePortalGraphQuery, {}),
),
Component: withQueryRef(MainLayout),
Fallback: MainSkeleton,
@@ -100,7 +100,7 @@ const routes = [
{
path: "/documents",
loader: loaderFromQueryLoader(() =>
loadQuery(consoleEnvironment, currentTrustGraphQuery, {}),
loadQuery(consoleEnvironment, currentCompliancePortalGraphQuery, {}),
),
Component: withQueryRef(MainLayout),
Fallback: MainSkeleton,
@@ -119,7 +119,7 @@ const routes = [
{
path: "/subprocessors",
loader: loaderFromQueryLoader(() =>
loadQuery(consoleEnvironment, currentTrustGraphQuery, {}),
loadQuery(consoleEnvironment, currentCompliancePortalGraphQuery, {}),
),
Component: withQueryRef(MainLayout),
Fallback: MainSkeleton,
@@ -138,7 +138,7 @@ const routes = [
{
path: "/updates",
loader: loaderFromQueryLoader(() =>
loadQuery(consoleEnvironment, currentTrustGraphQuery, {}),
loadQuery(consoleEnvironment, currentCompliancePortalGraphQuery, {}),
),
Component: withQueryRef(MainLayout),
Fallback: MainSkeleton,