UNPKG

react-native-full-calendars

Version:

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

77 lines (76 loc) 2.28 kB
"use strict"; import { addMonths, differenceInCalendarMonths, startOfMonth } from 'date-fns'; import React, { useCallback, useContext, useImperativeHandle, useMemo, useRef } from 'react'; import { StyleSheet, View } from 'react-native'; import Swiper from '../../swiper/components/Swiper'; import { useCalendarController } from '../hooks/useCalendarController'; import { CalendarContext, WithWrappedProvider } from '../store'; import { Month } from './month/Month'; import { jsx as _jsx } from "react/jsx-runtime"; const Calendar = /*#__PURE__*/React.forwardRef((_, ref) => { const { onPageChange, buffer, minDate, maxDate, theme, initialDate } = useContext(CalendarContext); const swiperRef = useRef(null); const minSwiperIndex = useMemo(() => { if (!minDate) { return -Infinity; } return differenceInCalendarMonths(initialDate, minDate) * -1; }, [minDate, initialDate]); const maxSwiperIndex = useMemo(() => { if (!maxDate) { return Infinity; } return differenceInCalendarMonths(initialDate, maxDate) * -1; }, [maxDate, initialDate]); const onPageChangeRef = useRef(onPageChange); onPageChangeRef.current = onPageChange; const { goToDatePage, goToNextPage, goToPrevPage } = useCalendarController({ swiperRef, initialDate }); useImperativeHandle(ref, () => ({ goToDatePage, goToNextPage, goToPrevPage })); const onMonthChange = useCallback(pg => { const offsetDate = addMonths(initialDate, pg); const startDateOfMonth = startOfMonth(offsetDate); onPageChangeRef.current?.(startDateOfMonth); }, [initialDate]); return /*#__PURE__*/_jsx(View, { style: [styleSheet.flex, theme.style], children: /*#__PURE__*/_jsx(Swiper, { ref: swiperRef, renderPage: ({ index }) => /*#__PURE__*/_jsx(Month, { index: index }), buffer: buffer, onPageChange: onMonthChange, minIndex: minSwiperIndex, maxIndex: maxSwiperIndex, pageWrapperStyle: [styleSheet.flex, theme.containerStyle], style: styleSheet.flex }) }); }); export default WithWrappedProvider(Calendar); const styleSheet = StyleSheet.create({ flex: { flex: 1 } }); //# sourceMappingURL=Calendar.js.map