From 31ac12b418627da94ef117703acf1266cffd8d4a Mon Sep 17 00:00:00 2001 From: Mannu Date: Mon, 11 May 2026 00:48:00 +0530 Subject: [PATCH] Consolidate settings and add familyName to FamilyProvider - Settings: Merge Family Settings + Family + Family Members into one Family section - Add familyName to FamilyProvider from session API - Show family name, plan, members count, children count in one place - Show members list with roles - Remove redundant sections Co-Authored-By: Claude Opus 4.7 --- src/app/FamilyProvider.tsx | 5 ++ src/app/settings/page.tsx | 117 ++++++++++++++++--------------------- 2 files changed, 56 insertions(+), 66 deletions(-) diff --git a/src/app/FamilyProvider.tsx b/src/app/FamilyProvider.tsx index bf56eb6..f12bf9a 100644 --- a/src/app/FamilyProvider.tsx +++ b/src/app/FamilyProvider.tsx @@ -13,6 +13,7 @@ interface Child { interface FamilyContextType { familyId: string | null; + familyName: string | null; childId: string | null; child: Child | null; children: Child[]; @@ -23,6 +24,7 @@ interface FamilyContextType { const FamilyContext = createContext({ familyId: null, + familyName: null, childId: null, child: null, children: [], @@ -38,6 +40,7 @@ export function useFamily() { export function FamilyProvider({ children: providerChildren }: { children: ReactNode }) { const router = useRouter(); const [familyId, setFamilyId] = useState(null); + const [familyName, setFamilyName] = useState(null); const [childId, setChildId] = useState(null); const [child, setChild] = useState(null); const [children, setChildren] = useState([]); @@ -96,6 +99,7 @@ export function FamilyProvider({ children: providerChildren }: { children: React } setFamilyId(familyId); + setFamilyName(sessionData.familyName || "My Family"); setTier(sessionData.tier || "free"); setMemberCount(2); } catch (err) { @@ -112,6 +116,7 @@ export function FamilyProvider({ children: providerChildren }: { children: React ([]); const [invites, setInvites] = useState([]); - const [showAddInvite, setShowAddInvite] = useState(false); const [inviteEmail, setInviteEmail] = useState(""); const [inviteRole, setInviteRole] = useState("caregiver"); const [inviteLoading, setInviteLoading] = useState(false); - const [familyName, setFamilyName] = useState(""); // Check if can invite more members const canInvite = tier === "pro" || memberCount < 2; + // Family name from provider or fallback + const familyName = providerFamilyName || "My Family"; + const themeOptions = [ { value: "light", label: "Light" }, { value: "dark", label: "Dark" }, @@ -50,8 +50,10 @@ export default function SettingsPage() { ] as const; useEffect(() => { - fetchInvites(); - fetchMembers(); + if (familyId) { + fetchMembers(); + fetchInvites(); + } }, [familyId]); const fetchMembers = async () => { @@ -129,7 +131,7 @@ export default function SettingsPage() { โ†’ - {/* Family - Collapsible */} + {/* Family - Single consolidated section */}
{familyOpen && ( -
- setFamilyName(e.target.value)} - placeholder="Family name" - className="w-full p-2 border rounded-lg text-sm" - /> +
+ {/* Family Info */}
- Plan: {tier} +
+
{familyName}
+
+ {tier === "pro" ? "Pro Plan" : "Free Plan"} ยท {members.length} member{members.length !== 1 ? "s" : ""} ยท {children?.length || 0} child{children?.length !== 1 ? "ren" : ""} +
+
{tier === "free" && ( - + )}
+ + {/* Family Members */} +
+
Family Members
+ {members.length > 0 ? ( +
+ {members.map((member) => ( +
+
+
{member.displayName || member.name || member.email}
+
{member.email}
+
+ + {member.role} + +
+ ))} +
+ ) : ( +

No family members

+ )} +
+ + {/* Manage Children */} + + Manage Children + โ†’ +
)}
- -
- ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง -
Family
-
- โ†’ - - {/* Invite Members - Collapsible */} + {/* Invite Members */}
โ–ผ @@ -237,44 +259,7 @@ export default function SettingsPage() { )}
- {/* Family Members - Collapsible */} -
- - - {membersOpen && ( -
- {members.length > 0 ? ( -
- {members.map((member) => ( -
-
-
{member.displayName || member.name}
-
{member.email}
-
- - {member.role} - -
- ))} -
- ) : ( -

No members yet

- )} -
- )} -
- - {/* Theme - Collapsible */} + {/* Theme */}