react-native-plain-calendar
Version:
Calendar component for React-Native
30 lines (29 loc) • 1.35 kB
JavaScript
import * as dateFns from 'date-fns';
import * as React from 'react';
import { useMemo } from 'react';
import { View } from 'react-native';
import { dateFormats } from '../../constants';
import { s } from './styles';
import { Weekday } from './Weekday';
function Week({ currentMonth, weekdayContainerStyle, weekdayStyle, weekContainerStyle, weekdays, weekStartsOn, WeekdaysComponent, }) {
if (WeekdaysComponent) {
return <WeekdaysComponent />;
}
const formatedWeekdays = useMemo(() => {
const secondPart = weekdays.slice(0, weekStartsOn);
const firstPart = weekdays.slice(weekStartsOn);
const whole = firstPart.concat(secondPart);
return whole;
}, [weekdays, weekStartsOn]);
const dateFormat = dateFormats.daysFormat;
const days = [];
const startDate = useMemo(() => dateFns.startOfWeek(currentMonth, {
weekStartsOn,
}), [currentMonth, weekStartsOn]);
for (let i = 0; i < 7; i += 1) {
days.push(<Weekday key={i} index={i} dateFormat={dateFormat} formatedWeekdays={formatedWeekdays} startDate={startDate} currentMonth={currentMonth} weekdayContainerStyle={weekdayContainerStyle} weekdayStyle={weekdayStyle}/>);
}
return (<View style={[s.weekContainer, weekContainerStyle]}>{days}</View>);
}
const WeekMemo = React.memo(Week);
export { WeekMemo as Week };