import { isNil, omitBy } from 'lodash' import { useMemo } from 'react' import { MemberResource, TeamPeopleResource, TeamPersonResponseItem } from '../../types' import { useApiGet } from '../use_api' import { useEnrichPeople } from '../use_enrich_people' interface Props { teamIds: number[] planId?: number } export function useTeamMembersForNewConversation({ teamIds, planId }: Props) { const params = omitBy({ team_id: teamIds.join(','), plan_id: planId }, isNil) const { data, ...rest } = useApiGet({ url: '/chat', data: { ...params, fields: { Chat: ['people'], }, }, app: 'services', }) const people = data?.people || stableEmptyPersonArray const personIds = useMemo(() => people.map(p => p.id), [people]) const enrichmentMap = useEnrichPeople({ personIds }) const members: MemberResource[] = useMemo( () => people.map(person => { const enrichedBadges = enrichmentMap.get(person.id)?.badges ?? [] const existingTitles = new Set(person.badges.map(b => b.title)) const newBadges = enrichedBadges.filter(b => !existingTitles.has(b.title)) return { ...person, type: 'Member', gender: null, badges: [...person.badges, ...newBadges], } }), [people, enrichmentMap] ) return { members, ...rest, } } const stableEmptyPersonArray: TeamPersonResponseItem[] = []