UNPKG

react-big-schedule

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

380 lines (354 loc) 13.6 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; underneathHeight?: 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; } 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';