import { FC, ReactNode, RefObject } from 'react'; import dayjs from 'dayjs'; export interface ISpace { id: number; name: string; parentSpaceId?: number; organizationId: number; children: ISpace[]; } export interface IReservations { name: string; } export interface ISlot { id: number; spaceId: number; startDate: string; endDate: string; name: string; reservation: IReservations; startTime: string; endTime: string; timezone: string; } export enum ECalendarMode { DAILY = 'daily', WEEKLY = 'weekly', MONTHLY = 'monthly', } export enum ECalendarView { VERTICAL = 'vertical', HORIZONTAL = 'horizontal', LIST = 'list', } export interface IOptions { dragAndDrop?: boolean; resize?: boolean; infiniteScrolling?: boolean; mode?: ECalendarMode; view?: ECalendarView; date?: string; partialRendering?: boolean; isSundayFirstDay?: boolean; dndStepLength?: number; hourSize?: { vertical?: number; horizontal?: number; }; addNewSlotButton?: { hoverDelay?: string; duration?: number; step?: number; }; scrollTo?: { startTime?: string; endTime?: string; resourceId?: string | number; trigger?: number; }; monthlySpecificMonth?: boolean; } export interface ICalendarProps { spaces: ISpace[]; widthChangeTrigger: boolean; slots: ISlotsEventsAndEventsWithSpaces; EventComponent: FC; DragOverlayComponent: FC; ResourceGroupHeader: FC; onChange: TOnChangeInCalender; options: IOptions; resourceId?: string | number; } export type TOnChangeInCalender = (data: T) => boolean | void; export interface IEventComponentProps { event: ISlot; } export interface IDragOverlayComponentProps { event: ISlot; hours?: string; } export interface ISlotsEventsAndEventsWithSpaces { eventsToSpaces: ISlotEventsToSpaces; events: ISlotsEvents; } export interface ISlotsEvents { [eventId: number]: ISlot; } export interface ISlotEventsToSpaces { [eventId: number]: ISlot[]; } export interface IDndProviderProps { children: ReactNode; DragOverlayComponent: FC; onChange?: TOnChangeInCalender; } export interface IDayToDropProps { id: string; EventComponent: FC; withoutChildren?: boolean; hiddenEvents?: boolean; onAddNewSlotClick?: TOnChangeInCalender; } export interface IWeekToDropProps { id: string; EventComponent: FC; } export interface ISpaceProps { state: ISpace; } export interface IDraggableProps { item: ISlot | undefined; delta?: number; Component: FC; } export interface IDroppableProps { id: string; dragging?: boolean; weekly?: boolean; height?: number | string; maxWidth?: number | string; } export interface IDraggableDayToDropProps { id: number; state: ISlot; parentId: number | string; groupTop?: number; groupCount?: number; groupIndex?: number; } export interface ClientXAndClientY { clientX: number; clientY: number; } export interface IDailyViewProps { spaces: ISpace[]; EventComponent: FC; onAddNewSlotClick?: TOnChangeInCalender; } export interface IEventsGroup { items: ISlot[]; item?: ISlot; groups?: ISlot[][]; height?: number; top?: number; } export interface IPartialRange { from: number; to: number; } export interface IPartialRanges { vertical: IPartialRange; horizontal: IPartialRange; } export type ElementHTML = HTMLElement | null | undefined; export interface IAsideContainerProps { width: number; bodyContainerHeight: number; verticalSpacesRef: RefObject; spaces: ISpace[]; ResourceGroupHeader: FC; } export interface IHeaderContainerProps { width: number; headerRef: RefObject; spaces: ISpace[]; ResourceGroupHeader: FC; resourceId?: string | number; } export interface ITimeLineProps { width: number; } export interface IAddNewSlotButtonsProps { events: string; onClick?: TOnChangeInCalender; horizontal?: boolean; parentId: string; } export interface IPlusButtonData { customLabel?: string; height: number; top: number; bottom: number; isEvent?: boolean; isGroup?: true; } export interface IHourBoxProps { date: dayjs.Dayjs; width: number; } export interface IMonthlyHeaderContainerProps { width: number; headerRef: RefObject; space: ISpace; ResourceGroupHeader: FC; } export interface IWeekBoxProps { weekNumber: number; width: number; horizontal?: boolean; } export interface IWeeklyDraggableProps { id: number; state: ISlot; parentId: number | string; } export interface IWeeklyViewProps { spaces: ISpace[]; EventComponent: FC; } export interface IUsePartialRenderProps { ref?: RefObject; elementSize: number; direction?: 'vertical' | 'horizontal'; disable?: boolean; } export interface IResizeOptions { step?: number; axis?: 'vertical' | 'horizontal' | 'both'; }