UNPKG

@daypilot/daypilot-lite-angular

Version:

DayPilot Lite for Angular

127 lines 13.8 kB
import { Component, EventEmitter, Input, Output } from "@angular/core"; import { DayPilot } from "./core/daypilot-core"; import { optHash, rand } from "./util"; import * as i0 from "@angular/core"; export class DayPilotNavigatorComponent { constructor() { this.events = []; this.dateChange = new EventEmitter(); this._requestUpdate = false; this._hashOptions = ""; this._hashEvents = ""; this._onTrs = null; this._dateSet = false; this._currentDate = null; this._date = DayPilot.Date.today(); this._id = "dp_" + new Date().getTime() + rand(); } get date() { return this._date; } // @Input() date: DayPilot.Date = DayPilot.Date.today(); set date(value) { this._date = value; this._dateSet = true; } get id() { return this._id; } ngOnInit() { } ngOnDestroy() { this.dispose(); } ngAfterViewInit() { this.dispose(); this.control = new DayPilot.Navigator(this.id); let component = this; this.updateOptions(); this.updateEvents(); let dp = this.control; this.control.onTimeRangeSelected = function (args) { // emit event component.dateChange.emit(args.day); // call the original if (component._onTrs) { component._onTrs.call(dp, args); } }; this._requestUpdate = false; // config just loaded and calling init(), no need to call update again this.control.init(); if (this.control.selectionDay !== DayPilot.Date.today()) { component.dateChange.emit(this.control.selectionDay); } } ngDoCheck() { if (!this.control) { return; } this.updateOptions(); this.updateEvents(); if (this._requestUpdate) { this.control.update(); this._requestUpdate = false; } } dispose() { if (this.control) { this.control.dispose(); //@ts-ignore this.control = null; } } updateOptions() { let dp = this.control; let hash = optHash(this.config); if (hash !== this._hashOptions) { for (let name in this.config) { if (name === "selectionDay") { continue; // ignore } if (name === "onTimeRangeSelected") { this._onTrs = this.config.onTimeRangeSelected; } else { dp[name] = this.config[name]; } this._requestUpdate = true; } } if (this._dateSet && this.date) { this._dateSet = false; this._currentDate = dp.selectionDay; dp.select(this.date); } this._hashOptions = hash; } updateEvents() { let hash = optHash(this.events); if (hash !== this._hashEvents) { let dp = this.control; dp.events.list = this.events; this._requestUpdate = true; } this._hashEvents = hash; } } DayPilotNavigatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: DayPilotNavigatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); DayPilotNavigatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.0", type: DayPilotNavigatorComponent, selector: "daypilot-navigator", inputs: { events: "events", config: "config", date: "date" }, outputs: { dateChange: "dateChange" }, ngImport: i0, template: ` <div id='{{id}}'></div>`, isInline: true, styles: [""] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: DayPilotNavigatorComponent, decorators: [{ type: Component, args: [{ selector: 'daypilot-navigator', template: ` <div id='{{id}}'></div>`, styles: [``] }] }], propDecorators: { events: [{ type: Input }], config: [{ type: Input }], dateChange: [{ type: Output }], date: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cGlsb3QtbmF2aWdhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RheXBpbG90L2RheXBpbG90LWxpdGUtYW5ndWxhci9zcmMvbGliL2RheXBpbG90LW5hdmlnYXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixTQUFTLEVBQVcsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQzs7QUFRckMsTUFBTSxPQUFPLDBCQUEwQjtJQU52QztRQVFXLFdBQU0sR0FBOEIsRUFBRSxDQUFDO1FBRXRDLGVBQVUsR0FBZ0MsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFFOUUsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsV0FBTSxHQUFRLElBQUksQ0FBQztRQUNuQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGlCQUFZLEdBQXlCLElBQUksQ0FBQztRQUUxQyxVQUFLLEdBQWtCLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFhN0MsUUFBRyxHQUFXLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0tBK0Y3RDtJQTFHQyxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELHdEQUF3RDtJQUN4RCxJQUNXLElBQUksQ0FBQyxLQUFvQjtRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJ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QUFRLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUM7WUFDcEMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEI7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDN0IsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN0QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQzs7dUhBeEhVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLCtKQUozQjs0QkFDZ0I7MkZBR2YsMEJBQTBCO2tCQU50QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFFBQVEsRUFBRTs0QkFDZ0I7b0JBQzFCLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztpQkFDYjs4QkFHVSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU07Z0JBaUJJLElBQUk7c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBEb0NoZWNrLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtEYXlQaWxvdH0gZnJvbSBcIi4vY29yZS9kYXlwaWxvdC1jb3JlXCI7XG5pbXBvcnQge29wdEhhc2gsIHJhbmR9IGZyb20gXCIuL3V0aWxcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF5cGlsb3QtbmF2aWdhdG9yJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGlkPSd7e2lkfX0nPjwvZGl2PmAsXG4gIHN0eWxlczogW2BgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXlQaWxvdE5hdmlnYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBEb0NoZWNrIHtcblxuICBASW5wdXQoKSBldmVudHM6IERheVBpbG90LkV2ZW50RGF0YVNob3J0W10gPSBbXTtcbiAgQElucHV0KCkgY29uZmlnOiBhbnk7XG4gIEBPdXRwdXQoKSBkYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF5UGlsb3QuRGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPERheVBpbG90LkRhdGU+KCk7XG4gIHB1YmxpYyBjb250cm9sITogRGF5UGlsb3QuTmF2aWdhdG9yO1xuICBwcml2YXRlIF9yZXF1ZXN0VXBkYXRlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2hhc2hPcHRpb25zOiBzdHJpbmcgPSBcIlwiO1xuICBwcml2YXRlIF9oYXNoRXZlbnRzOiBzdHJpbmcgPSBcIlwiO1xuICBwcml2YXRlIF9vblRyczogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBfZGF0ZVNldDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9jdXJyZW50RGF0ZTogRGF5UGlsb3QuRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2RhdGU6IERheVBpbG90LkRhdGUgPSBEYXlQaWxvdC5EYXRlLnRvZGF5KCk7XG5cbiAgcHVibGljIGdldCBkYXRlKCk6IERheVBpbG90LkRhdGUge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgLy8gQElucHV0KCkgZGF0ZTogRGF5UGlsb3QuRGF0ZSA9IERheVBpbG90LkRhdGUudG9kYXkoKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRlKHZhbHVlOiBEYXlQaWxvdC5EYXRlKSB7XG4gICAgdGhpcy5fZGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuX2RhdGVTZXQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfaWQ6IHN0cmluZyA9IFwiZHBfXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIHJhbmQoKTtcblxuICBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgICB0aGlzLmNvbnRyb2wgPSBuZXcgRGF5UGlsb3QuTmF2aWdhdG9yKHRoaXMuaWQpO1xuICAgIGxldCBjb21wb25lbnQgPSB0aGlzO1xuXG4gICAgdGhpcy51cGRhdGVPcHRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVFdmVudHMoKTtcbiAgICBsZXQgZHAgPSB0aGlzLmNvbnRyb2w7XG4gICAgdGhpcy5jb250cm9sLm9uVGltZVJhbmdlU2VsZWN0ZWQgPSBmdW5jdGlvbiAoYXJncykge1xuICAgICAgLy8gZW1pdCBldmVudFxuICAgICAgY29tcG9uZW50LmRhdGVDaGFuZ2UuZW1pdChhcmdzLmRheSk7XG4gICAgICAvLyBjYWxsIHRoZSBvcmlnaW5hbFxuICAgICAgaWYgKGNvbXBvbmVudC5fb25UcnMpIHtcbiAgICAgICAgY29tcG9uZW50Ll9vblRycy5jYWxsKGRwLCBhcmdzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX3JlcXVlc3RVcGRhdGUgPSBmYWxzZTsgLy8gY29uZmlnIGp1c3QgbG9hZGVkIGFuZCBjYWxsaW5nIGluaXQoKSwgbm8gbmVlZCB0byBjYWxsIHVwZGF0ZSBhZ2FpblxuICAgIHRoaXMuY29udHJvbC5pbml0KCk7XG5cbiAgICBpZiAodGhpcy5jb250cm9sLnNlbGVjdGlvbkRheSAhPT0gRGF5UGlsb3QuRGF0ZS50b2RheSgpKSB7XG4gICAgICBjb21wb25lbnQuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuY29udHJvbC5zZWxlY3Rpb25EYXkpO1xuICAgIH1cblxuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250cm9sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgIHRoaXMudXBkYXRlRXZlbnRzKCk7XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RVcGRhdGUpIHtcbiAgICAgIHRoaXMuY29udHJvbC51cGRhdGUoKTtcbiAgICAgIHRoaXMuX3JlcXVlc3RVcGRhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICB0aGlzLmNvbnRyb2wuZGlzcG9zZSgpO1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB0aGlzLmNvbnRyb2wgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlT3B0aW9ucygpOiB2b2lkIHtcbiAgICBsZXQgZHAgPSB0aGlzLmNvbnRyb2wgYXMgYW55O1xuICAgIGxldCBoYXNoID0gb3B0SGFzaCh0aGlzLmNvbmZpZyk7XG5cbiAgICBpZiAoaGFzaCAhPT0gdGhpcy5faGFzaE9wdGlvbnMpIHtcbiAgICAgIGZvciAobGV0IG5hbWUgaW4gdGhpcy5jb25maWcpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IFwic2VsZWN0aW9uRGF5XCIpIHtcbiAgICAgICAgICBjb250aW51ZTsgLy8gaWdub3JlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUgPT09IFwib25UaW1lUmFuZ2VTZWxlY3RlZFwiKSB7XG4gICAgICAgICAgdGhpcy5fb25UcnMgPSB0aGlzLmNvbmZpZy5vblRpbWVSYW5nZVNlbGVjdGVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRwW25hbWVdID0gdGhpcy5jb25maWdbbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVxdWVzdFVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RhdGVTZXQgJiYgdGhpcy5kYXRlKSB7XG4gICAgICB0aGlzLl9kYXRlU2V0ID0gZmFsc2U7XG4gICAgICB0aGlzLl9jdXJyZW50RGF0ZSA9IGRwLnNlbGVjdGlvbkRheTtcbiAgICAgIGRwLnNlbGVjdCh0aGlzLmRhdGUpO1xuICAgIH1cblxuICAgIHRoaXMuX2hhc2hPcHRpb25zID0gaGFzaDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRXZlbnRzKCk6IHZvaWQge1xuICAgIGxldCBoYXNoID0gb3B0SGFzaCh0aGlzLmV2ZW50cyk7XG4gICAgaWYgKGhhc2ggIT09IHRoaXMuX2hhc2hFdmVudHMpIHtcbiAgICAgIGxldCBkcCA9IHRoaXMuY29udHJvbDtcbiAgICAgIGRwLmV2ZW50cy5saXN0ID0gdGhpcy5ldmVudHM7XG4gICAgICB0aGlzLl9yZXF1ZXN0VXBkYXRlID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5faGFzaEV2ZW50cyA9IGhhc2g7XG4gIH1cbn1cbiJdfQ==