Files
bab-app/src/stores/sampledata/schedule.ts

141 lines
3.0 KiB
TypeScript

import { DateOptions, date } from 'quasar';
import { Boat, useBoatStore } from '../boat';
import {
parseTimestamp,
today,
Timestamp,
addToDate,
} from '@quasar/quasar-ui-qcalendar';
import type {
StatusTypes,
Reservation,
TimeBlockTemplate,
Timeblock,
} from '../schedule.types';
export const templateA: TimeBlockTemplate = {
id: '1',
name: 'WeekdayBlocks',
blocks: [
['08:00', '12:00'],
['12:00', '16:00'],
['17:00', '21:00'],
],
};
export const templateB: TimeBlockTemplate = {
id: '2',
name: 'WeekendBlocks',
blocks: [
['07:00', '10:00'],
['10:00', '13:00'],
['13:00', '16:00'],
['16:00', '19:00'],
],
};
export function getSampleTimeBlocks(): Timeblock[] {
// Hard-code 30 days worth of blocks, for now. Make them random templates
const boats = useBoatStore().boats;
const result: Timeblock[] = [];
const tsToday: Timestamp = parseTimestamp(today()) as Timestamp;
for (let i = 0; i <= 30; i++) {
const template = templateB;
result.push(
...boats
.map((b): Timeblock[] => {
return template.blocks.map((t): Timeblock => {
return {
$id: 'id' + Math.random().toString(32).slice(2),
boatId: b.$id,
start: addToDate(tsToday, { day: i }).date + ' ' + t[0],
end: addToDate(tsToday, { day: i }).date + ' ' + t[1],
};
});
})
.flat(2)
);
}
return result;
}
export function getSampleReservations(): Reservation[] {
const sampleData = [
{
id: '1',
user: 'John Smith',
start: '7:00',
end: '10:00',
boat: '1',
status: 'confirmed',
},
{
id: '2',
user: 'Bob Barker',
start: '16:00',
end: '19:00',
boat: '1',
status: 'confirmed',
},
{
id: '3',
user: 'Peter Parker',
start: '7:00',
end: '13:00',
boat: '4',
status: 'tentative',
},
{
id: '4',
user: 'Vince McMahon',
start: '10:00',
end: '13:00',
boat: '2',
status: 'pending',
},
{
id: '5',
user: 'Heather Graham',
start: '13:00',
end: '19:00',
boat: '4',
status: 'confirmed',
},
{
id: '6',
user: 'Lawrence Fishburne',
start: '13:00',
end: '16:00',
boat: '3',
},
];
const boatStore = useBoatStore();
const now = new Date();
const splitTime = (x: string): string[] => {
return x.split(':');
};
const makeOpts = (x: string[]): DateOptions => {
return {
hour: parseInt(x[0]),
minute: parseInt(x[1]),
seconds: 0,
milliseconds: 0,
};
};
return sampleData.map((entry): Reservation => {
const boat = <Boat>boatStore.boats.find((b) => b.$id == entry.boat);
return {
id: entry.id,
user: entry.user,
start: date.adjustDate(now, makeOpts(splitTime(entry.start))),
end: date.adjustDate(now, makeOpts(splitTime(entry.end))),
resource: boat,
reservationDate: now,
status: entry.status as StatusTypes,
};
});
}