diff --git a/geneit_app/src/api/MemberApi.ts b/geneit_app/src/api/MemberApi.ts
index 22e83ea..8cb80da 100644
--- a/geneit_app/src/api/MemberApi.ts
+++ b/geneit_app/src/api/MemberApi.ts
@@ -159,6 +159,10 @@ export class Member implements MemberDataApi {
? true
: false;
}
+
+ get hasNote(): boolean {
+ return (this.note?.length ?? 0) > 0;
+ }
}
export function fmtDate(d?: DateValue): string {
diff --git a/geneit_app/src/routes/family/FamilyMemberRoute.tsx b/geneit_app/src/routes/family/FamilyMemberRoute.tsx
index 5fd935e..9332444 100644
--- a/geneit_app/src/routes/family/FamilyMemberRoute.tsx
+++ b/geneit_app/src/routes/family/FamilyMemberRoute.tsx
@@ -576,9 +576,25 @@ export function MemberPage(p: {
)}
{/* Bio */}
-
- TODO
-
+ {(p.editing || member.hasNote) && (
+
+
+ {
+ member.note = v;
+ updatedMember();
+ }}
+ size={ServerApi.Config.constraints.member_note}
+ />
+
+
+ )}
{/* Spouse */}
diff --git a/geneit_app/src/widgets/forms/PropEdit.tsx b/geneit_app/src/widgets/forms/PropEdit.tsx
index e55efb6..217d359 100644
--- a/geneit_app/src/widgets/forms/PropEdit.tsx
+++ b/geneit_app/src/widgets/forms/PropEdit.tsx
@@ -11,6 +11,9 @@ export function PropEdit(p: {
onValueChange?: (newVal: string | undefined) => void;
size?: LenConstraint;
checkValue?: (s: string) => boolean;
+ multiline?: boolean;
+ minRows?: number;
+ maxRows?: number;
}): React.ReactElement {
if (((!p.editable && p.value) ?? "") === "") return <>>;
@@ -31,6 +34,9 @@ export function PropEdit(p: {
}}
variant={p.editable ? "filled" : "standard"}
style={{ width: "100%", marginBottom: "15px" }}
+ multiline={p.multiline}
+ minRows={p.minRows}
+ maxRows={p.maxRows}
error={
(p.checkValue &&
p.value &&