diff --git a/frontend/app/trees/[id]/page.tsx b/frontend/app/trees/[id]/page.tsx
index f607b20..e4f75e6 100644
--- a/frontend/app/trees/[id]/page.tsx
+++ b/frontend/app/trees/[id]/page.tsx
@@ -122,23 +122,42 @@ export default function FamilyViewPage() {
load();
}
+ async function postRel(body: components["schemas"]["RelationshipCreate"]) {
+ await api.POST("/api/v1/trees/{tree_id}/relationships", {
+ params: { path: { tree_id: treeId } },
+ body,
+ });
+ }
+
+ // Create the relationship(s) connecting an (existing or new) person to anchor.
+ async function createLink(kind: AddKind, anchor: string, personId: string) {
+ if (kind === "parent") {
+ await postRel({ type: "parent_child", person_from_id: personId, person_to_id: anchor, qualifier: "biological" });
+ } else if (kind === "partner") {
+ await postRel({ type: "partnership", person_from_id: anchor, person_to_id: personId });
+ } else {
+ // child: link to anchor, and to anchor's spouse too (so both parents show)
+ await postRel({ type: "parent_child", person_from_id: anchor, person_to_id: personId, qualifier: "biological" });
+ const partners = partnersOf(anchor);
+ if (partners.length === 1) {
+ await postRel({ type: "parent_child", person_from_id: partners[0], person_to_id: personId, qualifier: "biological" });
+ }
+ }
+ }
+
+ async function linkExisting(personId: string) {
+ if (!adding) return;
+ await createLink(adding.kind, adding.anchor, personId);
+ setAdding(null);
+ setAddName("");
+ load();
+ }
+
async function submitAdd(e: React.FormEvent) {
e.preventDefault();
if (!adding || !addName.trim()) return;
const newId = await addPerson(addName);
- if (newId) {
- const { kind, anchor } = adding;
- const body =
- kind === "parent"
- ? { type: "parent_child" as const, person_from_id: newId, person_to_id: anchor, qualifier: "biological" as const }
- : kind === "child"
- ? { type: "parent_child" as const, person_from_id: anchor, person_to_id: newId, qualifier: "biological" as const }
- : { type: "partnership" as const, person_from_id: anchor, person_to_id: newId };
- await api.POST("/api/v1/trees/{tree_id}/relationships", {
- params: { path: { tree_id: treeId } },
- body,
- });
- }
+ if (newId) await createLink(adding.kind, adding.anchor, newId);
setAdding(null);
setAddName("");
load();
@@ -210,26 +229,45 @@ export default function FamilyViewPage() {
label: string;
}) =>
adding?.key === formKey ? (
-
) : (