/** * Shared utilities for share modals across workshop types. */ import type { ShareRole } from '@prisma/client'; export interface ShareUser { id: string; name: string | null; email: string; } export interface Share { id: string; role: ShareRole; user: ShareUser; createdAt?: Date; } export interface TeamMemberUser { id: string; email: string; name: string | null; } export interface TeamWithMembers { id: string; name: string; description: string | null; userRole?: 'ADMIN' | 'MEMBER'; members?: { user: TeamMemberUser }[]; } /** * Flatten team members from all teams, dedupe by userId, exclude current user. */ export function getTeamMembersForShare( userTeams: TeamWithMembers[], currentUserId: string ): TeamMemberUser[] { const seen = new Set(); return userTeams .flatMap((t) => t.members ?? []) .map((m) => m.user) .filter((u) => { if (u.id === currentUserId || seen.has(u.id)) return false; seen.add(u.id); return true; }); }