11// React
22import { useEffect , useState } from 'react'
33// Models
4- import { TimeBasedRenderingProps as Props } from '../models/props'
4+ import { TimeBasedRenderingV1Props as Props } from '../models/props'
55
6- const TimeBasedWrapper = ( { startDate, endDate, children } : Props ) => {
6+ const TimeBasedWrapper = ( { incomingStartDate, incomingEndDate, children } : Props ) => {
7+ const [ startDate , setStartDate ] = useState ( incomingStartDate )
8+ const [ endDate , setEndDate ] = useState ( incomingEndDate )
79 const [ canRender , setCanRender ] = useState ( false )
810
911 useEffect ( ( ) => {
1012 const currentDate = new Date ( )
1113 let startRenderingTimeOut : NodeJS . Timeout | undefined = undefined
1214 let stopRenderingTimeOut : NodeJS . Timeout | undefined = undefined
15+ let nextDayUpdateTimeOut : NodeJS . Timeout | undefined = undefined
1316
1417 const shouldRenderNow = currentDate . getTime ( ) >= startDate . getTime ( ) && currentDate . getTime ( ) <= endDate . getTime ( )
1518
@@ -33,9 +36,18 @@ const TimeBasedWrapper = ({ startDate, endDate, children }: Props) => {
3336 stopRenderingTimeOut = setTimeout ( ( ) => setCanRender ( false ) , timeToStopRendering )
3437 }
3538
39+ // Update the date (day) of the start and end dates so it would run everyday
40+ // Basically we have a timeout to launch after midnight by one second to update the day of the start and end dates
41+ const timeUntilMidnight = new Date ( new Date ( ) . setHours ( 0 , 0 , 0 , 0 ) ) . getTime ( ) - new Date ( ) . getTime ( ) + 1000
42+ nextDayUpdateTimeOut = setTimeout ( ( ) => {
43+ setStartDate ( new Date ( startDate . setDate ( startDate . getDate ( ) + 1 ) ) )
44+ setEndDate ( new Date ( endDate . setDate ( endDate . getDate ( ) + 1 ) ) )
45+ } , timeUntilMidnight )
46+
3647 return ( ) => {
3748 clearTimeout ( startRenderingTimeOut )
3849 clearTimeout ( stopRenderingTimeOut )
50+ clearTimeout ( nextDayUpdateTimeOut )
3951 }
4052 } , [ startDate , endDate ] )
4153
0 commit comments