added "members" for an event that help the admins to moderate. members must be invited via email.

This commit is contained in:
Codex Agent
2025-11-09 22:24:40 +01:00
parent 082b78cd43
commit 7ec3db9c59
23 changed files with 836 additions and 101 deletions

View File

@@ -331,10 +331,12 @@ export type EventMember = {
id: number;
name: string;
email: string | null;
role: 'tenant_admin' | 'member' | 'guest' | string;
role: 'tenant_admin' | 'member';
status?: 'pending' | 'active' | 'invited' | string;
joined_at?: string | null;
avatar_url?: string | null;
permissions?: string[] | null;
user_id?: number | null;
};
type EventListResponse = { data?: JsonValue[] };
@@ -815,6 +817,12 @@ function normalizeMember(member: JsonValue): EventMember {
status: member.status ?? 'active',
joined_at: member.joined_at ?? member.created_at ?? null,
avatar_url: member.avatar_url ?? member.avatar ?? null,
permissions: Array.isArray(member.permissions)
? (member.permissions as string[])
: member.permissions
? String(member.permissions).split(',').map((entry) => entry.trim())
: null,
user_id: member.user_id ?? null,
};
}
@@ -1695,7 +1703,10 @@ export async function getEventMembers(eventIdentifier: number | string, page = 1
};
}
export async function inviteEventMember(eventIdentifier: number | string, payload: { email: string; role?: string; name?: string }): Promise<EventMember> {
export async function inviteEventMember(
eventIdentifier: number | string,
payload: { email: string; role: EventMember['role']; name?: string }
): Promise<EventMember> {
const response = await authorizedFetch(
`/api/v1/tenant/events/${encodeURIComponent(String(eventIdentifier))}/members`,
{