mirror of
https://github.com/zitadel/zitadel.git
synced 2025-12-06 01:22:05 +00:00
* project grant member edit * project grant member dialog, import cleanup * readd project roles * user login-methods cleanup * fix sw config, user grant context * delete user grants, context for creation, search * contributor box shadow * password to detail view * user detail notification * ui ux improvements * pinned section * project pinnable grid, rem columns, move buttons * user detail mfa, move user comonents, user grant * del phone * user detail service * delete phone for auth, mgmt user
114 lines
6.3 KiB
HTML
114 lines
6.3 KiB
HTML
<app-meta-layout>
|
|
<div class="max-width-container">
|
|
<div class="head" *ngIf="project?.projectId">
|
|
<a [routerLink]="[ '/projects' ]" mat-icon-button>
|
|
<mat-icon class="icon">arrow_back</mat-icon>
|
|
</a>
|
|
<h1>{{ 'PROJECT.PAGES.TITLE' | translate }} {{project?.name}}</h1>
|
|
<ng-template appHasRole [appHasRole]="['project.write:'+projectId, 'project.write']">
|
|
<button mat-icon-button (click)="editstate = !editstate" aria-label="Edit project name"
|
|
*ngIf="isZitadel === false">
|
|
<mat-icon *ngIf="!editstate">edit</mat-icon>
|
|
<mat-icon *ngIf="editstate">close</mat-icon>
|
|
</button>
|
|
</ng-template>
|
|
|
|
<span class="fill-space"></span>
|
|
|
|
<button mat-stroked-button color="accent" [disabled]="isZitadel"
|
|
*ngIf="project?.state === ProjectState.PROJECTSTATE_ACTIVE" class="state-button"
|
|
(click)="changeState(ProjectState.PROJECTSTATE_INACTIVE)">{{'PROJECT.TABLE.DEACTIVATE' | translate}}</button>
|
|
<button mat-stroked-button color="accent" [disabled]="isZitadel"
|
|
*ngIf="project?.state === ProjectState.PROJECTSTATE_INACTIVE" class="state-button"
|
|
(click)="changeState(ProjectState.PROJECTSTATE_ACTIVE)">{{'PROJECT.TABLE.ACTIVATE' | translate}}</button>
|
|
|
|
<div class="full-width">
|
|
<div class="line">
|
|
<ng-container *ngIf="editstate">
|
|
<mat-form-field *ngIf="editstate && project?.name" class="formfield"
|
|
hintLabel="The name is required!">
|
|
<mat-label>{{'PROJECT.NAME' | translate}}</mat-label>
|
|
<input matInput [(ngModel)]="project.name" />
|
|
</mat-form-field>
|
|
<button class="icon-button" *ngIf="editstate" mat-icon-button (click)="updateName()">
|
|
<mat-icon>check</mat-icon>
|
|
</button>
|
|
</ng-container>
|
|
<span class="fill-space"></span>
|
|
</div>
|
|
<p class="desc">{{ 'PROJECT.PAGES.DESCRIPTION' | translate }}</p>
|
|
<p *ngIf="isZitadel" class="zitadel-warning">{{'PROJECT.PAGES.ZITADELPROJECT' | translate}}</p>
|
|
</div>
|
|
</div>
|
|
|
|
<ng-container *ngIf="project">
|
|
<ng-template appHasRole [appHasRole]="['project.app.read:' + project.projectId, 'project.app.read']">
|
|
<app-project-application-grid *ngIf="grid"
|
|
[disabled]="project?.state !== ProjectState.PROJECTSTATE_ACTIVE || isZitadel"
|
|
(changeView)="grid = false" [projectId]="projectId"></app-project-application-grid>
|
|
<app-card *ngIf="!grid" title="{{ 'PROJECT.APP.TITLE' | translate }}">
|
|
<card-actions class="card-actions">
|
|
<button mat-icon-button (click)="grid = true">
|
|
<i matTooltip="show grid view" class="las la-th-large"></i>
|
|
</button>
|
|
</card-actions>
|
|
<app-project-applications
|
|
[disabled]="project?.state !== ProjectState.PROJECTSTATE_ACTIVE || isZitadel"
|
|
[projectId]="projectId"></app-project-applications>
|
|
</app-card>
|
|
</ng-template>
|
|
|
|
<ng-container *ngIf="isZitadel == false">
|
|
<ng-template appHasRole
|
|
[appHasRole]="['project.grant.read:' + project.projectId, 'project.grant.read']">
|
|
<app-card title="{{ 'PROJECT.GRANT.TITLE' | translate }}"
|
|
description="{{ 'PROJECT.GRANT.DESCRIPTION' | translate }}">
|
|
<app-project-grants [disabled]="project?.state !== ProjectState.PROJECTSTATE_ACTIVE"
|
|
[projectId]="projectId">
|
|
</app-project-grants>
|
|
</app-card>
|
|
</ng-template>
|
|
|
|
<ng-template appHasRole [appHasRole]="['project.role.read:' + project.projectId, 'project.role.read']">
|
|
<app-card title="{{ 'PROJECT.ROLE.TITLE' | translate }}"
|
|
description="{{ 'PROJECT.ROLE.DESCRIPTION' | translate }}">
|
|
<app-project-roles [disabled]="project?.state !== ProjectState.PROJECTSTATE_ACTIVE"
|
|
[actionsVisible]="true" [projectId]="projectId">
|
|
</app-project-roles>
|
|
</app-card>
|
|
</ng-template>
|
|
|
|
<ng-template appHasRole [appHasRole]="['user.grant.read']">
|
|
<app-card *ngIf="project?.projectId" title="{{ 'GRANTS.PROJECT.TITLE' | translate }}"
|
|
description="{{'GRANTS.PROJECT.DESCRIPTION' | translate }}">
|
|
<app-user-grants [context]="userGrantContext" [projectId]="projectId"
|
|
[allowCreate]="['user.grant.write'] | hasRole"
|
|
[allowDelete]="['user.grant.delete'] | hasRole">
|
|
</app-user-grants>
|
|
</app-card>
|
|
</ng-template>
|
|
</ng-container>
|
|
</ng-container>
|
|
</div>
|
|
<metainfo class="side">
|
|
<div class="details">
|
|
<div class="row">
|
|
<span class="first">{{'PROJECT.STATE.TITLE' | translate}}:</span>
|
|
<span *ngIf="project && project.state !== undefined"
|
|
class="second">{{'PROJECT.STATE.'+project.state | translate}}</span>
|
|
</div>
|
|
</div>
|
|
|
|
<mat-tab-group mat-stretch-tabs class="tab-group" disablePagination="true">
|
|
<mat-tab label="Details">
|
|
<app-project-contributors *ngIf="project"
|
|
[disabled]="project?.state !== ProjectState.PROJECTSTATE_ACTIVE"
|
|
[projectType]="ProjectType.PROJECTTYPE_OWNED" [project]="project">
|
|
</app-project-contributors>
|
|
</mat-tab>
|
|
<mat-tab label="{{ 'CHANGES.PROJECT.TITLE' | translate }}" class="flex-col">
|
|
<app-changes *ngIf="project" [changeType]="ChangeType.PROJECT" [id]="project.projectId"></app-changes>
|
|
</mat-tab>
|
|
</mat-tab-group>
|
|
</metainfo>
|
|
</app-meta-layout> |