2020-05-13 14:41:43 +02:00
|
|
|
<div class="max-width-container">
|
|
|
|
<h1>{{ 'USER.PAGES.LIST' | translate }}</h1>
|
|
|
|
<p class="sub">{{ 'USER.PAGES.DESCRIPTION' | translate }}</p>
|
|
|
|
|
feat(console): user memberships, generic member create dialog, fix user autocomplete emitter (#606)
* load manager mgmtservice, user service
* add org memberships
* membership component, generic member creation
* refactor member create dialog
* project autocomplete context
* create batch managers in user component
* project context wrapper
* emit on user removal, preselect user on init
* membership avatar style, service
* auth user memberships, navigate to target
* cursor fix, avatar gen
* lint
* i18n fix
* remove role translations
* membership detail page, i18n
* fix role label i18n, after view init loader
* remove projectid from grant remove
* fix iam race condition
* refresh table ts, fix no permission project search
* change membership colors
* refresh table everywhere, replace assets, routing
* fix logo header size
* lint, fix project grant removal
* timestmp for p mem, user list, grants, p list (#615)
* npm audit
* update deps, resolve vulnerability
* fix tslint config
* update lock
* load 20 changes at once
* Update console/src/assets/i18n/de.json
Co-authored-by: Florian Forster <florian@caos.ch>
* Update console/src/assets/i18n/de.json
Co-authored-by: Florian Forster <florian@caos.ch>
* Update console/src/assets/i18n/en.json
Co-authored-by: Florian Forster <florian@caos.ch>
* membership i18n
Co-authored-by: Florian Forster <florian@caos.ch>
2020-08-24 08:48:47 +02:00
|
|
|
<app-refresh-table [loading]="loading$ | async" (refreshed)="refreshPage()" [dataSize]="dataSource.data.length"
|
|
|
|
[timestamp]="userResult?.viewTimestamp">
|
2020-07-20 15:23:29 +02:00
|
|
|
<ng-template appHasRole [appHasRole]="['user.write']" actions>
|
2020-05-13 14:41:43 +02:00
|
|
|
<button (click)="deactivateSelectedUsers()" matTooltip="{{'ORG_DETAIL.TABLE.DEACTIVATE' | translate}}"
|
|
|
|
class="icon-button" mat-icon-button *ngIf="selection.hasValue()">
|
|
|
|
<mat-icon svgIcon="mdi_account_cancel"></mat-icon>
|
|
|
|
</button>
|
|
|
|
<button (click)="reactivateSelectedUsers()" matTooltip="{{'ORG_DETAIL.TABLE.ACTIVATE' | translate}}"
|
|
|
|
class="icon-button" mat-icon-button *ngIf="selection.hasValue()">
|
|
|
|
<mat-icon svgIcon="mdi_account_check_outline"></mat-icon>
|
|
|
|
</button>
|
|
|
|
<a class="add-button" [routerLink]="[ '/users', 'create']" color="primary" mat-raised-button>
|
|
|
|
<mat-icon class="icon">add</mat-icon>{{ 'ACTIONS.NEW' | translate }}
|
|
|
|
</a>
|
|
|
|
</ng-template>
|
|
|
|
|
2020-07-20 15:23:29 +02:00
|
|
|
<div class="table-wrapper">
|
2020-07-30 16:54:15 +02:00
|
|
|
<table class="table background-style" mat-table [dataSource]="dataSource">
|
2020-07-20 15:23:29 +02:00
|
|
|
<ng-container matColumnDef="select">
|
|
|
|
<th mat-header-cell *matHeaderCellDef>
|
|
|
|
<mat-checkbox color="primary" (change)="$event ? masterToggle() : null"
|
|
|
|
[checked]="selection.hasValue() && isAllSelected()"
|
|
|
|
[indeterminate]="selection.hasValue() && !isAllSelected()">
|
|
|
|
</mat-checkbox>
|
|
|
|
</th>
|
|
|
|
<td mat-cell *matCellDef="let user">
|
|
|
|
<mat-checkbox color="primary" (click)="$event.stopPropagation()"
|
|
|
|
(change)="$event ? selection.toggle(user) : null" [checked]="selection.isSelected(user)">
|
|
|
|
<app-avatar *ngIf="user && user.displayName" class="avatar" [name]="user.displayName"
|
|
|
|
[size]="32">
|
|
|
|
</app-avatar>
|
|
|
|
</mat-checkbox>
|
|
|
|
</td>
|
|
|
|
</ng-container>
|
2020-05-13 14:41:43 +02:00
|
|
|
|
2020-07-20 15:23:29 +02:00
|
|
|
<ng-container matColumnDef="firstname">
|
|
|
|
<th mat-header-cell *matHeaderCellDef> {{ 'USER.PROFILE.FIRSTNAME' | translate }} </th>
|
|
|
|
<td mat-cell *matCellDef="let user"> {{user.firstName}} </td>
|
|
|
|
</ng-container>
|
2020-05-13 14:41:43 +02:00
|
|
|
|
2020-07-20 15:23:29 +02:00
|
|
|
<ng-container matColumnDef="lastname">
|
|
|
|
<th mat-header-cell *matHeaderCellDef> {{ 'USER.PROFILE.LASTNAME' | translate }} </th>
|
|
|
|
<td mat-cell *matCellDef="let user"> {{user.lastName}} </td>
|
|
|
|
</ng-container>
|
2020-05-13 14:41:43 +02:00
|
|
|
|
2020-07-20 15:23:29 +02:00
|
|
|
<ng-container matColumnDef="username">
|
|
|
|
<th mat-header-cell *matHeaderCellDef> {{ 'USER.PROFILE.USERNAME' | translate }} </th>
|
|
|
|
<td mat-cell *matCellDef="let user"> {{user.userName}} </td>
|
|
|
|
</ng-container>
|
2020-05-13 14:41:43 +02:00
|
|
|
|
2020-07-20 15:23:29 +02:00
|
|
|
<ng-container matColumnDef="email">
|
|
|
|
<th mat-header-cell *matHeaderCellDef> {{ 'USER.EMAIL' | translate }} </th>
|
|
|
|
<td mat-cell *matCellDef="let user"> {{user.email}} </td>
|
|
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="state">
|
|
|
|
<th mat-header-cell *matHeaderCellDef> {{ 'USER.DATA.STATE' | translate }} </th>
|
|
|
|
<td mat-cell *matCellDef="let user"> {{ 'USER.DATA.STATE'+user.state | translate }} </td>
|
|
|
|
</ng-container>
|
2020-05-13 14:41:43 +02:00
|
|
|
|
2020-07-20 15:23:29 +02:00
|
|
|
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
|
|
|
|
<tr class="data-row" mat-row *matRowDef="let row; columns: displayedColumns;"
|
|
|
|
[routerLink]="['/users', row.id]">
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
</table>
|
2020-07-30 16:54:15 +02:00
|
|
|
<mat-paginator #paginator class="paginator background-style" [length]="userResult?.totalResult || 0"
|
|
|
|
[pageSize]="10" [pageSizeOptions]="[5, 10, 20]" (page)="changePage($event)"></mat-paginator>
|
2020-07-20 15:23:29 +02:00
|
|
|
</div>
|
|
|
|
</app-refresh-table>
|
2020-05-13 14:41:43 +02:00
|
|
|
</div>
|