mirror of
https://github.com/zitadel/zitadel.git
synced 2025-12-08 00:02:07 +00:00
* service, sidenav, i18n, dialog * detail layout, user detail * metadata dialog from * dialog * features * formarray * metadata component * comp * user metadata refresh * use formarray, control, bulk save * metadata revert, has feature directive * lint * lint * typo * info row user, warn color optim * card cleanup, actions for user detail * project, org, user, app rehaul * lint * scss * digit fix * features and project grid rehaul * info-section layout, org domain info * readd palette scss * add svg email warn * missing translation * rm unused ts * lockoutpolicy * check for lockout feature
82 lines
4.0 KiB
HTML
82 lines
4.0 KiB
HTML
<app-meta-layout>
|
|
<div class="max-width-container">
|
|
<div class="header-row">
|
|
<div class="text">
|
|
<h1 class="h1">{{ 'USER.TITLE' | translate }}</h1>
|
|
<p class="sub">{{'USER.DESCRIPTION' | translate}}</p>
|
|
</div>
|
|
|
|
<div class="theme">
|
|
<app-theme-setting></app-theme-setting>
|
|
</div>
|
|
</div>
|
|
<mat-progress-bar *ngIf="loading" color="primary" mode="indeterminate"></mat-progress-bar>
|
|
|
|
<span *ngIf="!loading && !user">{{ 'USER.PAGES.NOUSER' | translate }}</span>
|
|
|
|
<cnsl-info-row *ngIf="user" [user]="user"></cnsl-info-row>
|
|
|
|
<app-card *ngIf="user && user.human?.profile" class=" app-card" title="{{ 'USER.PROFILE.TITLE' | translate }}">
|
|
<app-detail-form [showEditImage]="true" [preferredLoginName]="user.preferredLoginName" [genders]="genders" [languages]="languages" [username]="user.userName" [user]="user.human"
|
|
(changedLanguage)="changedLanguage($event)" (submitData)="saveProfile($event)">
|
|
</app-detail-form>
|
|
</app-card>
|
|
|
|
<app-card *ngIf="user" title="{{ 'USER.LOGINMETHODS.TITLE' | translate }}"
|
|
description="{{ 'USER.LOGINMETHODS.DESCRIPTION' | translate }}">
|
|
<button class="icon-button" card-actions mat-icon-button (click)="refreshUser()" matTooltip="{{'ACTIONS.REFRESH' | translate}}">
|
|
<mat-icon class="icon">refresh</mat-icon>
|
|
</button>
|
|
<app-contact *ngIf="user?.human" [human]="user.human" [state]="user.state" canWrite="true"
|
|
(editType)="openEditDialog($event)" (enteredPhoneCode)="enteredPhoneCode($event)"
|
|
(deletedPhone)="deletePhone()" (resendEmailVerification)="resendEmailVerification()"
|
|
(resendPhoneVerification)="resendPhoneVerification()">
|
|
</app-contact>
|
|
</app-card>
|
|
|
|
<app-external-idps [userId]="user?.id" [service]="userService"></app-external-idps>
|
|
|
|
<app-auth-passwordless *ngIf="user" #mfaComponent></app-auth-passwordless>
|
|
|
|
<app-auth-user-mfa *ngIf="user" #mfaComponent></app-auth-user-mfa>
|
|
|
|
<app-card *ngIf="user?.id" title="{{ 'GRANTS.USER.TITLE' | translate }}"
|
|
description="{{'GRANTS.USER.DESCRIPTION' | translate }}">
|
|
<app-user-grants [userId]="user.id" [context]="USERGRANTCONTEXT"
|
|
[displayedColumns]="['select', 'projectId', 'dates', 'roleNamesList']"
|
|
[disableWrite]="((['user.grant.write$'] | hasRole) | async) == false"
|
|
[disableDelete]="((['user.grant.delete$'] | hasRole) | async) == false">
|
|
</app-user-grants>
|
|
</app-card>
|
|
|
|
<ng-template appHasFeature [appHasFeature]="['metadata.user']">
|
|
<cnsl-metadata *ngIf="user?.id" [userId]="user.id"></cnsl-metadata>
|
|
</ng-template>
|
|
</div>
|
|
|
|
<div *ngIf="user" class="side" metainfo>
|
|
<div class="meta-details">
|
|
<div class="meta-row">
|
|
<span class="first">{{'RESOURCEID' | translate}}:</span>
|
|
<span *ngIf="user?.id" class="second">{{ user.id }}</span>
|
|
</div>
|
|
<div class="meta-row" *ngIf="user?.preferredLoginName">
|
|
<span class="first">{{'USER.PREFERRED_LOGINNAME' | translate}}</span>
|
|
<span class="second"><span style="display: block;">{{user.preferredLoginName}}</span></span>
|
|
</div>
|
|
</div>
|
|
<mat-tab-group mat-stretch-tabs class="tab-group" disablePagination="true">
|
|
<mat-tab label="Details">
|
|
<div class="side-padding">
|
|
<ng-template appHasRole [appHasRole]="['user.membership.read']">
|
|
<app-memberships [auth]="true" [user]="user"></app-memberships>
|
|
</ng-template>
|
|
</div>
|
|
</mat-tab>
|
|
<mat-tab label="{{ 'CHANGES.PROJECT.TITLE' | translate }}" class="meta-flex-col">
|
|
<app-changes class="changes" [refresh]="refreshChanges$" [changeType]="ChangeType.MYUSER" [id]="user.id">
|
|
</app-changes>
|
|
</mat-tab>
|
|
</mat-tab-group>
|
|
</div>
|
|
</app-meta-layout> |