react-native-easy-calendar
Version:
Customizable, easy-to-use, performant calendar components for React Native
95 lines (80 loc) • 3.31 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _reactNative = require("react-native");
var _Hooks = require("../Hooks");
var _Utils = require("../Utils");
var _Contexts = require("../Contexts");
var _ = require(".");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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); }
const Days = ({
minDate,
maxDate,
visibleDate,
showExtraDates,
onPressDay,
dateProperties,
DayComponent: CustomDay
}) => {
const theme = _react.default.useContext(_Contexts.ThemeContext);
const {
month
} = (0, _Hooks.useSurroundingTimeUnits)(visibleDate.local().format());
const daysOfVisibleMonth = (0, _Utils.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 = (0, _Utils.getExtraDays)({
from: month.last.end.subtract(initSlotsAvailable - 1, 'day'),
to: month.last.end
});
const finalSlots = (0, _Utils.getExtraDays)({
from: month.next.start,
to: month.next.start.add(finalSlotsAvailable - 1, 'day')
});
const Day = CustomDay || _.Day;
return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
style: theme.daysContainer,
testID: 'days-container'
}, initialSlots.map((day, index) => /*#__PURE__*/_react.default.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.default.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.default.createElement(Day, {
key: index,
date: day.format(),
showExtraDates: showExtraDates,
onPress: onPressDay,
isDisabled: true,
isExtraDay: true
})));
};
var _default = Days;
exports.default = _default;
//# sourceMappingURL=Days.js.map