import dayjs from 'dayjs' import React from 'react' import { type RecursiveArray, Text, TouchableOpacity, View, type ViewStyle } from 'react-native' import type { EventRenderer, HourRenderer, ICalendarEventBase } from '../src/interfaces' import { formatStartEnd } from '../src/utils/datetime' const getRandomInt = (min: number, max: number) => { return Math.floor(Math.random() * (max - min)) + min } const eventNotes = ( Phone number: 555-123-4567 Arrive 15 minutes early ) export const events: Array = [ { title: 'Watch Boxing', start: dayjs().set('hour', 0).set('minute', 0).set('second', 0).toDate(), end: dayjs().set('hour', 1).set('minute', 30).toDate(), color: '#02edda', }, { title: 'Meeting', start: dayjs().set('hour', 10).set('minute', 0).toDate(), end: dayjs().set('hour', 10).set('minute', 30).toDate(), }, { title: 'Coffee break', start: dayjs().set('hour', 14).set('minute', 30).toDate(), end: dayjs().set('hour', 15).set('minute', 30).toDate(), }, { title: 'with color prop', start: dayjs().set('hour', 16).set('minute', 0).toDate(), end: dayjs().set('hour', 18).set('minute', 30).toDate(), color: 'purple', }, { title: 'Repair my car', start: dayjs().add(1, 'day').set('hour', 7).set('minute', 45).toDate(), end: dayjs().add(1, 'day').set('hour', 13).set('minute', 30).toDate(), }, { title: 'Meet Realtor', start: dayjs().add(1, 'day').set('hour', 8).set('minute', 25).toDate(), end: dayjs().add(1, 'day').set('hour', 9).set('minute', 55).toDate(), }, { title: 'Laundry', start: dayjs().add(1, 'day').set('hour', 8).set('minute', 25).toDate(), end: dayjs().add(1, 'day').set('hour', 11).set('minute', 0).toDate(), }, { title: "Doctor's appointment", start: dayjs().set('hour', 13).set('minute', 0).toDate(), end: dayjs().set('hour', 14).set('minute', 15).toDate(), children: eventNotes, }, { title: 'Plan a holiday', start: dayjs().set('hour', 13).set('minute', 0).add(1, 'month').toDate(), end: dayjs().set('hour', 14).set('minute', 15).add(1, 'month').toDate(), }, { title: 'Go on holiday', start: dayjs().set('hour', 13).set('minute', 0).add(3, 'month').toDate(), end: dayjs().set('hour', 14).set('minute', 15).add(3, 'month').toDate(), }, ] export const tonsOfEvents: Array = new Array(10) .fill(undefined) .map((_) => { const day = getRandomInt(dayjs().startOf('week').get('day'), dayjs().endOf('week').get('day')) const startHour = getRandomInt(0, 23) const endHour = getRandomInt(startHour + 2, 24) const startMinute = getRandomInt(0, 59) const endMinute = getRandomInt(0, 59) return { title: 'Watch Boxing', start: dayjs() .set('day', day) .set('hour', startHour) .set('minute', startMinute) .set('second', 0) .toDate(), end: dayjs() .set('day', day) .set('hour', endHour) .set('minute', endMinute) .set('second', 0) .toDate(), } }) // Add an event that spans multiple days tonsOfEvents.push({ title: 'Overlapping event', start: dayjs().set('hour', 10).set('minute', 0).toDate(), end: dayjs().set('hour', 10).set('minute', 0).add(1, 'day').toDate(), }) export const tonsOfEventsSorted = tonsOfEvents.sort((a, b) => a.start.getTime() - b.start.getTime()) export const spanningEvents: Array = [ { title: 'Watch Boxing', start: dayjs().subtract(1, 'week').set('hour', 14).set('minute', 30).toDate(), end: dayjs().subtract(1, 'week').set('hour', 15).set('minute', 30).toDate(), }, { title: 'Laundry', start: dayjs().subtract(1, 'week').set('hour', 1).set('minute', 30).toDate(), end: dayjs().subtract(1, 'week').set('hour', 2).set('minute', 30).toDate(), }, { title: 'Meeting', start: dayjs().subtract(1, 'week').set('hour', 10).set('minute', 0).toDate(), end: dayjs().add(1, 'week').set('hour', 10).set('minute', 30).toDate(), }, { title: 'Coffee break', start: dayjs().set('hour', 14).set('minute', 30).toDate(), end: dayjs().add(1, 'week').set('hour', 15).set('minute', 30).toDate(), }, { title: 'Repair my car', start: dayjs().add(1, 'day').set('hour', 7).set('minute', 45).toDate(), end: dayjs().add(4, 'day').set('hour', 13).set('minute', 30).toDate(), }, { title: 'Vacation', start: dayjs().subtract(1, 'month').set('hour', 7).set('minute', 45).toDate(), end: dayjs().add(1, 'month').set('hour', 13).set('minute', 30).toDate(), }, ] export interface MyCustomEventType extends ICalendarEventBase { color?: string } export const customEventRenderer: EventRenderer = ( event, touchableOpacityProps, ) => { return ( ), { backgroundColor: 'white', borderWidth: 1, borderColor: 'lightgrey', borderLeftColor: event.color ? event.color : 'green', borderLeftWidth: 10, borderStyle: 'solid', borderRadius: 6, alignItems: 'center', justifyContent: 'center', }, ]} > {dayjs(event.end).diff(event.start, 'minute') < 32 ? ( {event.title}, {dayjs(event.start).format('HH:mm')} ) : ( <> {event.title} {formatStartEnd(event.start, event.end, 'HH:mm')} {event.children && event.children} )} ) } export const customHourRenderer: HourRenderer = ({ hour }) => { return ( {hour} ) }