@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
87 lines • 8.98 kB
JavaScript
import { Injectable } from '@angular/core';
import { DashboardOriginatorService } from './dashboard-originator.service';
import * as i0 from "@angular/core";
import * as i1 from "./dashboard-originator.service";
/**
* Caretaker is responsible for undo and redo functionalities.
*/
export class DashboardCaretakerService {
/**
* Current undo stack length for defining undo button disable state.
*/
get undoStackLength() {
return this.undoStack.length;
}
/**
* Redo stack latest item for defining redo button disable state and its' title.
*/
get redoStackLastItem() {
return this.redoStack[this.redoStack.length - 1];
}
constructor(originator) {
this.originator = originator;
/**
* List of dashboard children changes.
* @private
*/
this.undoStack = [];
/**
* List of dashboard children changes that were undone and can be redone back.
* @private
*/
this.redoStack = [];
}
/**
* Adds current dashboard children state to undo stack and clears redo stack.
*/
backup() {
this.undoStack.push(this.originator.getState());
this.redoStack = [];
}
/**
* Reverts last dashboard children change and puts it in redo stack.
* @returns Current state of dashboard children after reverting last change.
*/
undo() {
if (!this.undoStack.length) {
return;
}
const memento = this.undoStack.pop();
this.redoStack.push(this.originator.getState());
this.originator.setState(memento);
return memento;
}
/**
* Applies previously undone change.
* @returns Current state of dashboard children after applying previously undone change.
*/
redo() {
if (!this.redoStack.length) {
return;
}
this.undoStack.push(this.originator.getState());
const memento = this.redoStack.pop();
this.originator.setState(memento);
return memento;
}
/**
* Clears both undo and redo stack, sets current state as initial state and returns initial state.
* @returns Initial state of dashboard children.
*/
reset() {
const initialItem = this.undoStack[0] || this.originator.getState();
this.undoStack = [];
this.redoStack = [];
this.originator.initState(initialItem);
return initialItem;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DashboardCaretakerService, deps: [{ token: i1.DashboardOriginatorService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DashboardCaretakerService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DashboardCaretakerService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.DashboardOriginatorService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWNhcmV0YWtlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvbWVtZW50by9kYXNoYm9hcmQtY2FyZXRha2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7O0FBRTVFOztHQUVHO0FBSUgsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQzs7T0FFRztJQUNILElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFDRDs7T0FFRztJQUNILElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBWUQsWUFBb0IsVUFBc0M7UUFBdEMsZUFBVSxHQUFWLFVBQVUsQ0FBNEI7UUFYMUQ7OztXQUdHO1FBQ0ssY0FBUyxHQUE2QixFQUFFLENBQUM7UUFDakQ7OztXQUdHO1FBQ0ssY0FBUyxHQUE2QixFQUFFLENBQUM7SUFFWSxDQUFDO0lBQzlEOztPQUVHO0lBQ0gsTUFBTTtRQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsSUFBSTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNEOzs7T0FHRztJQUNILElBQUk7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXJDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFDRDs7O09BR0c7SUFDSCxLQUFLO1FBQ0gsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7K0dBdEVVLHlCQUF5QjttSEFBekIseUJBQXlCLGNBRnhCLE1BQU07OzRGQUVQLHlCQUF5QjtrQkFIckMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDaGlsZHJlblN0YXRlIH0gZnJvbSAnLi4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuaW1wb3J0IHsgRGFzaGJvYXJkT3JpZ2luYXRvclNlcnZpY2UgfSBmcm9tICcuL2Rhc2hib2FyZC1vcmlnaW5hdG9yLnNlcnZpY2UnO1xuXG4vKipcbiAqIENhcmV0YWtlciBpcyByZXNwb25zaWJsZSBmb3IgdW5kbyBhbmQgcmVkbyBmdW5jdGlvbmFsaXRpZXMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERhc2hib2FyZENhcmV0YWtlclNlcnZpY2Uge1xuICAvKipcbiAgICogQ3VycmVudCB1bmRvIHN0YWNrIGxlbmd0aCBmb3IgZGVmaW5pbmcgdW5kbyBidXR0b24gZGlzYWJsZSBzdGF0ZS5cbiAgICovXG4gIGdldCB1bmRvU3RhY2tMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy51bmRvU3RhY2subGVuZ3RoO1xuICB9XG4gIC8qKlxuICAgKiBSZWRvIHN0YWNrIGxhdGVzdCBpdGVtIGZvciBkZWZpbmluZyByZWRvIGJ1dHRvbiBkaXNhYmxlIHN0YXRlIGFuZCBpdHMnIHRpdGxlLlxuICAgKi9cbiAgZ2V0IHJlZG9TdGFja0xhc3RJdGVtKCk6IERhc2hib2FyZENoaWxkcmVuU3RhdGUge1xuICAgIHJldHVybiB0aGlzLnJlZG9TdGFja1t0aGlzLnJlZG9TdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuICAvKipcbiAgICogTGlzdCBvZiBkYXNoYm9hcmQgY2hpbGRyZW4gY2hhbmdlcy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgdW5kb1N0YWNrOiBEYXNoYm9hcmRDaGlsZHJlblN0YXRlW10gPSBbXTtcbiAgLyoqXG4gICAqIExpc3Qgb2YgZGFzaGJvYXJkIGNoaWxkcmVuIGNoYW5nZXMgdGhhdCB3ZXJlIHVuZG9uZSBhbmQgY2FuIGJlIHJlZG9uZSBiYWNrLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSByZWRvU3RhY2s6IERhc2hib2FyZENoaWxkcmVuU3RhdGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb3JpZ2luYXRvcjogRGFzaGJvYXJkT3JpZ2luYXRvclNlcnZpY2UpIHt9XG4gIC8qKlxuICAgKiBBZGRzIGN1cnJlbnQgZGFzaGJvYXJkIGNoaWxkcmVuIHN0YXRlIHRvIHVuZG8gc3RhY2sgYW5kIGNsZWFycyByZWRvIHN0YWNrLlxuICAgKi9cbiAgYmFja3VwKCk6IHZvaWQge1xuICAgIHRoaXMudW5kb1N0YWNrLnB1c2godGhpcy5vcmlnaW5hdG9yLmdldFN0YXRlKCkpO1xuICAgIHRoaXMucmVkb1N0YWNrID0gW107XG4gIH1cbiAgLyoqXG4gICAqIFJldmVydHMgbGFzdCBkYXNoYm9hcmQgY2hpbGRyZW4gY2hhbmdlIGFuZCBwdXRzIGl0IGluIHJlZG8gc3RhY2suXG4gICAqIEByZXR1cm5zIEN1cnJlbnQgc3RhdGUgb2YgZGFzaGJvYXJkIGNoaWxkcmVuIGFmdGVyIHJldmVydGluZyBsYXN0IGNoYW5nZS5cbiAgICovXG4gIHVuZG8oKTogRGFzaGJvYXJkQ2hpbGRyZW5TdGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnVuZG9TdGFjay5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWVtZW50byA9IHRoaXMudW5kb1N0YWNrLnBvcCgpO1xuICAgIHRoaXMucmVkb1N0YWNrLnB1c2godGhpcy5vcmlnaW5hdG9yLmdldFN0YXRlKCkpO1xuXG4gICAgdGhpcy5vcmlnaW5hdG9yLnNldFN0YXRlKG1lbWVudG8pO1xuICAgIHJldHVybiBtZW1lbnRvO1xuICB9XG4gIC8qKlxuICAgKiBBcHBsaWVzIHByZXZpb3VzbHkgdW5kb25lIGNoYW5nZS5cbiAgICogQHJldHVybnMgQ3VycmVudCBzdGF0ZSBvZiBkYXNoYm9hcmQgY2hpbGRyZW4gYWZ0ZXIgYXBwbHlpbmcgcHJldmlvdXNseSB1bmRvbmUgY2hhbmdlLlxuICAgKi9cbiAgcmVkbygpOiBEYXNoYm9hcmRDaGlsZHJlblN0YXRlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucmVkb1N0YWNrLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnVuZG9TdGFjay5wdXNoKHRoaXMub3JpZ2luYXRvci5nZXRTdGF0ZSgpKTtcbiAgICBjb25zdCBtZW1lbnRvID0gdGhpcy5yZWRvU3RhY2sucG9wKCk7XG5cbiAgICB0aGlzLm9yaWdpbmF0b3Iuc2V0U3RhdGUobWVtZW50byk7XG4gICAgcmV0dXJuIG1lbWVudG87XG4gIH1cbiAgLyoqXG4gICAqIENsZWFycyBib3RoIHVuZG8gYW5kIHJlZG8gc3RhY2ssIHNldHMgY3VycmVudCBzdGF0ZSBhcyBpbml0aWFsIHN0YXRlIGFuZCByZXR1cm5zIGluaXRpYWwgc3RhdGUuXG4gICAqIEByZXR1cm5zIEluaXRpYWwgc3RhdGUgb2YgZGFzaGJvYXJkIGNoaWxkcmVuLlxuICAgKi9cbiAgcmVzZXQoKSB7XG4gICAgY29uc3QgaW5pdGlhbEl0ZW0gPSB0aGlzLnVuZG9TdGFja1swXSB8fCB0aGlzLm9yaWdpbmF0b3IuZ2V0U3RhdGUoKTtcbiAgICB0aGlzLnVuZG9TdGFjayA9IFtdO1xuICAgIHRoaXMucmVkb1N0YWNrID0gW107XG4gICAgdGhpcy5vcmlnaW5hdG9yLmluaXRTdGF0ZShpbml0aWFsSXRlbSk7XG4gICAgcmV0dXJuIGluaXRpYWxJdGVtO1xuICB9XG59XG4iXX0=