-
+
diff --git a/src/app/project/list/list.component.ts b/src/app/project/list/list.component.ts
index 8819b3a0c5..b71422b76d 100644
--- a/src/app/project/list/list.component.ts
+++ b/src/app/project/list/list.component.ts
@@ -12,7 +12,8 @@ import {
ListNodeInfo,
ListsResponse,
ReadProject,
- StringLiteral
+ StringLiteral,
+ UserResponse
} from '@dasch-swiss/dsp-js';
import { AppGlobal } from 'src/app/app-global';
import { AppInitService } from 'src/app/app-init.service';
@@ -29,7 +30,7 @@ import { Session, SessionService } from 'src/app/main/services/session.service';
})
export class ListComponent implements OnInit {
- // loading for progess indicator
+ // loading for progress indicator
loading: boolean;
loadList: boolean;
@@ -37,6 +38,7 @@ export class ListComponent implements OnInit {
session: Session;
sysAdmin = false;
projectAdmin = false;
+ projectMember = undefined;
// project shortcode; as identifier in project cache service
projectCode: string;
@@ -142,6 +144,27 @@ export class ListComponent implements OnInit {
// is logged-in user projectAdmin?
this.projectAdmin = this.sysAdmin ? this.sysAdmin : this.session.user.projectAdmin.some(e => e === this.project.id);
+ // or at least project member?
+ if (!this.projectAdmin) {
+ this._dspApiConnection.admin.usersEndpoint.getUserByUsername(this.session.user.name).subscribe(
+ (res: ApiResponseData
) => {
+ const usersProjects = res.body.user.projects;
+ if (usersProjects.length === 0) {
+ // the user is not part of any project
+ this.projectMember = false;
+ } else {
+ // check if the user is member of the current project
+ this.projectMember = usersProjects.some(p => p.shortcode === this.projectCode);
+ }
+ },
+ (error: ApiResponseError) => {
+ this._errorHandler.showMessage(error);
+ }
+ );
+ } else {
+ this.projectMember = this.projectAdmin;
+ }
+
this.initList();
this.listForm = this._fb.group({
diff --git a/src/app/project/project.component.html b/src/app/project/project.component.html
index 5b578b2035..53f15a20c1 100644
--- a/src/app/project/project.component.html
+++ b/src/app/project/project.component.html
@@ -5,7 +5,7 @@
class="navigation tab-bar margin-from-top" animationDuration="0ms" [color]="color">
+ [disabled]="!projectAdmin && !first && i !== TAB_DATA_MODEL && i !== TAB_LISTS" [class.deactivated]="!project?.status">
{{link.icon}}
{{link.label}}
@@ -83,14 +83,14 @@
-
+
-
+
add_circle_outline
Add a new list
@@ -146,4 +146,4 @@ Settings
-
\ No newline at end of file
+
diff --git a/src/app/project/project.component.ts b/src/app/project/project.component.ts
index 71ebfd995f..a16cf96354 100644
--- a/src/app/project/project.component.ts
+++ b/src/app/project/project.component.ts
@@ -26,8 +26,10 @@ import { OntologyService } from './ontology/ontology.service';
styleUrls: ['./project.component.scss']
})
export class ProjectComponent implements OnInit {
+ readonly TAB_DATA_MODEL = 3;
+ readonly TAB_LISTS = 4;
- // loading for progess indicator
+ // loading for progress indicator
loading: boolean;
// error in case of wrong project code
error: boolean;
diff --git a/src/app/workspace/results/results.component.ts b/src/app/workspace/results/results.component.ts
index ac22c566d0..cba79f9b94 100644
--- a/src/app/workspace/results/results.component.ts
+++ b/src/app/workspace/results/results.component.ts
@@ -6,7 +6,7 @@ import { FilteredResources, SearchParams } from './list-view/list-view.component
export interface SplitSize {
gutterNum: number;
sizes: Array;
-};
+}
@Component({
selector: 'app-results',