react-native-easy-calendar
Version:
Customizable, easy-to-use, performant calendar components for React Native
79 lines (73 loc) • 2.98 kB
JavaScript
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
import React from 'react';
import { View } from 'react-native';
import { useSurroundingTimeUnits } from '../Hooks';
import { getExtraDays, dateRange } from '../Utils';
import { ThemeContext } from '../Contexts';
import { Day as DefaultDay } from '.';
const Days = ({
minDate,
maxDate,
visibleDate,
showExtraDates,
onPressDay,
dateProperties,
DayComponent: CustomDay
}) => {
const theme = React.useContext(ThemeContext);
const {
month
} = useSurroundingTimeUnits(visibleDate.local().format());
const daysOfVisibleMonth = dateRange(month.current.start, month.current.end);
const initSlotsAvailable = month.current.start.day();
const daysInWeek = 6; // 0-indexed
let finalSlotsAvailable = daysInWeek - month.current.end.day();
const nOfSlotsToFill6Rows = 7 * 6;
if (initSlotsAvailable + daysOfVisibleMonth.length + finalSlotsAvailable < nOfSlotsToFill6Rows) {
// Add an extra row at the end of the calendar
finalSlotsAvailable += 7;
}
const initialSlots = getExtraDays({
from: month.last.end.subtract(initSlotsAvailable - 1, 'day'),
to: month.last.end
});
const finalSlots = getExtraDays({
from: month.next.start,
to: month.next.start.add(finalSlotsAvailable - 1, 'day')
});
const Day = CustomDay || DefaultDay;
return /*#__PURE__*/React.createElement(View, {
style: theme.daysContainer,
testID: 'days-container'
}, initialSlots.map((day, index) => /*#__PURE__*/React.createElement(Day, {
key: index,
showExtraDates: showExtraDates,
date: day.format(),
onPress: onPressDay,
isDisabled: true,
isExtraDay: true
})), daysOfVisibleMonth.map(day => {
const dayProperties = dateProperties[day.format('YYYY-MM-DD')];
return /*#__PURE__*/React.createElement(Day, _extends({}, dayProperties, {
key: day.date(),
date: day.local().format('YYYY-MM-DD'),
showExtraDates: showExtraDates,
isStartOfMonth: month.current.start.isSame(day, 'day'),
isEndOfMonth: month.current.end.isSame(day, 'day'),
isStartOfWeek: day.day() === 0,
isEndOfWeek: day.day() === 6,
onPress: onPressDay,
isExtraDay: false,
isDisabled: (dayProperties === null || dayProperties === void 0 ? void 0 : dayProperties.isDisabled) || Boolean(minDate && day.isBefore(minDate, 'day')) || Boolean(maxDate && day.isAfter(maxDate, 'day'))
}));
}), finalSlots.map((day, index) => /*#__PURE__*/React.createElement(Day, {
key: index,
date: day.format(),
showExtraDates: showExtraDates,
onPress: onPressDay,
isDisabled: true,
isExtraDay: true
})));
};
export default Days;
//# sourceMappingURL=Days.js.map