EventBuzz_Website/src/hooks/useEventRegistrationSetting...

51 lines
1.7 KiB
TypeScript

import type { LoginPreviewResponse } from "../types/visitorContext";
export type RegistrationBaseFields =
| "name_email"
| "email_only"
| "name_email_phone"
| "anonymous_name"
| "anonymous";
export function registrationRequiresEmail(base: RegistrationBaseFields | string): boolean {
return base === "name_email" || base === "email_only" || base === "name_email_phone";
}
export function useEventRegistrationSettings(event: LoginPreviewResponse | null | undefined) {
const s = event?.settings;
const registrationOpen = s?.registrationOpen !== false;
const deadline = s?.registrationDeadline ? new Date(s.registrationDeadline) : null;
const deadlinePassed = deadline ? deadline.getTime() <= Date.now() : false;
const newRegistrationBlocked = !registrationOpen || deadlinePassed;
const authenticationType = (s?.authenticationType || "otp_email") as
| "otp_email"
| "link_email"
| "none";
const registrationBaseFields = (s?.registrationBaseFields || "name_email") as RegistrationBaseFields;
const registrationMode = s?.registrationMode || "Open";
const enableFeedback = s?.enableFeedback !== false;
const enableRatings = s?.enableRatings === true;
const primaryCtaLabel =
authenticationType === "otp_email"
? "Send OTP"
: authenticationType === "link_email"
? "Email me a link"
: "Continue";
return {
settings: s,
registrationOpen,
deadlinePassed,
newRegistrationBlocked,
authenticationType,
registrationBaseFields,
requiresEmailOnLogin:
authenticationType !== "none" || registrationRequiresEmail(registrationBaseFields),
registrationMode,
enableFeedback,
enableRatings,
primaryCtaLabel,
};
}