Files
workshop-manager/src/lib/share-utils.ts

51 lines
1.0 KiB
TypeScript

/**
* 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<string>();
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;
});
}