Files
guilan-ace-frontend/src/lib/registration-hub-display.ts

81 lines
2.1 KiB
TypeScript

import { getEventRegistrationState, type EventAvailabilityInput } from "./event-ui.ts";
import type { RegistrationHubState } from "./types.ts";
export type RegistrationHubGate =
| "registration_ended"
| "capacity_full"
| "registration_not_started"
| null;
export type RegistrationHubGateCopy = {
status: string;
title: string;
subtitle: string;
};
export function getRegistrationHubGate(
event: EventAvailabilityInput,
now = Date.now(),
): RegistrationHubGate {
if (event.status !== "published") return "registration_ended";
const state = getEventRegistrationState(event, now).state;
if (state === "closed" || state === "unavailable") return "registration_ended";
if (state === "full") return "capacity_full";
if (state === "not_started") return "registration_not_started";
return null;
}
export function getRegistrationHubGateCopy(
gate: RegistrationHubGate,
): RegistrationHubGateCopy | null {
if (gate === "registration_ended") {
return {
status: "پایان زمان ثبت‌نام",
title: "پایان مهلت ثبت‌نام",
subtitle: "",
};
}
if (gate === "capacity_full") {
return {
status: "تکمیل ظرفیت",
title: "ظرفیت رویداد تکمیل شده",
subtitle: "",
};
}
if (gate === "registration_not_started") {
return {
status: "ثبت‌نام هنوز آغاز نشده",
title: "مهلت ثبت‌نام هنوز آغاز نشده است",
subtitle: "",
};
}
return null;
}
export function getRegistrationHubDisplayState(
state: RegistrationHubState,
): RegistrationHubState {
return state === "legacy_pending" ? "verification_pending" : state;
}
export function normalizeCouponAmounts(raw: {
discount_amount?: number | null;
final_price?: number | null;
}) {
return {
discount_amount: (raw.discount_amount ?? 0) / 10,
final_price: (raw.final_price ?? 0) / 10,
};
}
export function getFinalPriceToman(
eventPriceInRials: number,
couponFinalPriceInToman?: number | null,
) {
return couponFinalPriceInToman ?? Math.floor(eventPriceInRials / 10);
}