EventBuzz_Console/src/app/utils/sessionFlags.ts

63 lines
2.4 KiB
TypeScript

import type { ApiSession, SessionPayload } from "../../services/api/sessions";
import type { ApiTrack } from "../../services/api/tracks";
/** Resolved Q&A flag (supports legacy `qnaEnabled` on older session documents). */
export function effectiveEnableQnA(s: ApiSession): boolean {
if (typeof s.enableQnA === "boolean") return s.enableQnA;
const legacy = (s as ApiSession & { qnaEnabled?: boolean }).qnaEnabled;
if (typeof legacy === "boolean") return legacy;
return true;
}
export function effectiveEnableQnP(s: ApiSession): boolean {
if (typeof s.enableQnP === "boolean") return s.enableQnP;
return true;
}
export function sessionToPayload(s: ApiSession): SessionPayload {
const trackRaw = s.track;
let track: string | null = null;
if (trackRaw && typeof trackRaw === "object" && "_id" in trackRaw) track = String((trackRaw as ApiTrack)._id);
else if (typeof trackRaw === "string" && trackRaw.trim()) track = trackRaw;
const speakers = (s.speakers || []).map((x) => (typeof x === "string" ? x : x._id));
const keyPersons =
Array.isArray(s.keyPersons) && s.keyPersons.length
? s.keyPersons
.map((kp) => {
const speakerId =
typeof kp.speaker === "object" && kp.speaker && "_id" in kp.speaker
? String(kp.speaker._id)
: String(kp.speaker || "");
if (!speakerId) return null;
return { speaker: speakerId, role: String(kp.role || "Speaker").trim() || "Speaker" };
})
.filter((x): x is { speaker: string; role: string } => Boolean(x))
: speakers.map((speaker) => ({ speaker, role: "Speaker" }));
return {
title: s.title,
description: s.description ?? "",
type: s.type,
startTime: s.startTime,
endTime: s.endTime,
location: s.location,
track,
speakers,
keyPersons,
moderator: s.moderator ?? null,
capacity: s.capacity,
status: s.status,
resources: s.resources,
audienceFeedbackEnabled: s.audienceFeedbackEnabled,
audienceRatingsEnabled: s.audienceRatingsEnabled,
audienceKeyPersonsEnabled: s.audienceKeyPersonsEnabled,
audienceMySessionsEnabled: s.audienceMySessionsEnabled,
audienceAgendaEnabled: s.audienceAgendaEnabled,
audienceFeedbackForm: s.audienceFeedbackForm ?? null,
audienceRatingsForm: s.audienceRatingsForm ?? null,
enableQnA: effectiveEnableQnA(s),
enableQnP: effectiveEnableQnP(s),
};
}