feat: add next event indicator to Show Page Calendar tab (#4348)
* feat: add next event indicator to Show Page Calendar tab Closes #4289 * feat: improve calendar animation * refactor: add some utils and fix sorting edge case with full day * refactor: rename CalendarCurrentEventIndicator to CalendarCurrentEventCursor * fix: fix tests * Fix lint --------- Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
This commit is contained in:
@ -1,41 +1,34 @@
|
||||
import { startOfDay } from 'date-fns';
|
||||
import { useContext } from 'react';
|
||||
import styled from '@emotion/styled';
|
||||
|
||||
import { CalendarDayCardContent } from '@/activities/calendar/components/CalendarDayCardContent';
|
||||
import { CalendarEvent } from '@/activities/calendar/types/CalendarEvent';
|
||||
import { CalendarContext } from '@/activities/calendar/contexts/CalendarContext';
|
||||
import { Card } from '@/ui/layout/card/components/Card';
|
||||
import { groupArrayItemsBy } from '~/utils/array/groupArrayItemsBy';
|
||||
import { sortDesc } from '~/utils/sort';
|
||||
|
||||
type CalendarMonthCardProps = {
|
||||
calendarEvents: CalendarEvent[];
|
||||
dayTimes: number[];
|
||||
};
|
||||
|
||||
export const CalendarMonthCard = ({
|
||||
calendarEvents,
|
||||
}: CalendarMonthCardProps) => {
|
||||
const calendarEventsByDayTime = groupArrayItemsBy(
|
||||
calendarEvents,
|
||||
({ startsAt }) => startOfDay(startsAt).getTime(),
|
||||
);
|
||||
const sortedDayTimes = Object.keys(calendarEventsByDayTime)
|
||||
.map(Number)
|
||||
.sort(sortDesc);
|
||||
const StyledCard = styled(Card)`
|
||||
overflow: visible;
|
||||
`;
|
||||
|
||||
export const CalendarMonthCard = ({ dayTimes }: CalendarMonthCardProps) => {
|
||||
const { calendarEventsByDayTime } = useContext(CalendarContext);
|
||||
|
||||
return (
|
||||
<Card fullWidth>
|
||||
{sortedDayTimes.map((dayTime, index) => {
|
||||
const dayCalendarEvents = calendarEventsByDayTime[dayTime];
|
||||
<StyledCard fullWidth>
|
||||
{dayTimes.map((dayTime, index) => {
|
||||
const dayCalendarEvents = calendarEventsByDayTime[dayTime] || [];
|
||||
|
||||
return (
|
||||
!!dayCalendarEvents?.length && (
|
||||
<CalendarDayCardContent
|
||||
key={dayTime}
|
||||
calendarEvents={dayCalendarEvents}
|
||||
divider={index < sortedDayTimes.length - 1}
|
||||
/>
|
||||
)
|
||||
<CalendarDayCardContent
|
||||
key={dayTime}
|
||||
calendarEvents={dayCalendarEvents}
|
||||
divider={index < dayTimes.length - 1}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</Card>
|
||||
</StyledCard>
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user