react-native-full-calendars
Version:
React Native Full Calendar (RNFC) is an intuitive and powerful calendar component library designed for React Native.
65 lines (63 loc) • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.computedCalendarData = void 0;
var _dateFns = require("date-fns");
var _computedArrayMerge = require("./computed-array-merge");
var _date = require("./date");
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) => (0, _dateFns.differenceInDays)(a, b)).forEach(eventDate => {
const prevDate = (0, _dateFns.format)((0, _dateFns.subDays)(eventDate, 1), 'yyyy-MM-dd');
const prevEventList = updateStartEndFlags(dataMap[prevDate] || [], prevDate);
const currentEventList = updateStartEndFlags(dataMap[eventDate] || [], eventDate);
// data merge
dataMap[eventDate] = (0, _computedArrayMerge.alignDataList)(prevEventList, currentEventList);
});
return dataMap;
};
exports.computedCalendarData = computedCalendarData;
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 = (0, _date.getIterableDateBetweenDates)(startDate, endDate);
return {
...data,
metadata: {
datesInRange,
isEnd: false,
isStart: false
}
};
};
//# sourceMappingURL=computed-calendar-data.js.map