presenton/servers/nextjs/utils/helpers.ts
2025-06-23 15:13:04 +05:45

122 lines
2.8 KiB
TypeScript

export const toDateTime = (secs: number) => {
var t = new Date('1970-01-01T00:30:00Z');
t.setSeconds(secs);
return t;
};
export const calculateTrialEndUnixTimestamp = (
trialPeriodDays: number | null | undefined
) => {
// Check if trialPeriodDays is null, undefined, or less than 2 days
if (
trialPeriodDays === null ||
trialPeriodDays === undefined ||
trialPeriodDays < 2
) {
return undefined;
}
const currentDate = new Date(); // Current date and time
const trialEnd = new Date(
currentDate.getTime() + (trialPeriodDays + 1) * 24 * 60 * 60 * 1000
); // Add trial days
return Math.floor(trialEnd.getTime() / 1000); // Convert to Unix timestamp in seconds
};
const toastKeyMap: { [key: string]: string[] } = {
status: ['status', 'status_description'],
error: ['error', 'error_description']
};
const getToastRedirect = (
path: string,
toastType: string,
toastName: string,
toastDescription: string = '',
disableButton: boolean = false,
arbitraryParams: string = ''
): string => {
const [nameKey, descriptionKey] = toastKeyMap[toastType];
let redirectPath = `${path}?${nameKey}=${encodeURIComponent(toastName)}`;
if (toastDescription) {
redirectPath += `&${descriptionKey}=${encodeURIComponent(toastDescription)}`;
}
if (disableButton) {
redirectPath += `&disable_button=true`;
}
if (arbitraryParams) {
redirectPath += `&${arbitraryParams}`;
}
return redirectPath;
};
export const getStatusRedirect = (
path: string,
statusName: string,
statusDescription: string = '',
disableButton: boolean = false,
arbitraryParams: string = ''
) =>
getToastRedirect(
path,
'status',
statusName,
statusDescription,
disableButton,
arbitraryParams
);
export const getErrorRedirect = (
path: string,
errorName: string,
errorDescription: string = '',
disableButton: boolean = false,
arbitraryParams: string = ''
) =>
getToastRedirect(
path,
'error',
errorName,
errorDescription,
disableButton,
arbitraryParams
);
export const getMaxLimits = (tier: 'free' | 'standard' | 'premium') => {
const limits = {
free: {
exports: 5,
slides: 8,
aiVideos: 5,
fileSize: 6 * 1024 * 1024, // 6MB in bytes
videoDuration: 5 * 60, // 5 minutes in seconds
hasWatermark: true,
hasAvatar: false
},
standard: {
exports: 10,
slides: 15,
aiVideos: 10,
fileSize: 10 * 1024 * 1024, // 10MB
videoDuration: 10 * 60, // 10 minutes
hasWatermark: false,
hasAvatar: true
},
premium: {
exports: 25,
slides: 25,
aiVideos: 25,
fileSize: 25 * 1024 * 1024, // 25MB
videoDuration: 25 * 60, // 25 minutes
hasWatermark: false,
hasAvatar: true
}
};
return limits[tier];
};