Fixed meal membership
This commit is contained in:
parent
4eec86794c
commit
d69128a334
2 changed files with 26 additions and 3 deletions
|
|
@ -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]
|
||||
|
|
|
|||
20
src/domain/members.ts
Normal file
20
src/domain/members.ts
Normal file
|
|
@ -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
|
||||
}
|
||||
Loading…
Reference in a new issue