From 8a487a23cc8be3a9f17f5a25b9b5a8f7d9d9837a Mon Sep 17 00:00:00 2001
From: rhenck <richard.henck@iqb.hu-berlin.de>
Date: Fri, 12 Jul 2024 13:20:27 +0200
Subject: [PATCH] [editor] Set expert mode via API parameter

Everybody is considered expert but role 'developer'. The host
application allows not saving the unit when rights are insufficient, so
the editor needs not to take care of that. Having full rights allows for
better inspection of units even if it can't be changed(saved).
---
 projects/editor/src/app/app.component.ts                      | 1 +
 .../src/app/components/unit-view/unit-view.component.html     | 3 ++-
 .../editor/src/app/services/unit-services/unit.service.ts     | 4 +++-
 projects/editor/src/app/services/verona-api.service.ts        | 3 ++-
 4 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/projects/editor/src/app/app.component.ts b/projects/editor/src/app/app.component.ts
index 95ca2f6c0..4f11295cf 100644
--- a/projects/editor/src/app/app.component.ts
+++ b/projects/editor/src/app/app.component.ts
@@ -34,6 +34,7 @@ export class AppComponent implements OnInit {
     this.veronaApiService.startCommand
       .subscribe((message: StartCommand): void => {
         this.unitService.loadUnitDefinition(message.unitDefinition);
+        if (message.editorConfig.role === 'developer') this.unitService.allowExpertMode = false;
       });
     this.veronaApiService.sendReady();
     registerLocaleData(localeDe);
diff --git a/projects/editor/src/app/components/unit-view/unit-view.component.html b/projects/editor/src/app/components/unit-view/unit-view.component.html
index 290b3f091..1ac5415cb 100644
--- a/projects/editor/src/app/components/unit-view/unit-view.component.html
+++ b/projects/editor/src/app/components/unit-view/unit-view.component.html
@@ -99,7 +99,8 @@
             </button>
             <mat-menu #extrasMenu="matMenu" (click)="$event.stopPropagation()">
               <div [style.padding]="'0 20px 10px'" (click)="$event.stopPropagation()">
-                <mat-checkbox [ngModel]="unitService.expertMode" (change)="setExpertMode($event)">
+                <mat-checkbox [disabled]="!unitService.allowExpertMode"
+                              [ngModel]="unitService.expertMode" (change)="setExpertMode($event)">
                   Expertenmodus aktivieren
                 </mat-checkbox>
               </div>
diff --git a/projects/editor/src/app/services/unit-services/unit.service.ts b/projects/editor/src/app/services/unit-services/unit.service.ts
index 09169b72b..ef9bb3ffa 100644
--- a/projects/editor/src/app/services/unit-services/unit.service.ts
+++ b/projects/editor/src/app/services/unit-services/unit.service.ts
@@ -36,7 +36,8 @@ export class UnitService {
   sectionCountUpdated: Subject<void> = new Subject<void>();
   referenceManager: ReferenceManager;
   savedSectionCode: string | undefined;
-  expertMode: boolean = false;
+  allowExpertMode: boolean = true;
+  expertMode: boolean = true;
 
   constructor(private selectionService: SelectionService,
               private veronaApiService: VeronaAPIService,
@@ -47,6 +48,7 @@ export class UnitService {
               private idService: IDService) {
     this.unit = new Unit();
     this.referenceManager = new ReferenceManager(this.unit);
+    this.expertMode = this.allowExpertMode;
   }
 
   loadUnitDefinition(unitDefinition: string): void {
diff --git a/projects/editor/src/app/services/verona-api.service.ts b/projects/editor/src/app/services/verona-api.service.ts
index f0068ea41..52da09c86 100644
--- a/projects/editor/src/app/services/verona-api.service.ts
+++ b/projects/editor/src/app/services/verona-api.service.ts
@@ -65,7 +65,8 @@ export interface StartCommand extends MessageEvent {
   unitDefinition: string,
   unitDefinitionType: string,
   editorConfig: {
-    directDownloadUrl: string
+    directDownloadUrl: string,
+    role: 'guest' | 'commentator' | 'developer' | 'maintainer' | 'super'; // only developer is non-expert
   }
 }
 
-- 
GitLab