UNPKG

react-native-full-calendars

Version:

React Native Full Calendar (RNFC) is an intuitive and powerful calendar component library designed for React Native.

60 lines (58 loc) 1.94 kB
"use strict"; import { differenceInDays, format, subDays } from 'date-fns'; import { alignDataList } from './computed-array-merge'; import { getIterableDateBetweenDates } from './date'; export const computedCalendarData = dataList => { const dataListWithMetadata = dataList.map(data => { return computedRangeDates(data); }); const dataMap = {}; for (const event of dataListWithMetadata) { for (const date of event.metadata.datesInRange) { const eventCopy = { ...event, isStart: false, isEnd: false }; dataMap[date] = dataMap[date] ? [...dataMap[date], eventCopy] : [eventCopy]; } } Object.keys(dataMap).sort((a, b) => differenceInDays(a, b)).forEach(eventDate => { const prevDate = format(subDays(eventDate, 1), 'yyyy-MM-dd'); const prevEventList = updateStartEndFlags(dataMap[prevDate] || [], prevDate); const currentEventList = updateStartEndFlags(dataMap[eventDate] || [], eventDate); // data merge dataMap[eventDate] = alignDataList(prevEventList, currentEventList); }); return dataMap; }; const updateStartEndFlags = (dataListWithMetadata, referenceDate) => { return dataListWithMetadata.map(dataWithMetadata => { if (!dataWithMetadata) { return null; } const dateIndex = dataWithMetadata.metadata.datesInRange?.findIndex(date => date === referenceDate); return { ...dataWithMetadata, metadata: { ...dataWithMetadata.metadata, isStart: dateIndex === 0, isEnd: dateIndex + 1 === dataWithMetadata.metadata.datesInRange?.length } }; }); }; const computedRangeDates = data => { const startDate = data.startAt; const endDate = data.endAt; const datesInRange = getIterableDateBetweenDates(startDate, endDate); return { ...data, metadata: { datesInRange, isEnd: false, isStart: false } }; }; //# sourceMappingURL=computed-calendar-data.js.map