Scheduling engine is written in TypeScript. It uses mixins extensively for code structuring, instead of classic single class inheritance.
Please refer to these blog posts: part1,
part2 to become familiar with the mixin pattern.
See also Chronograph docs
The core of the engine make use of ChronoGraph for the reactive calculations. ChronoGraph is
an extremely fast, open-source, reactive computational engine. Please refer to its documentation
to become familiar with the reactivity concept.
The scheduling logic is divided into 3 layers. Each layer extends the previous and includes all its features.
Scheduler basic
Scheduler Pro
Gantt
The central part of every layer, is entity called "Project". Project consists from several collections
of other entities. Collections are created as instances of the
Store class from the
Bryntum Core package, and individual entities are represented with
Model class.
The primary collections of the Project are:
Calendar manager store. This is a tree store, keeping all calendars of the Project.
The collection is represented with the ChronoCalendarManagerStoreMixin. The base entity is represented with the BaseCalendarMixin.
Resources store. This is a flat or tree store, keeping all resources of the Project.
The collection is represented with the ChronoResourceStoreMixin. The base entity is represented with the BaseResourceMixin.
Event store. This is a flat or tree store, keeping all events of the Project.
The collection is represented with the ChronoEventStoreMixin. The base entity is represented with the BaseEventMixin.
Assignment store. This is a flat store, keeping all assignments of the Project.
The collection is represented with the ChronoAssignmentStoreMixin. The base entity is represented with the BaseAssignmentMixin.
Dependency store. This is a flat store, keeping all dependencies of the Project.
The collection is represented with the ChronoDependencyStoreMixin. The base entity is represented with the BaseDependencyMixin.
The Project itself is represented with the AbstractProjectMixin. It is a regular Model, so it is capable of storing any project-wide
configuration options.
The classes mentioned above are base, meaning that they are gradually extended with new features.
Getting started with Bryntum Scheduling Engine
Introduction
Scheduling engine is written in TypeScript. It uses mixins extensively for code structuring, instead of classic single class inheritance. Please refer to these blog posts: part1, part2 to become familiar with the mixin pattern. See also Chronograph docs
The core of the engine make use of ChronoGraph for the reactive calculations. ChronoGraph is an extremely fast, open-source, reactive computational engine. Please refer to its documentation to become familiar with the reactivity concept.
Logical structure
The scheduling logic is divided into 3 layers. Each layer extends the previous and includes all its features.
The central part of every layer, is entity called "Project". Project consists from several collections of other entities. Collections are created as instances of the Store class from the Bryntum Core package, and individual entities are represented with Model class.
The primary collections of the Project are:
Calendar manager store. This is a tree store, keeping all calendars of the Project. The collection is represented with the ChronoCalendarManagerStoreMixin. The base entity is represented with the BaseCalendarMixin.
Resources store. This is a flat or tree store, keeping all resources of the Project. The collection is represented with the ChronoResourceStoreMixin. The base entity is represented with the BaseResourceMixin.
Event store. This is a flat or tree store, keeping all events of the Project. The collection is represented with the ChronoEventStoreMixin. The base entity is represented with the BaseEventMixin.
Assignment store. This is a flat store, keeping all assignments of the Project. The collection is represented with the ChronoAssignmentStoreMixin. The base entity is represented with the BaseAssignmentMixin.
Dependency store. This is a flat store, keeping all dependencies of the Project. The collection is represented with the ChronoDependencyStoreMixin. The base entity is represented with the BaseDependencyMixin.
The Project itself is represented with the AbstractProjectMixin. It is a regular
Model
, so it is capable of storing any project-wide configuration options.The classes mentioned above are base, meaning that they are gradually extended with new features.
Scheduler basic layer
At this layer there are the following features:
The project class of this layer: SchedulerBasicProjectMixin The event class of this layer: SchedulerBasicEvent
Scheduler Pro layer
At this layer there are the following features:
The project class of this layer: SchedulerProProjectMixin The event class of this layer: SchedulerProEvent
Gantt layer
At this layer there are the following features:
The project class of this layer: GanttProjectMixin The event class of this layer: GanttEvent
Creating a project
A project can be instantiated as any other class:
const project = new SchedulerProProjectMixin({ eventsData : [ { id : 'e1', name : 'Event1' }, { id : 'e2', name : 'Event2' } ], resourcesData : [ { id : 'r1', name : 'Resource1' } ], assignmentsData : [ { id : 'a1', event : 'e1', resource : 'r1' } ], dependenciesData : [ { id : 'd1', fromEvent : 'e1', toEvent : 'e2' } ] })
COPYRIGHT AND LICENSE
Copyright (c) 2018-2020, Bryntum
All rights reserved.