11import XDate from 'xdate' ;
2- import React , { useRef , useMemo } from 'react' ;
2+ import React , { useRef , useMemo , useCallback } from 'react' ;
33import { View } from 'react-native' ;
44
55import { getPartialWeekDates , getWeekDates , sameMonth } from '../dateutils' ;
@@ -17,21 +17,19 @@ export type WeekProps = CalendarProps;
1717const Week = ( props : WeekProps ) => {
1818 const { theme, current, firstDay, hideExtraDays, markedDates, onDayPress, onDayLongPress, style : propsStyle , numberOfDays = 1 , timelineLeftInset} = props ;
1919 const style = useRef ( styleConstructor ( theme ) ) ;
20-
21- const getWeek = ( date ?: string ) => {
20+ const dayProps = extractDayProps ( props ) ;
21+ const currXdate = parseDate ( current ) ;
22+ const getWeek = useCallback ( ( date ?: string ) => {
2223 if ( date ) {
2324 return getWeekDates ( date , firstDay ) ;
2425 }
25- } ;
26+ } , [ firstDay ] ) ;
2627
2728 // renderWeekNumber (weekNumber) {
2829 // return <BasicDay key={`week-${weekNumber}`} theme={this.props.theme} marking={{disableTouchEvent: true}} state='disabled'>{weekNumber}</BasicDay>;
2930 // }
3031
3132 const renderDay = ( day : XDate , id : number ) => {
32- const dayProps = extractDayProps ( props ) ;
33- const currXdate = parseDate ( current ) ;
34-
3533 // hide extra days
3634 if ( current && hideExtraDays ) {
3735 if ( ! sameMonth ( day , currXdate ) ) {
@@ -55,23 +53,16 @@ const Week = (props: WeekProps) => {
5553
5654 const renderWeek = ( ) => {
5755 const dates = numberOfDays > 1 ? getPartialWeekDates ( current , numberOfDays ) : getWeek ( current ) ;
58- let week : any [ ] = [ ] ;
59-
56+ const week : JSX . Element [ ] = [ ] ;
57+ const todayIndex = dates ?. indexOf ( parseDate ( new Date ( ) ) ) || - 1 ;
58+
6059 if ( dates ) {
61- dates . forEach ( ( day : XDate , id : number ) => {
60+ const datesToRender = numberOfDays > 1 && todayIndex > - 1 ? dates . slice ( todayIndex , numberOfDays ) : dates ;
61+ datesToRender . forEach ( ( day : XDate , id : number ) => {
6262 week . push ( renderDay ( day , id ) ) ;
6363 } , this ) ;
6464 }
65-
66- // if (this.props.showWeekNumbers) {
67- // week.unshift(this.renderWeekNumber(item[item.length - 1].getWeek()));
68- // }
69-
70- const todayIndex = dates ?. indexOf ( parseDate ( new Date ( ) ) ) || - 1 ;
7165
72- if ( numberOfDays > 1 && todayIndex > - 1 ) {
73- week = week . slice ( todayIndex , numberOfDays ) ;
74- }
7566 return week ;
7667 } ;
7768
0 commit comments