angular-bootstrap-italia
Version:
<p align="center"> <h1 align="center">Bootstrap Italia + Angular 9</h1>
90 lines • 16.2 kB
JavaScript
import { __decorate } from "tslib";
import { Component, Input } from '@angular/core';
let TimelineComponent = class TimelineComponent {
constructor() {
this.timeline = [];
}
ngOnInit() {
const arrayLastElem = this.timeHistory[this.timeHistory.length - 1];
this.lastElem = {
id: arrayLastElem.id,
datetime: arrayLastElem.datetime,
changes: arrayLastElem.changes,
user: arrayLastElem.user,
changesName: arrayLastElem.changes ? this.getElemChanges(arrayLastElem.changes) : null
};
this.timeHistory.forEach((elem, index) => {
if (index < this.timeHistory.length - 1) {
this.timeline.push({
id: elem.id,
datetime: elem.datetime,
user: elem.user,
changes: elem.changes,
changesName: elem.changes ? this.getElemChanges(elem.changes) : null
});
}
});
}
openDetailModal(item) {
const mainItemIndex = this.timeHistory.indexOf(this.timeHistory.find(elem => elem.id === item.id));
const previusElem = mainItemIndex - 1 >= 0 ? this.timeline[mainItemIndex - 1] : null;
this.modalDetails = [];
const keys = Object.keys(item.changes);
keys.forEach(key => {
if (this.changesDictionary[key]) {
this.modalDetails.push({
key: this.changesDictionary[key],
value: typeof item.changes[key] !== 'object'
? item.changes[key]
: this.translateObject(item.changes[key]),
oldValue: typeof item.changes[key] !== 'object'
? previusElem === null || previusElem === void 0 ? void 0 : previusElem.changes[key] : this.translateObject(previusElem === null || previusElem === void 0 ? void 0 : previusElem.changes[key]),
});
}
});
$('#timelineModal').modal('show');
}
translateObject(obj) {
if (obj) {
const translatedObj = {};
const keys = Object.keys(obj);
keys.forEach(key => {
if (this.changesDictionary[key]) {
translatedObj[this.changesDictionary[key]] = obj[key];
}
else {
translatedObj[key] = obj[key];
}
});
return translatedObj;
}
else {
return null;
}
}
getElemChanges(changes) {
const transaltedKeys = [];
const keys = Object.keys(changes);
keys.forEach(key => {
if (this.changesDictionary[key]) {
transaltedKeys.push(this.changesDictionary[key]);
}
});
return transaltedKeys.join(', ');
}
};
__decorate([
Input()
], TimelineComponent.prototype, "timeHistory", void 0);
__decorate([
Input()
], TimelineComponent.prototype, "changesDictionary", void 0);
TimelineComponent = __decorate([
Component({
selector: 'lib-timeline',
template: "<div class=\"it-timeline-wrapper\">\n <div class=\"row\">\n\n <div class=\"col-12\" *ngFor=\"let item of timeline; let i = index\">\n <div class=\"timeline-element\">\n <div class=\"it-pin-wrapper it-evidence\">\n <div class=\"pin-icon\">\n <svg class=\"icon\">\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-code-circle\"></use>\n </svg>\n </div>\n <div class=\"pin-text\"><span>{{ item.datetime }}</span></div>\n </div>\n <div class=\"card-wrapper\">\n <div class=\"card\">\n <div class=\"card-body\">\n <div class=\"category-top\">\n <p class=\"category\" *ngIf=\"i == 0\">Inserimento</p>\n <p class=\"category\" *ngIf=\"i > 0\">Modifica</p>\n </div>\n <h5 class=\"card-title\" *ngIf=\"item.changesName && i > 0\">Sono state apportate le seguenti modifiche: </h5>\n <p class=\"card-text\" *ngIf=\"item.changesName && i > 0\">{{ item.changesName }}</p>\n <span class=\"card-signature\">utente: {{ item.user }}</span>\n <a class=\"read-more\" href=\"javascript:void(0);\" (click)=\"openDetailModal(item)\">\n <span class=\"text\">Leggi di pi\u00F9</span>\n <svg class=\"icon\">\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-arrow-right\"></use>\n </svg>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"col-12\">\n <div class=\"timeline-element\">\n <span class=\"it-now-label d-none d-lg-flex\">Ultimo Aggiornamento</span>\n <div class=\"it-pin-wrapper it-now\">\n <div class=\"pin-icon\">\n <svg class=\"icon\">\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-code-circle\"></use>\n </svg>\n </div>\n <div class=\"pin-text\"><span>{{ lastElem.datetime }}</span></div>\n </div>\n <div class=\"card-wrapper\">\n <div class=\"card\">\n <div class=\"card-body\">\n <div class=\"category-top\">\n <p class=\"category\">Modifica</p>\n </div>\n <h5 class=\"card-title\">Sono state apportate le seguenti modifiche: </h5>\n <p class=\"card-text\">{{ lastElem.changesName }}</p>\n <span class=\"card-signature\">utente: {{ lastElem.user }}</span>\n <a class=\"read-more\" href=\"javascript:void(0);\" (click)=\"openDetailModal(lastElem)\">\n <span class=\"text\">Leggi di pi\u00F9</span>\n <svg class=\"icon\">\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-arrow-right\"></use>\n </svg>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n</div>\n\n<!-- Modal -->\n<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" id=\"timelineModal\" data-keyboard=\"false\" data-backdrop=\"static\">\n <div class=\"modal-dialog modal-dialog-centered modal-xl\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Elenco Modifiche Apportate:\n </h5>\n <button class=\"close\" type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\">\n <svg class=\"icon\">\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-close\"></use>\n </svg>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"link-list-wrapper\">\n <ul class=\"link-list\">\n <li *ngFor=\"let elem of modalDetails\">\n <svg class=\"icon icon-primary\">\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-chevron-right\"></use>\n </svg>\n <span class=\"font-weight-bold\">{{ elem.key }}: </span>\n {{ elem.value | json }}\n <span class=\"font-italic\" style=\"color: gray;\" *ngIf=\"elem.oldValue\">\n (valore precedente: {{ elem.oldValue | json }})\n </span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n</div>\n",
styles: [""]
})
], TimelineComponent);
export { TimelineComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1ib290c3RyYXAtaXRhbGlhLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvdGltZWxpbmUvdGltZWxpbmUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWV6RCxJQUFhLGlCQUFpQixHQUE5QixNQUFhLGlCQUFpQjtJQXdCNUI7UUFWQSxhQUFRLEdBTUYsRUFBRSxDQUFDO0lBSU8sQ0FBQztJQUVqQixRQUFRO1FBQ04sTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2QsRUFBRSxFQUFFLGFBQWEsQ0FBQyxFQUFFO1lBQ3BCLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUTtZQUNoQyxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU87WUFDOUIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJO1lBQ3hCLFdBQVcsRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUN2RixDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztvQkFDakIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUNYLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdkIsSUFB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QUM7UUFFMUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMvQixjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ2xEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUVGLENBQUE7QUF2R1U7SUFBUixLQUFLLEVBQUU7c0RBQTZCO0FBRTVCO0lBQVIsS0FBSyxFQUFFOzREQUF3QztBQUpyQyxpQkFBaUI7SUFMN0IsU0FBUyxDQUFDO1FBQ1QsUUFBUSxFQUFFLGNBQWM7UUFDeEIsd3hJQUF3Qzs7S0FFekMsQ0FBQztHQUNXLGlCQUFpQixDQXlHN0I7U0F6R1ksaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8vIGpRdWVyeVxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG4vLyBNb2RlbHNcbmltcG9ydCB7IElUaW1lSGlzdG9yeSB9IGZyb20gJy4vdGltZS1oaXN0b3J5Lm1vZGVsJztcbmltcG9ydCB7IElEaWN0aW9uYXJ5IH0gZnJvbSAnLi9kaWN0aW9uYXJ5Lm1vZGVsJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItdGltZWxpbmUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGltZWxpbmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90aW1lbGluZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRpbWVsaW5lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSB0aW1lSGlzdG9yeTogSVRpbWVIaXN0b3J5W107XG5cbiAgQElucHV0KCkgY2hhbmdlc0RpY3Rpb25hcnk6IElEaWN0aW9uYXJ5PHN0cmluZz47XG5cbiAgbGFzdEVsZW06IHtcbiAgICBpZDogYW55LFxuICAgIGRhdGV0aW1lOiBzdHJpbmcsXG4gICAgdXNlcjogc3RyaW5nLFxuICAgIGNoYW5nZXM6IG9iamVjdCxcbiAgICBjaGFuZ2VzTmFtZTogc3RyaW5nXG4gIH07XG5cbiAgdGltZWxpbmU6IHtcbiAgICBpZDogYW55LFxuICAgIGRhdGV0aW1lOiBzdHJpbmcsXG4gICAgdXNlcjogc3RyaW5nLFxuICAgIGNoYW5nZXM6IG9iamVjdCxcbiAgICBjaGFuZ2VzTmFtZTogc3RyaW5nXG4gIH1bXSA9IFtdO1xuXG4gIG1vZGFsRGV0YWlsczogYW55W107XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBhcnJheUxhc3RFbGVtID0gdGhpcy50aW1lSGlzdG9yeVt0aGlzLnRpbWVIaXN0b3J5Lmxlbmd0aCAtIDFdO1xuICAgIHRoaXMubGFzdEVsZW0gPSB7XG4gICAgICBpZDogYXJyYXlMYXN0RWxlbS5pZCxcbiAgICAgIGRhdGV0aW1lOiBhcnJheUxhc3RFbGVtLmRhdGV0aW1lLFxuICAgICAgY2hhbmdlczogYXJyYXlMYXN0RWxlbS5jaGFuZ2VzLFxuICAgICAgdXNlcjogYXJyYXlMYXN0RWxlbS51c2VyLFxuICAgICAgY2hhbmdlc05hbWU6IGFycmF5TGFzdEVsZW0uY2hhbmdlcyA/IHRoaXMuZ2V0RWxlbUNoYW5nZXMoYXJyYXlMYXN0RWxlbS5jaGFuZ2VzKSA6IG51bGxcbiAgICB9O1xuXG4gICAgdGhpcy50aW1lSGlzdG9yeS5mb3JFYWNoKChlbGVtLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4IDwgdGhpcy50aW1lSGlzdG9yeS5sZW5ndGggLSAxKSB7XG4gICAgICAgIHRoaXMudGltZWxpbmUucHVzaCh7XG4gICAgICAgICAgaWQ6IGVsZW0uaWQsXG4gICAgICAgICAgZGF0ZXRpbWU6IGVsZW0uZGF0ZXRpbWUsXG4gICAgICAgICAgdXNlcjogZWxlbS51c2VyLFxuICAgICAgICAgIGNoYW5nZXM6IGVsZW0uY2hhbmdlcyxcbiAgICAgICAgICBjaGFuZ2VzTmFtZTogZWxlbS5jaGFuZ2VzID8gdGhpcy5nZXRFbGVtQ2hhbmdlcyhlbGVtLmNoYW5nZXMpIDogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5EZXRhaWxNb2RhbChpdGVtKSB7XG4gICAgY29uc3QgbWFpbkl0ZW1JbmRleCA9IHRoaXMudGltZUhpc3RvcnkuaW5kZXhPZih0aGlzLnRpbWVIaXN0b3J5LmZpbmQoZWxlbSA9PiBlbGVtLmlkID09PSBpdGVtLmlkKSk7XG4gICAgY29uc3QgcHJldml1c0VsZW0gPSBtYWluSXRlbUluZGV4IC0gMSA+PSAwID8gdGhpcy50aW1lbGluZVttYWluSXRlbUluZGV4IC0gMV0gOiBudWxsO1xuXG4gICAgdGhpcy5tb2RhbERldGFpbHMgPSBbXTtcblxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpdGVtLmNoYW5nZXMpO1xuICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2hhbmdlc0RpY3Rpb25hcnlba2V5XSkge1xuICAgICAgICB0aGlzLm1vZGFsRGV0YWlscy5wdXNoKHtcbiAgICAgICAgICBrZXk6IHRoaXMuY2hhbmdlc0RpY3Rpb25hcnlba2V5XSxcbiAgICAgICAgICB2YWx1ZTogdHlwZW9mIGl0ZW0uY2hhbmdlc1trZXldICE9PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyBpdGVtLmNoYW5nZXNba2V5XVxuICAgICAgICAgICAgOiB0aGlzLnRyYW5zbGF0ZU9iamVjdChpdGVtLmNoYW5nZXNba2V5XSksXG4gICAgICAgICAgb2xkVmFsdWU6IHR5cGVvZiBpdGVtLmNoYW5nZXNba2V5XSAhPT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gcHJldml1c0VsZW0/LmNoYW5nZXNba2V5XVxuICAgICAgICAgICAgOiB0aGlzLnRyYW5zbGF0ZU9iamVjdChwcmV2aXVzRWxlbT8uY2hhbmdlc1trZXldKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAkKCcjdGltZWxpbmVNb2RhbCcpLm1vZGFsKCdzaG93Jyk7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zbGF0ZU9iamVjdChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkT2JqID0ge307XG5cbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNoYW5nZXNEaWN0aW9uYXJ5W2tleV0pIHtcbiAgICAgICAgICB0cmFuc2xhdGVkT2JqW3RoaXMuY2hhbmdlc0RpY3Rpb25hcnlba2V5XV0gPSBvYmpba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cmFuc2xhdGVkT2JqW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cmFuc2xhdGVkT2JqO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEVsZW1DaGFuZ2VzKGNoYW5nZXM6IG9iamVjdCkge1xuICAgIGNvbnN0IHRyYW5zYWx0ZWRLZXlzID0gW107XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY2hhbmdlcyk7XG4gICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VzRGljdGlvbmFyeVtrZXldKSB7XG4gICAgICAgIHRyYW5zYWx0ZWRLZXlzLnB1c2godGhpcy5jaGFuZ2VzRGljdGlvbmFyeVtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0cmFuc2FsdGVkS2V5cy5qb2luKCcsICcpO1xuICB9XG5cbn1cbiJdfQ==