3 changed files with 107 additions and 172 deletions
			
			
		@ -0,0 +1,43 @@ | 
			
		|||||
 | 
				import { useMemo } from 'react'; | 
			
		||||
 | 
				import { motion } from 'framer-motion'; | 
			
		||||
 | 
				import { format, addDays, startOfWeek, isSameDay } from 'date-fns'; | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				interface WeekHeaderProps { | 
			
		||||
 | 
				  currentDate: Date; | 
			
		||||
 | 
				} | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				const WeekHeader = ({ currentDate }: WeekHeaderProps) => { | 
			
		||||
 | 
				  const weekDays = useMemo(() => { | 
			
		||||
 | 
				    const start = startOfWeek(currentDate, { weekStartsOn: 0 }); | 
			
		||||
 | 
				    return Array.from({ length: 7 }, (_, i) => addDays(start, i)); | 
			
		||||
 | 
				  }, [currentDate]); | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				  return ( | 
			
		||||
 | 
				    <div className="flex justify-between px-2 py-3 bg-gradient-to-r from-blue-500 to-purple-500"> | 
			
		||||
 | 
				      {weekDays.map((day, index) => ( | 
			
		||||
 | 
				        <motion.div | 
			
		||||
 | 
				          key={day.toISOString()} | 
			
		||||
 | 
				          className="flex flex-col items-center flex-1" | 
			
		||||
 | 
				          initial={false} | 
			
		||||
 | 
				          animate={{ backgroundColor: 'transparent' }} | 
			
		||||
 | 
				          transition={{ duration: 0.3 }} | 
			
		||||
 | 
				        > | 
			
		||||
 | 
				          <div className={`w-full px-2 py-2 rounded-md flex flex-col items-center gap-1 ${ | 
			
		||||
 | 
				            isSameDay(day, currentDate)  | 
			
		||||
 | 
				              ? 'bg-gradient-to-br from-indigo-600 to-violet-600 text-white'  | 
			
		||||
 | 
				              : 'text-purple-100' | 
			
		||||
 | 
				          }`}>
 | 
			
		||||
 | 
				            <div className="text-sm font-medium"> | 
			
		||||
 | 
				              {format(day, 'EEE')} | 
			
		||||
 | 
				            </div> | 
			
		||||
 | 
				            <div className="w-8 h-8 rounded-full flex items-center justify-center"> | 
			
		||||
 | 
				              {format(day, 'd')} | 
			
		||||
 | 
				            </div> | 
			
		||||
 | 
				          </div> | 
			
		||||
 | 
				        </motion.div> | 
			
		||||
 | 
				      ))} | 
			
		||||
 | 
				    </div> | 
			
		||||
 | 
				  ); | 
			
		||||
 | 
				}; | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				export default WeekHeader;  | 
			
		||||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue