mirror of
https://github.com/hanzo-apps/dataroom.git
synced 2026-10-30 14:47:36 +00:00
108 files: README, marketing copy, page titles, meta tags, footer text, email templates, .env.example, UI strings. URLs swapped from papermark.com/papermark.io to dataroom.hanzo.ai. Internal identifiers left intact per repo policy: localStorage keys (papermark.email/papermark.name/last_papermark_login — changing them logs users out), type field names (papermarkUserId), internal helper symbols (PAPERMARK_HEADERS, PapermarkSparkle component, isPapermarkUrl helper), internal-only filenames. LLM.md retains 'Upstream: Papermark' attribution line. Per-locale .po translations regenerate from source on the next lingui-extract CI run. DB migrations untouched (append-only history; rewriting them breaks installed schemas). LICENSE stays AGPL-3.0.
109 lines
3.4 KiB
TypeScript
109 lines
3.4 KiB
TypeScript
import {
|
|
Body,
|
|
Button,
|
|
Container,
|
|
Head,
|
|
Html,
|
|
Preview,
|
|
Section,
|
|
Tailwind,
|
|
Text,
|
|
} from "@react-email/components";
|
|
|
|
import { Footer } from "./shared/footer";
|
|
|
|
function formatExpirationTime(expiresAt?: string): string {
|
|
if (!expiresAt) return "3 days";
|
|
|
|
const expires = new Date(expiresAt);
|
|
const now = new Date();
|
|
const diffMs = expires.getTime() - now.getTime();
|
|
const diffHours = Math.floor(diffMs / (1000 * 60 * 60));
|
|
const diffDays = Math.floor(diffHours / 24);
|
|
|
|
if (diffDays > 0) {
|
|
return `${diffDays} day${diffDays > 1 ? "s" : ""}`;
|
|
} else if (diffHours > 0) {
|
|
return `${diffHours} hour${diffHours > 1 ? "s" : ""}`;
|
|
}
|
|
return "less than an hour";
|
|
}
|
|
|
|
export default function DownloadReady({
|
|
dataroomName = "Dataroom",
|
|
downloadUrl = "https://dataroom.hanzo.ai",
|
|
email = "[email protected]",
|
|
expiresAt,
|
|
isViewer = false,
|
|
}: {
|
|
dataroomName?: string;
|
|
downloadUrl?: string;
|
|
email: string;
|
|
expiresAt?: string;
|
|
isViewer?: boolean;
|
|
}) {
|
|
const expirationTime = formatExpirationTime(expiresAt);
|
|
|
|
return (
|
|
<Html>
|
|
<Head />
|
|
<Preview>Your {dataroomName} download is ready</Preview>
|
|
<Tailwind>
|
|
<Body className="mx-auto my-auto bg-white font-sans">
|
|
<Container className="mx-auto my-10 w-[465px] p-5">
|
|
<Text className="mx-0 mb-8 mt-4 p-0 text-center text-2xl font-normal">
|
|
<span className="font-bold tracking-tighter">Hanzo Dataroom</span>
|
|
</Text>
|
|
<Text className="text-sm leading-6 text-black">
|
|
Your download of <strong>{dataroomName}</strong> is ready!
|
|
</Text>
|
|
<Text className="text-sm leading-6 text-black">
|
|
{isViewer
|
|
? "Click the button below to open your downloads page and get your files."
|
|
: "Click the button below to download your files. You'll need to be logged in to your Hanzo Dataroom account to access the download."}
|
|
</Text>
|
|
|
|
<Section className="my-8 text-center">
|
|
<Button
|
|
className="rounded bg-black text-center text-xs font-semibold text-white no-underline"
|
|
href={downloadUrl}
|
|
style={{ padding: "12px 20px" }}
|
|
>
|
|
Download Files
|
|
</Button>
|
|
</Section>
|
|
|
|
<Text className="text-sm leading-6 text-black">
|
|
Download details:
|
|
</Text>
|
|
<ul className="break-all text-sm leading-6 text-black">
|
|
<li className="text-sm leading-6 text-black">
|
|
Dataroom: {dataroomName}
|
|
</li>
|
|
<li className="text-sm leading-6 text-black">
|
|
Expires: in {expirationTime}
|
|
</li>
|
|
</ul>
|
|
<Text className="text-sm leading-6 text-black">
|
|
Best,
|
|
<br />
|
|
The Hanzo Dataroom Team
|
|
</Text>
|
|
<Footer
|
|
footerText={
|
|
<>
|
|
This email was intended for{" "}
|
|
<span className="text-black">{email}</span>. If you were not
|
|
expecting this email, you can ignore this email. If you have
|
|
any feedback or questions about this email, simply reply to
|
|
it.
|
|
</>
|
|
}
|
|
/>
|
|
</Container>
|
|
</Body>
|
|
</Tailwind>
|
|
</Html>
|
|
);
|
|
}
|