{"version":3,"file":"c8y-ngx-components-context-dashboard-dashboard-version-history.component--1OYYpR2.mjs","sources":["../../context-dashboard/dashboard-settings/dashboard-version-history.component.ts","../../context-dashboard/dashboard-settings/dashboard-version-history.component.html"],"sourcesContent":["import { Component } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { C8yTranslatePipe, CoreModule } from '@c8y/ngx-components';\nimport { ContextDashboard } from '../context-dashboard.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep } from 'lodash-es';\nimport { ContextDashboardService } from '../context-dashboard.service';\nimport { DashboardDetailService } from '../dashboard-detail.service';\n\n@Component({\n  selector: 'c8y-dashboard-version-history',\n  templateUrl: './dashboard-version-history.component.html',\n  standalone: true,\n  imports: [C8yTranslatePipe, CoreModule]\n})\nexport class DashboardVersionHistoryComponent {\n  dashboardHistory: ContextDashboard[] = [];\n  isReport: boolean;\n  dashboardHistoryExtended: (ContextDashboard & { descriptionText?: string })[] = [];\n  restoredDashboardMessage = gettext(\n    'Restored dashboard state from {{ restoredStateCreationDate }}'\n  );\n  versionHistoryLimitMessage = gettext(\n    'Store up to {{ versionHistoryLimit }} dashboard versions. Any additional versions will replace/delete older ones'\n  );\n\n  constructor(\n    private translateService: TranslateService,\n    public contextDashboardService: ContextDashboardService,\n    private dashboardDetailService: DashboardDetailService\n  ) {}\n\n  ngOnInit() {\n    this.isReport = this.dashboardDetailService.details.isReport;\n    this.dashboardHistory = this.dashboardDetailService.details.mo.c8y_DashboardHistory;\n    this.generateDashboardHistoryDescription();\n  }\n\n  generateDashboardHistoryDescription() {\n    for (const dashboard of this.dashboardHistory) {\n      const copiedDashboard: ContextDashboard & { descriptionText?: string } = { ...dashboard };\n\n      let settingChangesMessage = '';\n      let assetModelMessage = '';\n      let widgetChanges = '';\n\n      if (dashboard.historyDescription.changeType === 'create') {\n        copiedDashboard.descriptionText = this.translateService.instant(\n          this.isReport ? gettext('Report created.') : gettext('Dashboard created.')\n        );\n        this.dashboardHistoryExtended.push(copiedDashboard);\n        continue;\n      }\n      if (dashboard.historyDescription.changeType === 'reset') {\n        copiedDashboard.descriptionText = this.translateService.instant(gettext('Reset widgets'));\n        this.dashboardHistoryExtended.push(copiedDashboard);\n        continue;\n      }\n\n      const isDashboardUpdated = dashboard.historyDescription.dashboardSettingChanges?.length > 0;\n      if (isDashboardUpdated) {\n        const translatedValuesChanged = dashboard.historyDescription.dashboardSettingChanges\n          .map(val => this.translateService.instant(val))\n          .join(', ');\n        settingChangesMessage = this.translateService.instant(\n          this.isReport\n            ? gettext('Report updated: {{ values }}.')\n            : gettext('Dashboard updated: {{ values }}.'),\n          { values: translatedValuesChanged }\n        );\n      }\n\n      const isDeviceDashboard = dashboard.historyDescription.deviceType != null && !this.isReport;\n      if (isDeviceDashboard) {\n        assetModelMessage = this.translateService.instant(\n          dashboard.historyDescription.deviceType\n            ? gettext('Dashboard asset model has been enabled.')\n            : gettext('Dashboard asset model has been disabled.')\n        );\n      }\n\n      if (dashboard.historyDescription.widgetChanges) {\n        for (const change in dashboard.historyDescription.widgetChanges) {\n          const widgetList = dashboard.historyDescription.widgetChanges[change];\n          if (!widgetList) {\n            continue;\n          }\n          const translatedWidgetList = dashboard.translateWidgetTitle\n            ? widgetList.map(widget => this.translateService.instant(widget))\n            : widgetList;\n          switch (change) {\n            case 'added':\n              widgetChanges =\n                widgetChanges +\n                this.translateService.instant(gettext('Added widgets: {{ widgetList }}. '), {\n                  widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n                });\n              break;\n            case 'removed':\n              widgetChanges =\n                widgetChanges +\n                this.translateService.instant(gettext('Removed widgets: {{ widgetList }}. '), {\n                  widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n                });\n              break;\n            case 'config':\n              widgetChanges =\n                widgetChanges +\n                this.translateService.instant(gettext('Updated widgets: {{ widgetList }}. '), {\n                  widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n                });\n              break;\n            case 'arrangement':\n              widgetChanges =\n                widgetChanges +\n                this.translateService.instant(gettext('Rearranged widgets: {{ widgetList }}. '), {\n                  widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n                });\n              break;\n            default:\n              break;\n          }\n        }\n      }\n\n      copiedDashboard.descriptionText = `${settingChangesMessage} ${assetModelMessage} ${widgetChanges}`;\n      this.dashboardHistoryExtended.push(copiedDashboard);\n    }\n  }\n\n  revertDashboard(dashboard: ContextDashboard) {\n    const newDashboard = cloneDeep(dashboard);\n    newDashboard.historyDescription.restored = dashboard.created;\n    this.dashboardDetailService.revertToDashboardFn(newDashboard);\n  }\n}\n","<div class=\"bg-component p-t-8 p-b-8 separator-bottom text-center\">\n  <i\n    class=\"text-info m-r-4\"\n    c8yIcon=\"info\"\n  ></i>\n  {{\n    versionHistoryLimitMessage\n      | translate: { versionHistoryLimit: contextDashboardService.VERSION_HISTORY_SIZE_LIMIT }\n  }}\n</div>\n<c8y-list-group class=\"p-t-24 p-b-24\">\n  <c8y-li-timeline\n    *ngFor=\"let dashboard of dashboardHistoryExtended; index as i\"\n    [ngClass]=\"{ active: i === 0 }\"\n  >\n    {{ dashboard.created | date: 'mediumDate' }}\n    {{ dashboard.created | date: 'shortTime' }}\n    <c8y-li data-cy=\"c8y-dashboard-version-history--history-row\">\n      <c8y-li-body>\n        <div class=\"d-flex a-i-start\">\n          <div class=\"flex-grow\">\n            <span\n              class=\"text-truncate-wrap\"\n              title=\"{{ dashboard.descriptionText }}\"\n              data-cy=\"c8y-dashboard-version-history--history-title\"\n            >\n              {{ dashboard.descriptionText }}\n              {{\n                dashboard.historyDescription.restored\n                  ? (restoredDashboardMessage\n                    | translate\n                      : {\n                          restoredStateCreationDate: dashboard.historyDescription.restored | c8yDate\n                        })\n                  : ''\n              }}\n            </span>\n            <small\n              class=\"text-muted\"\n              title=\"{{ 'by`user`' | translate }} {{ dashboard.author }}\"\n              *ngIf=\"dashboard.author\"\n            >\n              <div class=\"icon-flex\">\n                <i c8yIcon=\"c8y-user\"></i>\n                {{ dashboard.author }}\n              </div>\n            </small>\n          </div>\n\n          <span\n            class=\"label label-primary m-l-auto\"\n            title=\"{{ 'The last saved status of the dashboard' | translate }}\"\n            *ngIf=\"i === 0\"\n          >\n            {{ 'Current`dashboard status`' | translate }}\n          </span>\n          <span\n            class=\"m-l-auto showOnHover\"\n            *ngIf=\"dashboardHistoryExtended.length > 1 && i > 0\"\n          >\n            <button\n              class=\"btn btn-default btn-sm\"\n              title=\"{{ 'Restore the dashboard to this status' | translate }}\"\n              type=\"button\"\n              (click)=\"revertDashboard(dashboard)\"\n            >\n              {{ 'Restore' | translate }}\n            </button>\n          </span>\n        </div>\n      </c8y-li-body>\n    </c8y-li>\n  </c8y-li-timeline>\n</c8y-list-group>\n"],"names":["i1","i2.ContextDashboardService","i3.DashboardDetailService","i5","i4"],"mappings":"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"}