UNPKG

react-big-schedule-fairshare

Version:

React Big Schedule is a powerful and intuitive scheduler and resource planning solution built with React. Seamlessly integrate this modern browser-compatible component into your applications to effectively manage time, appointments, and resources. With d

505 lines (479 loc) 14.3 kB
import { ConfigType, Dayjs, OptionType } from "dayjs"; import React, { CSSProperties } from "react"; export class Scheduler< EventType extends EventItem = EventItem, > extends React.Component<SchedulerProps<EventType>, any> {} export const AddMorePopover: <EventType extends EventItem = EventItem>( props: AddMorePopoverProps<EventType>, ) => React.ReactElement; export interface SchedulerProps<EventType extends EventItem = EventItem> { schedulerData: SchedulerData<EventType>; prevClick(schedulerData: SchedulerData<EventType>): void; nextClick(schedulerData: SchedulerData<EventType>): void; onSelectDate(schedulerData: SchedulerData<EventType>, date: string): void; onViewChange(schedulerData: SchedulerData<EventType>, view: View): void; eventItemClick?: ( schedulerData: SchedulerData<EventType>, event: EventType, ) => void; eventItemTemplateResolver?: ( schedulerData: SchedulerData<EventType>, event: EventType, bgColor: string, isStart: boolean, isEnd: boolean, mustAddCssClass: string, mustBeHeight: number, agendaMaxEventWidth: number, ) => void; eventItemPopoverTemplateResolver?: ( schedulerData: SchedulerData<EventType>, event: EventType, title: string, start: Dayjs, end: Dayjs, statusColor: string, ) => void; toggleExpandFunc?: ( schedulerData: SchedulerData<EventType>, slotId: string, ) => void; viewEventClick?: ( schedulerData: SchedulerData<EventType>, event: EventType, ) => void; viewEventText?: string; viewEvent2Text?: string; viewEvent2Click?: ( schedulerData: SchedulerData<EventType>, event: EventType, ) => void; updateEventStart?: ( schedulerData: SchedulerData<EventType>, event: EventType, newStart: string, ) => void; updateEventEnd?: ( schedulerData: SchedulerData<EventType>, event: EventType, newEnd: string, ) => void; moveEvent?: ( schedulerData: SchedulerData<EventType>, event: EventType, slotId: string, slotName: string, start: string, end: string, ) => void; newEvent?: ( schedulerData: SchedulerData<EventType>, slotId: string, slotName: string, start: string, end: string, type: string, item: EventType, ) => void; onScrollLeft?: ( schedulerData: SchedulerData<EventType>, schedulerContent: React.ReactNode, maxScrollLeft: number, ) => void; onScrollRight?: ( schedulerData: SchedulerData<EventType>, schedulerContent: React.ReactNode, maxScrollLeft: number, ) => void; onScrollTop?: ( schedulerData: SchedulerData<EventType>, schedulerContent: React.ReactNode, maxScrollTop: number, ) => void; onScrollBottom?: ( schedulerData: SchedulerData<EventType>, schedulerContent: React.ReactNode, maxScrollTop: number, ) => void; onSetAddMoreState?: (newState: State<EventType>) => void; conflictOccurred?: ( schedulerData: SchedulerData<EventType>, action: string, item: EventType, type: string, slotId: string, slotName: string, newStart: string, newEnd: string, ) => void; nonAgendaCellHeaderTemplateResolver?: ( schedulerData: SchedulerData<EventType>, item: { time: string; nonWorkingTime: boolean }, formattedDateItems: string[], style: CSSProperties, ) => void; subtitleGetter?: ( schedulerData: SchedulerData<EventType>, event: EventType, ) => void; movingEvent?: ( schedulerData: SchedulerData<EventType>, slotId: string, slotName: string, newStart: string, newEnd: string, action: string, type: string, item: EventType, ) => void; slotClickedFunc?: ( schedulerData: SchedulerData<EventType>, slot: ResourceEvent<EventType>, ) => void; slotItemTemplateResolver?: ( schedulerData: SchedulerData<EventType>, slot: ResourceEvent<EventType>, slotClickedFunc: ( schedulerData: SchedulerData<EventType>, slot: ResourceEvent<EventType>, ) => void, width: number, clsName: string, ) => void; leftCustomHeader?: React.ReactNode; rightCustomHeader?: React.ReactNode; dndSources?: DnDSource[]; parentRef?: React.RefObject<any>; } export interface AddMorePopoverProps<EventType extends EventItem = EventItem> { schedulerData: SchedulerData<EventType>; headerItem: HeaderItem<EventType>; left: number; top: number; height: number; closeAction: (newState: State<EventType>) => void; subtitleGetter?: SchedulerProps<EventType>["subtitleGetter"]; moveEvent?: SchedulerProps<EventType>["moveEvent"]; eventItemClick?: SchedulerProps<EventType>["eventItemClick"]; viewEventClick?: SchedulerProps<EventType>["viewEventClick"]; viewEventText?: string; viewEvent2Text?: string; viewEvent2Click?: SchedulerProps<EventType>["viewEvent2Click"]; eventItemTemplateResolver?: SchedulerProps<EventType>["eventItemTemplateResolver"]; } export class SchedulerData<EventType extends EventItem = EventItem> { localeDayjs(date?: ConfigType): Dayjs; localeDayjs(date?: ConfigType, format?: OptionType, strict?: boolean): Dayjs; localeDayjs( date?: ConfigType, format?: OptionType, locale?: string, strict?: boolean, ): Dayjs; cellUnit: CellUnit; viewType: ViewType; startDate: string; config: SchedulerDataConfig; resources: Resource[]; events: EventType[]; eventGroups: EventGroup<EventType>[]; eventGroupsAutoGenerated: boolean; showAgenda: boolean; isEventPerspective: boolean; resizing: boolean; scrollToSpecialDayjs: boolean; documentWidth: number; behaviors: SchedulerDataBehaviors<EventType>; constructor( date?: string | Dayjs, viewType?: ViewType, showAgenda?: boolean, isEventPerspective?: boolean, newConfig?: SchedulerDataConfig, newBehaviours?: SchedulerDataBehaviors<EventType>, ); setSchedulerLocale(preset: string | ILocale, object?: Partial<ILocale>): void; setCalendarPopoverLocale(lang: string): void; setResources(resources: Resource[]): void; setEvents(events: EventType[]): void; prev(): void; next(): void; setViewType( viewType?: ViewType, showAgenda?: boolean, isEventPerspective?: boolean, ): void; setDate(date?: string): void; setEventGroups(eventGroups: EventGroup<EventType>[]): void; setEventGroupsAutoGenerated(autoGenerated: boolean): void; setMinuteStep(minuteStep: number): void; getMinuteStepsInHour(): number; addEventGroup(eventGroup: EventGroup<EventType>): void; updateEventStart(event: EventType, newStart: string): void; updateEventEnd(event: EventType, newEnd: string): void; moveEvent( event: EventType, newSlotId: string, newSlotName: string, newStart: string, newEnd: string, ): void; getSlots(): EventGroup<EventType>[] | Resource[]; addResource(resource: Resource): void; getSlotById(slotId: string): EventType; toggleExpandStatus(slotId: string): void; removeEventById(eventId: string): void; removeEvent(event: EventType): void; isEventInTimeWindow( eventStart: Date | Dayjs, eventEnd: Date | Dayjs, windowStart: Date | Dayjs, windowEnd: Date | Dayjs, ): boolean; addEvent(newEvent: EventType): void; getResourceById(resourceId: string): ResourceEvent<EventType>; getViewStartDate(): Dayjs; getViewEndDate(): Dayjs; getViewDates(): { startDate: Dayjs; endDate: Dayjs }; } export class DnDContext { constructor(sources: DnDSource[], DecoratedComponent: React.ReactNode); } export class DnDSource { constructor( resolveDragObjFunc: (props: {}) => any, DecoratedComponent: React.ReactNode, dragAnDropEnabled: boolean, dndType: string, ); } export enum CellUnit { Day, Hour, } export enum ViewType { Day, Week, Month, Quarter, Year, Custom, Custom1, Custom2, } export interface View { viewName?: string; viewType: ViewType; showAgenda: boolean; isEventPerspective: boolean; } export interface EventGroup<EventType extends EventItem = EventItem> { id: string; name: string; state: EventType; } export interface EventItem { id: number | string; start: string; end: string; resourceId: string; title: string; bgColor?: string; rrule?: string; showPopover?: boolean; resizable?: boolean; movable?: boolean; startResizable?: boolean; endResizable?: boolean; groupId?: string; groupName?: string; /** * @deprecated This property should not be used as EXRULE has been [deprecated in RFC 5545](https://icalendar.org/iCalendar-RFC-5545/a-3-deprecated-features.html) and does not support a DTSTART property */ exrule?: string; exdates?: string[]; [x: string]: unknown; } export interface ResourceEvent<EventType extends EventItem = EventItem> { id: number; name: string; parentId?: string; groupOnly?: boolean; hasSummary?: boolean; expanded?: boolean; headerItems?: EventType[]; render?: boolean; rowHeight: number; rowMaxCount: number; } export interface Resource { id: string; name: string; parentId?: string; groupOnly?: boolean; } export interface HeaderItem<EventType extends EventItem = EventItem> { time: string; start: string; end: string; addMore: number; addMoreIndex: number; count: number; nonWorkingTime: boolean; events: EventType[]; } export interface HeaderEvent<EventType extends EventItem = EventItem> { render: boolean; span: number; eventItem: EventType; } export interface State<EventType extends EventItem = EventItem> { headerItem: HeaderItem<EventType>; left: number; top: number; height: number; } export interface SchedulerDataConfig { schedulerWidth?: `${number}%`; besidesWidth?: number; schedulerMaxHeight?: number; tableHeaderHeight?: number; schedulerContentHeight?: string | number; agendaResourceTableWidth?: string | number; agendaMaxEventWidth?: string | number; dayResourceTableWidth?: string | number; weekResourceTableWidth?: string | number; monthResourceTableWidth?: string | number; quarterResourceTableWidth?: string | number; yearResourceTableWidth?: string | number; customResourceTableWidth?: string | number; dayCellWidth?: string | number; weekCellWidth?: string | number; monthCellWidth?: string | number; quarterCellWidth?: string | number; yearCellWidth?: string | number; customCellWidth?: string | number; dayMaxEvents?: number; weekMaxEvents?: number; monthMaxEvents?: number; quarterMaxEvents?: number; yearMaxEvents?: number; customMaxEvents?: number; eventItemPopoverTrigger?: "hover" | "click"; eventItemPopoverPlacement?: | "topLeftMousePosition" | "bottomLeftMousePosition" | "topRightMousePosition" | "bottomRightMousePosition" | "top" | "left" | "right" | "bottom" | "topLeft" | "topRight" | "bottomLeft" | "bottomRight" | "leftTop" | "leftBottom" | "rightTop" | "rightBottom"; eventItemPopoverWidth?: number; eventItemHeight?: number; eventItemLineHeight?: number; nonAgendaSlotMinHeight?: number; dayStartFrom?: number; dayStopTo?: number; defaultEventBgColor?: string; selectedAreaColor?: string; nonWorkingTimeHeadColor?: string; nonWorkingTimeHeadBgColor?: string; nonWorkingTimeBodyBgColor?: string; summaryColor?: string; summaryPos?: SummaryPos; groupOnlySlotColor?: string; startResizable?: boolean; endResizable?: boolean; movable?: boolean; creatable?: boolean; crossResourceMove?: boolean; checkConflict?: boolean; scrollToSpecialDaysjsEnabled?: boolean; eventItemPopoverEnabled?: boolean; calendarPopoverEnabled?: boolean; recurringEventsEnabled?: boolean; viewChangeSpinEnabled?: boolean; dateChangeSpinEnabled?: boolean; headerEnabled?: boolean; resourceViewEnabled?: boolean; displayWeekend?: boolean; relativeMove?: boolean; defaultExpanded?: boolean; dragAndDropEnabled?: boolean; schedulerHeaderEventsFuncsTimeoutMs?: number; resourceName?: string; taskName?: string; agendaViewHeader?: string; addMorePopoverHeaderFormat?: string; eventItemPopoverDateFormat?: string; nonAgendaDayCellHeaderFormat?: string; nonAgendaOtherCellHeaderFormat?: string; minuteStep?: number; views?: View[]; responsiveByParent?: boolean; showSameDatesEvent?: boolean; } export enum SummaryPos { Top, TopRight, TopLeft, Bottom, BottomRight, BottomLeft, } export interface SchedulerDataBehaviors< EventType extends EventItem = EventItem, > { isNonWorkingTimeFunc?: ( schedulerData: SchedulerData<EventType>, time: string, ) => boolean; getCustomDateFunc?: ( schedulerData: SchedulerData<EventType>, num: number, date?: string | Dayjs, ) => { startDate: string | Dayjs; endDate: string | Dayjs; cellUnit: CellUnit; }; getEventTextFunc?: ( schedulerData: SchedulerData<EventType>, event: EventType, ) => string; getDateLabel?: ( schedulerData: SchedulerData<EventType>, viewType: ViewType, startDate: string | Date, endDate: string | Date, ) => string; getScrollSpecialDayjs?: ( schedulerData: SchedulerData<EventType>, startDayjs: Dayjs, endDays: Dayjs, ) => Dayjs; getSummaryFunc?: ( schedulerData: SchedulerData<EventType>, headerEvents: HeaderEvent<EventType>[], slotId: string, slotName: string, headerStart: string, headerEnd: string, ) => { text: string; color: string; fontSize: string }; getNonAgendaViewBodyCellBgColorFunc?: ( schedulerData: SchedulerData<EventType>, slotId: string, header: { nonWorkingTime: boolean; time: string }, ) => string; } export const DATE_FORMAT = "YYYY-MM-DD"; export const DATETIME_FORMAT = "YYYY-MM-DD HH:mm:ss";