From aabcb3dc8c60beab90238c86d08b492103a2bd81 Mon Sep 17 00:00:00 2001
From: Florent Poittevin <florent.poittevin@unige.ch>
Date: Wed, 9 Mar 2022 09:24:02 +0100
Subject: [PATCH] feat: display changelog into update dialog

---
 package-lock.json                             | 107 ++++++++++++++++++
 package.json                                  |   5 +-
 projects/solidify-frontend/package.json       |   1 +
 .../update-version/update-version.dialog.html |   4 +
 .../update-version/update-version.dialog.scss |  50 ++++++++
 .../update-version/update-version.dialog.ts   |  13 +++
 6 files changed, 178 insertions(+), 2 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 8963ed56e..766366ae4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -81,6 +81,7 @@
         "karma-jasmine": "4.0.1",
         "karma-jasmine-html-reporter": "1.7.0",
         "license-checker-rseidelsohn": "3.1.0",
+        "markdown-it": "12.3.2",
         "ng-packagr": "13.2.1",
         "patch-package": "6.4.7",
         "protractor": "7.0.0",
@@ -13840,6 +13841,16 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/linkify-it": {
+      "version": "3.0.3",
+      "resolved": "https://nexus.unige.ch/repository/npm-all/linkify-it/-/linkify-it-3.0.3.tgz",
+      "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "uc.micro": "^1.0.1"
+      }
+    },
     "node_modules/load-json-file": {
       "version": "4.0.0",
       "resolved": "https://nexus.unige.ch/repository/npm-all/load-json-file/-/load-json-file-4.0.0.tgz",
@@ -14200,6 +14211,47 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/markdown-it": {
+      "version": "12.3.2",
+      "resolved": "https://nexus.unige.ch/repository/npm-all/markdown-it/-/markdown-it-12.3.2.tgz",
+      "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "argparse": "^2.0.1",
+        "entities": "~2.1.0",
+        "linkify-it": "^3.0.1",
+        "mdurl": "^1.0.1",
+        "uc.micro": "^1.0.5"
+      },
+      "bin": {
+        "markdown-it": "bin/markdown-it.js"
+      }
+    },
+    "node_modules/markdown-it/node_modules/argparse": {
+      "version": "2.0.1",
+      "resolved": "https://nexus.unige.ch/repository/npm-all/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+      "dev": true,
+      "license": "Python-2.0"
+    },
+    "node_modules/markdown-it/node_modules/entities": {
+      "version": "2.1.0",
+      "resolved": "https://nexus.unige.ch/repository/npm-all/entities/-/entities-2.1.0.tgz",
+      "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/mdurl": {
+      "version": "1.0.1",
+      "resolved": "https://nexus.unige.ch/repository/npm-all/mdurl/-/mdurl-1.0.1.tgz",
+      "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/media-typer": {
       "version": "0.3.0",
       "resolved": "https://nexus.unige.ch/repository/npm-all/media-typer/-/media-typer-0.3.0.tgz",
@@ -20755,6 +20807,13 @@
         "node": "*"
       }
     },
+    "node_modules/uc.micro": {
+      "version": "1.0.6",
+      "resolved": "https://nexus.unige.ch/repository/npm-all/uc.micro/-/uc.micro-1.0.6.tgz",
+      "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/uglify-js": {
       "version": "3.15.0",
       "resolved": "https://nexus.unige.ch/repository/npm-all/uglify-js/-/uglify-js-3.15.0.tgz",
@@ -31526,6 +31585,15 @@
       "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
       "dev": true
     },
+    "linkify-it": {
+      "version": "3.0.3",
+      "resolved": "https://nexus.unige.ch/repository/npm-all/linkify-it/-/linkify-it-3.0.3.tgz",
+      "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
+      "dev": true,
+      "requires": {
+        "uc.micro": "^1.0.1"
+      }
+    },
     "load-json-file": {
       "version": "4.0.0",
       "resolved": "https://nexus.unige.ch/repository/npm-all/load-json-file/-/load-json-file-4.0.0.tgz",
@@ -31784,6 +31852,39 @@
         "object-visit": "^1.0.0"
       }
     },
+    "markdown-it": {
+      "version": "12.3.2",
+      "resolved": "https://nexus.unige.ch/repository/npm-all/markdown-it/-/markdown-it-12.3.2.tgz",
+      "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
+      "dev": true,
+      "requires": {
+        "argparse": "^2.0.1",
+        "entities": "~2.1.0",
+        "linkify-it": "^3.0.1",
+        "mdurl": "^1.0.1",
+        "uc.micro": "^1.0.5"
+      },
+      "dependencies": {
+        "argparse": {
+          "version": "2.0.1",
+          "resolved": "https://nexus.unige.ch/repository/npm-all/argparse/-/argparse-2.0.1.tgz",
+          "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+          "dev": true
+        },
+        "entities": {
+          "version": "2.1.0",
+          "resolved": "https://nexus.unige.ch/repository/npm-all/entities/-/entities-2.1.0.tgz",
+          "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
+          "dev": true
+        }
+      }
+    },
+    "mdurl": {
+      "version": "1.0.1",
+      "resolved": "https://nexus.unige.ch/repository/npm-all/mdurl/-/mdurl-1.0.1.tgz",
+      "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
+      "dev": true
+    },
     "media-typer": {
       "version": "0.3.0",
       "resolved": "https://nexus.unige.ch/repository/npm-all/media-typer/-/media-typer-0.3.0.tgz",
@@ -36360,6 +36461,12 @@
       "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==",
       "dev": true
     },
+    "uc.micro": {
+      "version": "1.0.6",
+      "resolved": "https://nexus.unige.ch/repository/npm-all/uc.micro/-/uc.micro-1.0.6.tgz",
+      "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
+      "dev": true
+    },
     "uglify-js": {
       "version": "3.15.0",
       "resolved": "https://nexus.unige.ch/repository/npm-all/uglify-js/-/uglify-js-3.15.0.tgz",
diff --git a/package.json b/package.json
index 419bbc50e..15b05c888 100644
--- a/package.json
+++ b/package.json
@@ -82,8 +82,8 @@
     "@angular/cli": "13.2.1",
     "@angular/compiler-cli": "13.2.1",
     "@angular/language-service": "13.2.1",
-    "@commitlint/cli": "16.1.0",
-    "@commitlint/config-conventional": "16.0.0",
+    "@commitlint/cli": "16.2.1",
+    "@commitlint/config-conventional": "16.2.1",
     "@schematics/angular": "13.2.1",
     "@types/jasmine": "3.10.3",
     "@types/jasminewd2": "2.0.10",
@@ -108,6 +108,7 @@
     "karma-jasmine": "4.0.1",
     "karma-jasmine-html-reporter": "1.7.0",
     "license-checker-rseidelsohn": "3.1.0",
+    "markdown-it": "12.3.2",
     "ng-packagr": "13.2.1",
     "patch-package": "6.4.7",
     "protractor": "7.0.0",
diff --git a/projects/solidify-frontend/package.json b/projects/solidify-frontend/package.json
index 61b512d5e..cefc5acb8 100644
--- a/projects/solidify-frontend/package.json
+++ b/projects/solidify-frontend/package.json
@@ -43,6 +43,7 @@
     "core-js": "^3.21.0",
     "moment": "^2.29.1",
     "ng2-pdf-viewer": "7.0.2",
+    "markdown-it": "12.3.2",
     "@elastic/apm-rum-angular": "2.1.3",
     "docx-preview": "0.1.8",
     "ngx-highlightjs": "6.1.1",
diff --git a/projects/solidify-frontend/src/lib/components/dialogs/update-version/update-version.dialog.html b/projects/solidify-frontend/src/lib/components/dialogs/update-version/update-version.dialog.html
index b9810f41d..0d7e3c01a 100644
--- a/projects/solidify-frontend/src/lib/components/dialogs/update-version/update-version.dialog.html
+++ b/projects/solidify-frontend/src/lib/components/dialogs/update-version/update-version.dialog.html
@@ -1,5 +1,9 @@
 <solidify-base-action-dialog [titleToTranslate]="labelTranslate.updateVersionDialogTitle | translate">
   {{labelTranslate.updateVersionDialogBody | translate}}
+  <div *ngIf="changelogMarkdown"
+       class="changelog"
+       [innerHTML]="changelogMarkdown"
+  ></div>
 </solidify-base-action-dialog>
 <div mat-dialog-actions>
   <button [mat-dialog-close]=""
diff --git a/projects/solidify-frontend/src/lib/components/dialogs/update-version/update-version.dialog.scss b/projects/solidify-frontend/src/lib/components/dialogs/update-version/update-version.dialog.scss
index 71d86a79c..1e89c1324 100644
--- a/projects/solidify-frontend/src/lib/components/dialogs/update-version/update-version.dialog.scss
+++ b/projects/solidify-frontend/src/lib/components/dialogs/update-version/update-version.dialog.scss
@@ -1 +1,51 @@
 @import "../../../scss/abstracts/abstracts";
+
+:host {
+  .changelog {
+    white-space: break-spaces;
+    background: $extra-light-grey;
+    border-radius: 10px;
+    padding: 20px;
+    margin-top: 20px;
+
+    ::ng-deep {
+      display: grid;
+      grid-gap: 10px;
+
+      h1 {
+        margin: 0;
+        text-align: center;
+        text-transform: uppercase;
+        font-size: 18px;
+      }
+
+      > p {
+        display: none;
+      }
+
+      h2 {
+        margin: 0;
+      }
+
+      h3 {
+        margin: 0;
+      }
+
+      ul {
+        display: grid;
+        grid-gap: 4px;
+
+        li {
+          list-style: circle;
+          margin-left: 15px;
+        }
+      }
+    }
+  }
+}
+
+@include isInDarkMode {
+  .changelog {
+    background: $dark-mode-toolbar;
+  }
+}
diff --git a/projects/solidify-frontend/src/lib/components/dialogs/update-version/update-version.dialog.ts b/projects/solidify-frontend/src/lib/components/dialogs/update-version/update-version.dialog.ts
index 457bf1f0a..3884ce245 100644
--- a/projects/solidify-frontend/src/lib/components/dialogs/update-version/update-version.dialog.ts
+++ b/projects/solidify-frontend/src/lib/components/dialogs/update-version/update-version.dialog.ts
@@ -21,6 +21,7 @@
  * ----------------------------------------------------------------------------------------------%%
  */
 
+import {HttpClient} from "@angular/common/http";
 import {
   ChangeDetectionStrategy,
   Component,
@@ -30,6 +31,8 @@ import {
   MAT_DIALOG_DATA,
   MatDialogRef,
 } from "@angular/material/dialog";
+import md from "markdown-it";
+import {tap} from "rxjs/operators";
 import {ButtonColorEnum} from "../../../enums/button-color.enum";
 import {LABEL_TRANSLATE} from "../../../injection-tokens/label-to-translate.injection-token";
 import {LabelTranslateInterface} from "../../../models/label-translate.model";
@@ -44,12 +47,22 @@ import {AbstractDialog} from "../abstract/abstract.dialog";
   changeDetection: ChangeDetectionStrategy.OnPush,
 })
 export class UpdateVersionDialog extends AbstractDialog<UpdateVersionDialogData, void> {
+  changelogMarkdown: any;
+
   constructor(protected readonly _dialogRef: MatDialogRef<UpdateVersionDialog>,
               private readonly _appStatusService: AppStatusService,
+              private readonly _httpClient: HttpClient,
               @Inject(LABEL_TRANSLATE) readonly labelTranslate: LabelTranslateInterface,
               @Inject(MAT_DIALOG_DATA) readonly data: UpdateVersionDialogData,
   ) {
     super(_dialogRef, data);
+
+    this.subscribe(this._httpClient.get("RELEASE_NOTES.md", {responseType: "text"}).pipe(
+      tap(changelog => {
+        const markdownIt = md();
+        this.changelogMarkdown = markdownIt.render(changelog);
+      }),
+    ));
   }
 
   update(): void {
-- 
GitLab