81 lines
2.4 KiB
TypeScript
81 lines
2.4 KiB
TypeScript
import { type ClassValue, clsx } from 'clsx';
|
|
import { twMerge } from 'tailwind-merge';
|
|
|
|
export function cn(...inputs: ClassValue[]) {
|
|
return twMerge(clsx(inputs));
|
|
}
|
|
|
|
export function generateId(): string {
|
|
return Math.random().toString(36).substring(2) + Date.now().toString(36);
|
|
}
|
|
|
|
export function formatTime(time: string): string {
|
|
const [hours, minutes] = time.split(':');
|
|
const hour = parseInt(hours);
|
|
const ampm = hour >= 12 ? 'PM' : 'AM';
|
|
const displayHour = hour % 12 || 12;
|
|
return `${displayHour}:${minutes} ${ampm}`;
|
|
}
|
|
|
|
export function formatDate(date: string): string {
|
|
return new Date(date).toLocaleDateString('en-IE', {
|
|
weekday: 'long',
|
|
year: 'numeric',
|
|
month: 'long',
|
|
day: 'numeric',
|
|
});
|
|
}
|
|
|
|
export function isWithinBookingWindow(date: string): boolean {
|
|
const bookingDate = new Date(date);
|
|
const today = new Date();
|
|
const maxDate = new Date();
|
|
maxDate.setDate(today.getDate() + 6); // 7 days including today
|
|
|
|
// Reset time to start of day for comparison
|
|
today.setHours(0, 0, 0, 0);
|
|
maxDate.setHours(23, 59, 59, 999);
|
|
bookingDate.setHours(0, 0, 0, 0);
|
|
|
|
return bookingDate >= today && bookingDate <= maxDate;
|
|
}
|
|
|
|
// Ireland localization - Monday as first day of week
|
|
export function getWeekDays(): Array<{ value: number; label: string }> {
|
|
return [
|
|
{ value: 1, label: 'Monday' },
|
|
{ value: 2, label: 'Tuesday' },
|
|
{ value: 3, label: 'Wednesday' },
|
|
{ value: 4, label: 'Thursday' },
|
|
{ value: 5, label: 'Friday' },
|
|
{ value: 6, label: 'Saturday' },
|
|
{ value: 0, label: 'Sunday' },
|
|
];
|
|
}
|
|
|
|
// Convert JavaScript's getDay() (0=Sunday) to Irish standard (0=Monday)
|
|
export function getIrishDayOfWeek(date: Date): number {
|
|
const jsDay = date.getDay();
|
|
return jsDay === 0 ? 6 : jsDay - 1; // Sunday becomes 6, Monday becomes 0
|
|
}
|
|
|
|
// Convert Irish day index (0=Monday) back to JavaScript's getDay() format
|
|
export function getJavaScriptDayOfWeek(irishDay: number): number {
|
|
return irishDay === 6 ? 0 : irishDay + 1; // 6 becomes Sunday (0), others shift up
|
|
}
|
|
|
|
// Get day name using Irish week start (0=Monday)
|
|
export function getIrishDayName(irishDayIndex: number): string {
|
|
const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
|
|
return days[irishDayIndex];
|
|
}
|
|
|
|
export function generateTimeSlots(startHour: number, endHour: number): string[] {
|
|
const slots = [];
|
|
for (let hour = startHour; hour < endHour; hour++) {
|
|
const hourStr = hour < 10 ? '0' + hour : hour.toString();
|
|
slots.push(`${hourStr}:00`);
|
|
}
|
|
return slots;
|
|
}
|