cyberia/research/events/client/src/features/event-form/lib/extractBookedRangesForPlace.ts

import type { Event } from "@/entities/event";
import type { EventPlace } from "@/entities/place";
import type { DateRange } from "react-day-picker";

import { addDays, fromUnixTime } from "date-fns";

export const extractBookedRangesForPlace = (
  events: Event[],
  place: EventPlace,
  excludedEventsId?: number[],
) => {
  const bookedRanges: DateRange[] = [];
  const placeEvents = events.filter(
    (event) =>
      event.place.id === place.id &&
      !excludedEventsId?.includes(event.id) &&
      ["submitted", "approved"].includes(event.status ?? ""),
  );

  for (const event of placeEvents) {
    const from = fromUnixTime(event.startDateTimestamp);

    bookedRanges.push({
      from,
      to: addDays(from, event.daysAmount - 1),
    });
  }

  return bookedRanges;
};

Graph