Extract the operational Model Delivery PWA
This commit is contained in:
commit
958f8d5ff1
46 files changed
+6446
No files matched your search
@@ -0,0 +1,46 @@
|
||||
import type { LocalDelivery } from './db';
|
||||
|
||||
export function toDateKey(date: Date): string {
|
||||
const year = date.getFullYear();
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0');
|
||||
const day = String(date.getDate()).padStart(2, '0');
|
||||
return `${year}-${month}-${day}`;
|
||||
}
|
||||
|
||||
export function dateFromKey(key: string): Date {
|
||||
const [year, month, day] = key.split('-').map(Number);
|
||||
return new Date(year!, month! - 1, day!, 12);
|
||||
}
|
||||
|
||||
export function deliveryDateKey(delivery: Pick<LocalDelivery, 'scheduledDate' | 'createdAt'>): string {
|
||||
return delivery.scheduledDate ?? delivery.createdAt.slice(0, 10);
|
||||
}
|
||||
|
||||
export function addDays(date: Date, days: number): Date {
|
||||
const next = new Date(date);
|
||||
next.setDate(next.getDate() + days);
|
||||
return next;
|
||||
}
|
||||
|
||||
export function weekStart(date: Date): Date {
|
||||
const start = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 12);
|
||||
start.setDate(start.getDate() - start.getDay());
|
||||
return start;
|
||||
}
|
||||
|
||||
export function weekDates(anchor: Date): Date[] {
|
||||
const start = weekStart(anchor);
|
||||
return Array.from({ length: 7 }, (_, index) => addDays(start, index));
|
||||
}
|
||||
|
||||
export function activeDeliveries(deliveries: LocalDelivery[]): LocalDelivery[] {
|
||||
return deliveries.filter(delivery => !delivery.deletedAt && delivery.status !== 'cancelled');
|
||||
}
|
||||
|
||||
export function deliveriesForDate(deliveries: LocalDelivery[], key: string): LocalDelivery[] {
|
||||
return deliveries.filter(delivery => !delivery.deletedAt && deliveryDateKey(delivery) === key);
|
||||
}
|
||||
|
||||
export function valueOf(deliveries: LocalDelivery[]): number {
|
||||
return activeDeliveries(deliveries).reduce((sum, delivery) => sum + delivery.totalPriceAgorot, 0);
|
||||
}
|
||||
Reference in new issue
Block a user