Files
supabase/apps/studio/components/interfaces/Organization/Documents/Documents.tsx
Stephen Morgan bd55ad23a6 feat: iso27001 certificate (#44963)
Edit: Can be merged, mgmt api deployed

Dashboard addition to frontend for access to the ISO 27001 certificate.

View for Team customers:
<img width="1737" height="1151" alt="image"
src="https://github.com/user-attachments/assets/cd62d24f-8b6e-4600-9ded-943a170cd124"
/>

Resolves SEC-799

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* ISO 27001 certificate added to Documents with a Download action,
confirmation modal, new-tab open on success, and error toast on failure.
* Users without billing permission see a no-permission view; users
missing entitlement see an “Upgrade to Team” prompt.

* **Refactor**
* Upgrade-to-Team flows for SOC2 and related upgrade UI standardized to
use the shared upgrade component.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2026-04-21 16:38:03 +12:00

85 lines
2.4 KiB
TypeScript

import { Fragment } from 'react'
import { CustomDocument } from './CustomDocument'
import { DPA } from './DPA'
import { HIPAA } from './HIPAA'
import { ISO27001 } from './ISO27001'
import { SecurityQuestionnaire } from './SecurityQuestionnaire'
import { SOC2 } from './SOC2'
import { TIA } from './TIA'
import { SupportLink } from '@/components/interfaces/Support/SupportLink'
import {
ScaffoldContainer,
ScaffoldDivider,
ScaffoldSection,
ScaffoldSectionDetail,
} from '@/components/layouts/Scaffold'
import { InlineLinkClassName } from '@/components/ui/InlineLink'
import { useCustomContent } from '@/hooks/custom-content/useCustomContent'
export const Documents = () => {
const { organizationLegalDocuments } = useCustomContent(['organization:legal_documents'])
if (Array.isArray(organizationLegalDocuments)) {
return organizationLegalDocuments.map((doc, idx) => {
return (
<Fragment key={doc.id}>
<CustomDocument doc={doc} />
{idx !== organizationLegalDocuments.length - 1 && <ScaffoldDivider />}
</Fragment>
)
})
}
return (
<>
<ScaffoldContainer id="dpa" className="px-6 xl:px-10">
<DPA />
</ScaffoldContainer>
<ScaffoldDivider />
<ScaffoldContainer id="tia" className="px-6 xl:px-10">
<TIA />
</ScaffoldContainer>
<ScaffoldDivider />
<ScaffoldContainer id="soc2" className="px-6 xl:px-10">
<SOC2 />
</ScaffoldContainer>
<ScaffoldDivider />
<ScaffoldContainer id="iso27001" className="px-6 xl:px-10">
<ISO27001 />
</ScaffoldContainer>
<ScaffoldDivider />
<ScaffoldContainer id="hipaa" className="px-6 xl:px-10">
<HIPAA />
</ScaffoldContainer>
<ScaffoldDivider />
<ScaffoldContainer id="security-questionnaire" className="px-6 xl:px-10">
<SecurityQuestionnaire />
</ScaffoldContainer>
<ScaffoldDivider />
<ScaffoldContainer className="px-6 xl:px-10">
<ScaffoldSection className="py-12">
<ScaffoldSectionDetail className="col-span-full">
<p className="text-sm text-foreground-light m-0">
<SupportLink className={InlineLinkClassName}>Submit a support request</SupportLink> if
you require additional documents for financial or tax reasons, such as a W-9 form.
</p>
</ScaffoldSectionDetail>
</ScaffoldSection>
</ScaffoldContainer>
</>
)
}