1164841950
- Add a top-level "Import" entry to the sidebar and a global /import page, so you can start a tree from a GEDCOM without first creating an empty one. The import flow now picks its destination (new tree, or an existing one) — the tree-scoped page reuses the same <GedcomImport> with a fixed destination and keeps Export. - Extract the sidebar chrome into <AppShell> and give small screens a working menu: a hamburger opens the full sidebar as a slide-in drawer (it was just a logo + "Trees" link before). Used by both /trees and /import. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
"use client";
|
|
|
|
import { useParams } from "next/navigation";
|
|
|
|
import { Button } from "@/components/ui/button";
|
|
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
|
|
import { GedcomImport } from "@/components/gedcom-import";
|
|
|
|
export default function TreeGedcomPage() {
|
|
const params = useParams<{ id: string }>();
|
|
const treeId = params.id;
|
|
|
|
async function exportGed() {
|
|
const resp = await fetch(`/api/v1/trees/${treeId}/gedcom/export`, { credentials: "include" });
|
|
if (!resp.ok) return;
|
|
const blob = await resp.blob();
|
|
const url = URL.createObjectURL(blob);
|
|
const a = document.createElement("a");
|
|
a.href = url;
|
|
a.download = "tree.ged";
|
|
a.click();
|
|
URL.revokeObjectURL(url);
|
|
}
|
|
|
|
return (
|
|
<div className="space-y-6">
|
|
<h1 className="text-2xl font-semibold">Import & export GEDCOM</h1>
|
|
|
|
<GedcomImport fixedTreeId={treeId} />
|
|
|
|
<Card>
|
|
<CardHeader>
|
|
<CardTitle className="text-base">Export this tree</CardTitle>
|
|
</CardHeader>
|
|
<CardContent className="space-y-3">
|
|
<p className="text-sm text-[var(--muted)]">
|
|
Download this tree as a GEDCOM file — people, relationships, events, and sources.
|
|
</p>
|
|
<Button variant="outline" onClick={exportGed}>
|
|
Download .ged
|
|
</Button>
|
|
</CardContent>
|
|
</Card>
|
|
</div>
|
|
);
|
|
}
|