51 lines
1.7 KiB
TypeScript
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,
|
|
};
|
|
}
|