From d69128a334fe2916a0421e9c2837eff9f65fc577 Mon Sep 17 00:00:00 2001 From: jableader Date: Sun, 2 Nov 2025 17:41:40 +1100 Subject: [PATCH] Fixed meal membership --- src/components/meals/EditMealPage.vue | 9 ++++++--- src/domain/members.ts | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 src/domain/members.ts diff --git a/src/components/meals/EditMealPage.vue b/src/components/meals/EditMealPage.vue index 77ce6e8..3841eb4 100644 --- a/src/components/meals/EditMealPage.vue +++ b/src/components/meals/EditMealPage.vue @@ -124,6 +124,8 @@ import { currentUser } from '@/api/auth' import { useAlert } from '@/composables/useAlert' import { parseRouteId } from '@/router/helpers' import type { Ingredient, Meal, MealRecipe } from '@/domain/types' +import { listMembers } from '@/api/households' +import { selectMyMember } from '@/domain/members' import { ago } from '@/dateformats' @@ -169,9 +171,10 @@ onBeforeMount(async () => { const loaded = await getMeal(id) Object.assign(meal, loaded) } else { - const self = await currentUser() - if (self) { - const me = { id: self.id, displayName: self.displayName } + const [user, members] = await Promise.all([currentUser(), listMembers()]) + const fallback = Array.isArray(members) && members.length > 0 ? { id: members[0]!.id, displayName: members[0]!.displayName } : null + const me = selectMyMember(members, user) ?? fallback + if (me) { meal.chefs = [me] meal.consumers = [me] meal.cleanup = [me] diff --git a/src/domain/members.ts b/src/domain/members.ts new file mode 100644 index 0000000..faf911a --- /dev/null +++ b/src/domain/members.ts @@ -0,0 +1,20 @@ +import type { components } from '@/api/types' +import type { MemberRef, User } from '@/domain/types' + +export type HouseholdMember = components['schemas']['HouseholdMember'] + +export function toMemberRef(m: HouseholdMember): MemberRef { + return { id: m.id, displayName: m.displayName } +} + +export function selectMyMember(members: HouseholdMember[] | null | undefined, user: User | null): MemberRef | null { + const list: HouseholdMember[] = Array.isArray(members) ? members : [] + if (list.length === 0) return null + if (list.length === 1) return toMemberRef(list[0]!) + + if (user && typeof user.displayName === 'string' && user.displayName) { + const match = list.find((m) => m.displayName === user.displayName) + if (match) return toMemberRef(match) + } + return null +}