Skip to content
Snippets Groups Projects
Commit c851e48e authored by kbeyro's avatar kbeyro
Browse files

Changes in list

parent 409f8480
No related branches found
No related tags found
No related merge requests found
Showing with 175 additions and 105 deletions
import {Pipe, PipeTransform} from '@angular/core';
@Pipe({
name: 'searchAppInstance'
})
export class AppinstanceSearchPipe implements PipeTransform {
transform(value: any[], searchValue: string, ): any[] {
if (!value || !searchValue) {
return value
}
let result = [];
value.forEach( val => {
if (val.name.toLowerCase().includes(searchValue.toLowerCase() ||
val.applicationName.toLowerCase().includes(searchValue.toLowerCase()) ||
val.id.toLowerCase().includes(searchValue.toLowerCase()))
) {
result.push(val);
}
})
return result;
}
}
...@@ -28,6 +28,7 @@ import { AddMembersModalComponent } from './modals/add-members-modal/add-members ...@@ -28,6 +28,7 @@ import { AddMembersModalComponent } from './modals/add-members-modal/add-members
import {MultiSelectModule} from 'primeng/multiselect'; import {MultiSelectModule} from 'primeng/multiselect';
import { SelectPodModalComponent } from './modals/select-pod-modal/select-pod-modal.component'; import { SelectPodModalComponent } from './modals/select-pod-modal/select-pod-modal.component';
import {TooltipModule} from 'primeng/tooltip'; import {TooltipModule} from 'primeng/tooltip';
import {AppinstanceSearchPipe} from './appinstance-search.pipe';
@NgModule({ @NgModule({
declarations: [ declarations: [
...@@ -40,7 +41,8 @@ import {TooltipModule} from 'primeng/tooltip'; ...@@ -40,7 +41,8 @@ import {TooltipModule} from 'primeng/tooltip';
SshShellComponent, SshShellComponent,
AppInstanceShellViewComponent, AppInstanceShellViewComponent,
AddMembersModalComponent, AddMembersModalComponent,
SelectPodModalComponent SelectPodModalComponent,
AppinstanceSearchPipe
], ],
imports: [ imports: [
FormioModule, FormioModule,
...@@ -61,6 +63,7 @@ import {TooltipModule} from 'primeng/tooltip'; ...@@ -61,6 +63,7 @@ import {TooltipModule} from 'primeng/tooltip';
exports: [ exports: [
AppInstanceComponent, AppInstanceComponent,
AppInstanceListComponent, AppInstanceListComponent,
AppinstanceSearchPipe
], ],
providers: [ providers: [
AppsService, AppsService,
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
</div> </div>
<div style="display: inline;" class="col-xs-12 col-sm-6 col-md-6 col-lg-6 pull-right text-right"> <div style="display: inline;" class="col-xs-12 col-sm-6 col-md-6 col-lg-6 pull-right text-right">
{{ 'APP_INSTANCES.ITEMS_PER_PAGE' | translate }}: {{ 'APP_INSTANCES.ITEMS_PER_PAGE' | translate }}:
<span id="selectionItems" class="dropdown" style="vertical-align: middle; display: inline-block;"> <span id="selectionItems" class="dropdown" style="vertical-align: middle; display: inline-block; margin-right: 10px">
<button class="dropdown-toggle btn" data-toggle="dropdown" data-close-others="true"> <button class="dropdown-toggle btn" data-toggle="dropdown" data-close-others="true">
{{maxItemsOnPage}} {{maxItemsOnPage}}
</button> </button>
...@@ -37,6 +37,8 @@ ...@@ -37,6 +37,8 @@
</li> </li>
</ul> </ul>
</span> </span>
<input pInputText name="search" id="search" placeholder="Search" type="text" [(ngModel)]="searchValue">
</div> </div>
</div> </div>
</div> </div>
...@@ -66,7 +68,7 @@ ...@@ -66,7 +68,7 @@
</thead> </thead>
<tbody> <tbody>
<ng-template ngFor let-appInstance <ng-template ngFor let-appInstance
[ngForOf]="appDeployedInstances | async | paginate: { itemsPerPage: maxItemsOnPage, currentPage: pageNumber, id: p_first }"> [ngForOf]="appDeployedInstances | async | searchAppInstance: searchValue | paginate: { itemsPerPage: maxItemsOnPage, currentPage: pageNumber, id: p_first }">
<tr [ngClass]="userHasGuestRoleInCurrentDomain() ? '' : 'clickable'" [routerLink]="userHasGuestRoleInCurrentDomain() ? [] : [appInstance.id]"> <tr [ngClass]="userHasGuestRoleInCurrentDomain() ? '' : 'clickable'" [routerLink]="userHasGuestRoleInCurrentDomain() ? [] : [appInstance.id]">
<td class="col-lg-1 col-md-1">{{appInstance?.name}}</td> <td class="col-lg-1 col-md-1">{{appInstance?.name}}</td>
<td class="col-lg-2 col-md-2">{{appInstance?.applicationName}}</td> <td class="col-lg-2 col-md-2">{{appInstance?.applicationName}}</td>
...@@ -138,5 +140,3 @@ ...@@ -138,5 +140,3 @@
screenReaderPageLabel="{{ 'PAGINATION.SCREEN_READER.PAGE' | translate }}" screenReaderPageLabel="{{ 'PAGINATION.SCREEN_READER.PAGE' | translate }}"
screenReaderCurrentLabel="{{ 'PAGINATION.SCREEN_READER.CURRENT' | translate }}"></pagination-controls> screenReaderCurrentLabel="{{ 'PAGINATION.SCREEN_READER.CURRENT' | translate }}"></pagination-controls>
</div> </div>
...@@ -56,6 +56,9 @@ export class AppInstanceListComponent implements OnInit { ...@@ -56,6 +56,9 @@ export class AppInstanceListComponent implements OnInit {
public domains: Domain[] = []; public domains: Domain[] = [];
public searchValue = '';
constructor(private appInstanceService: AppInstanceService, constructor(private appInstanceService: AppInstanceService,
public domainService: DomainService, public domainService: DomainService,
private userDataService: UserDataService, private userDataService: UserDataService,
...@@ -175,7 +178,7 @@ export class AppInstanceListComponent implements OnInit { ...@@ -175,7 +178,7 @@ export class AppInstanceListComponent implements OnInit {
this.appInstances = this.appInstances this.appInstances = this.appInstances
.pipe( .pipe(
map(app => app.filter( map(app => app.filter(
(appInst) => (this.domainId === this.appConfig.getNmaasGlobalDomainId() || this.domainId === appInst.domainId) (appInst) => (this.domainId === this.appConfig.getNmaasGlobalDomainId() || this.domainId === appInst.domainId)
) )
) )
); );
...@@ -183,8 +186,8 @@ export class AppInstanceListComponent implements OnInit { ...@@ -183,8 +186,8 @@ export class AppInstanceListComponent implements OnInit {
this.appDeployedInstances = this.appInstances this.appDeployedInstances = this.appInstances
.pipe( .pipe(
map(instances => instances.filter( map(instances => instances.filter(
app => parseAppInstanceState(app.state) !== AppInstanceState.REMOVED app => parseAppInstanceState(app.state) !== AppInstanceState.REMOVED
&& parseAppInstanceState(app.state) !== AppInstanceState.DONE && parseAppInstanceState(app.state) !== AppInstanceState.DONE
) )
) )
); );
...@@ -192,8 +195,8 @@ export class AppInstanceListComponent implements OnInit { ...@@ -192,8 +195,8 @@ export class AppInstanceListComponent implements OnInit {
this.appUndeployedInstances = this.appInstances this.appUndeployedInstances = this.appInstances
.pipe( .pipe(
map(instances => instances.filter( map(instances => instances.filter(
app => parseAppInstanceState(app.state) === AppInstanceState.REMOVED app => parseAppInstanceState(app.state) === AppInstanceState.REMOVED
|| parseAppInstanceState(app.state) === AppInstanceState.DONE || parseAppInstanceState(app.state) === AppInstanceState.DONE
) )
) )
); );
......
...@@ -5,14 +5,14 @@ import {Pipe, PipeTransform} from '@angular/core'; ...@@ -5,14 +5,14 @@ import {Pipe, PipeTransform} from '@angular/core';
}) })
export class SearchDomainPipe implements PipeTransform { export class SearchDomainPipe implements PipeTransform {
transform(value: any[], searchValue: string): any[] { transform(value: any[], searchValue: string, showNotActive: boolean): any[] {
if (!value || !searchValue) { if (!value || !searchValue) {
if (!showNotActive && value) return value.filter(val => val.active !== false)
return value return value
} }
console.log(searchValue)
const result = []; let result = [];
value.forEach( val => { value.forEach( val => {
if (val.name.toLowerCase().includes(searchValue.toLowerCase()) if (val.name.toLowerCase().includes(searchValue.toLowerCase())
) { ) {
...@@ -20,7 +20,10 @@ export class SearchDomainPipe implements PipeTransform { ...@@ -20,7 +20,10 @@ export class SearchDomainPipe implements PipeTransform {
} }
}) })
console.warn(result)
if (!showNotActive) {
result = result.filter(val => val.active !== false)
}
return result; return result;
} }
} }
...@@ -17,6 +17,7 @@ import {InputTextModule} from 'primeng/inputtext'; ...@@ -17,6 +17,7 @@ import {InputTextModule} from 'primeng/inputtext';
import {SearchDomainPipe} from './domain-search.pipe'; import {SearchDomainPipe} from './domain-search.pipe';
import {NgxPaginationModule} from 'ngx-pagination'; import {NgxPaginationModule} from 'ngx-pagination';
import {TableModule} from 'primeng/table'; import {TableModule} from 'primeng/table';
import {CheckboxModule} from 'primeng/checkbox';
...@@ -36,7 +37,8 @@ import {TableModule} from 'primeng/table'; ...@@ -36,7 +37,8 @@ import {TableModule} from 'primeng/table';
TranslateModule.forChild(), TranslateModule.forChild(),
InputTextModule, InputTextModule,
NgxPaginationModule, NgxPaginationModule,
TableModule TableModule,
CheckboxModule
], ],
exports: [ exports: [
DomainsListComponent, DomainsListComponent,
......
...@@ -5,25 +5,36 @@ ...@@ -5,25 +5,36 @@
<a *roles="['ROLE_SYSTEM_ADMIN']" [routerLink]="['add']" class="btn btn-primary" <a *roles="['ROLE_SYSTEM_ADMIN']" [routerLink]="['add']" class="btn btn-primary"
role="button">{{'DOMAINS.ADD_BUTTON' | translate}}</a> role="button">{{'DOMAINS.ADD_BUTTON' | translate}}</a>
</div> </div>
<div class="flex" style="align-content: center; margin-top: 8px;">
<span style="align-content: center; margin-right: 5px;"> {{'DOMAINS.NOTACTIVE' | translate}}</span>
<p-checkbox id="showNotActive" [binary]="true" [(ngModel)]=" showNotActive"></p-checkbox>
</div>
<div class="flex"> <div class="flex">
{{ 'DOMAINS.ITEMS_PER_PAGE' | translate }}:
<span id="selectionItems" class="dropdown" style="vertical-align: middle; display: inline-block; margin-right: 1rem;">
<button class="dropdown-toggle btn" data-toggle="dropdown" data-close-others="true">
{{maxItemsOnPage}}
</button>
<ul class="dropdown-menu">
<li *ngFor="let item of itemsPerPage" [ngClass]="{'active': maxItemsOnPage == item}">
<a (click)="setItems(item)">
<span>{{item.toString()}}</span>
</a>
</li>
</ul>
</span>
<input pInputText name="search" id="search" placeholder="Search" type="text" [(ngModel)]="searchValue"> <input pInputText name="search" id="search" placeholder="Search" type="text" [(ngModel)]="searchValue">
</div> </div>
</div> </div>
<br> <br>
<table #table class="table table-hover table-condensed" aria-describedby="Domains list" sortable-table sort> <table #table class="table table-hover table-condensed" aria-describedby="Domains list" sortable-table (sorted)="onSort($event)">
<thead> <thead>
<tr> <tr>
<th scope="col" sortable="codename" (sort)="onSort($event)">{{ 'DOMAINS.CODE_NAME' | translate }} <th scope="col" class="column-sortable" sortable-column="codename" sort-direction="asc">{{ 'DOMAINS.CODE_NAME' | translate }}
<i *ngIf="getSort('codename') === 'asc'" class="pi pi-arrow-down"></i>
<i *ngIf="getSort('codename') === 'desc'" class="pi pi-arrow-up"></i>
</th> </th>
<th scope="col" sortable="name" (sort)="onSort($event)">{{ 'DOMAINS.NAME' | translate }} <th scope="col" class="column-sortable" sortable-column="name" >{{ 'DOMAINS.NAME' | translate }}
<i *ngIf="getSort('name') === 'asc'" class="pi pi-arrow-down"></i>
<i *ngIf="getSort('name') === 'desc'" class="pi pi-arrow-up"></i>
</th> </th>
<th scope="col" sortable="active" (sort)="onSort($event)">{{ 'DOMAINS.ACTIVATE' | translate }} <th scope="col" class="column-sortable" sortable-column="active" >{{ 'DOMAINS.ACTIVATE' | translate }}
<i *ngIf="getSort('active') === 'asc'" class="pi pi-arrow-down"></i>
<i *ngIf="getSort('active') === 'desc'" class="pi pi-arrow-up"></i>
</th> </th>
<th scope="col">&nbsp;</th> <th scope="col">&nbsp;</th>
</tr> </tr>
...@@ -31,8 +42,8 @@ ...@@ -31,8 +42,8 @@
<tbody> <tbody>
<ng-template ngFor let-domain <ng-template ngFor let-domain
[ngForOf]="domains | async | searchDomain: searchValue | paginate: {itemsPerPage: 10, currentPage: p}"> [ngForOf]="domains | async | searchDomain: searchValue: showNotActive | paginate: {itemsPerPage: maxItemsOnPage, currentPage: p}">
<tr class="clickable" [routerLink]="['view/', domain.id]"> <tr *ngIf="!domain.deleted" class="clickable" [routerLink]="['view/', domain.id]">
<td>{{domain?.codename}}</td> <td>{{domain?.codename}}</td>
<td>{{domain?.name}}</td> <td>{{domain?.name}}</td>
<td><span class="glyphicon glyphicon-ok" *ngIf="domain?.active"></span><span <td><span class="glyphicon glyphicon-ok" *ngIf="domain?.active"></span><span
...@@ -51,7 +62,7 @@ ...@@ -51,7 +62,7 @@
<li><a *roles="['ROLE_SYSTEM_ADMIN', 'ROLE_OPERATOR']" [routerLink]="['edit/', domain.id]" <li><a *roles="['ROLE_SYSTEM_ADMIN', 'ROLE_OPERATOR']" [routerLink]="['edit/', domain.id]"
class="">{{ 'DOMAINS.EDIT_BUTTON' | translate }}</a> class="">{{ 'DOMAINS.EDIT_BUTTON' | translate }}</a>
</li> </li>
<li><a *roles="['ROLE_SYSTEM_ADMIN']" (click)="changeState(domain)" <li><a *roles="['ROLE_SYSTEM_ADMIN']" (click)="$event.stopPropagation(); changeState(domain)"
class="">{{ getStateLabel(domain?.active) }}</a> class="">{{ getStateLabel(domain?.active) }}</a>
</li> </li>
</ul> </ul>
...@@ -60,8 +71,12 @@ ...@@ -60,8 +71,12 @@
</tr> </tr>
</ng-template> </ng-template>
</tbody> </tbody>
<pagination-controls (pageChange)="p = $event"></pagination-controls>
</table> </table>
<pagination-controls class="text-right" (pageChange)="p = $event"
previousLabel="{{ 'PAGINATION.PREVIOUS' | translate }}"
nextLabel="{{ 'PAGINATION.NEXT' | translate }}"
screenReaderPaginationLabel="{{ 'PAGINATION.SCREEN_READER.PAGINATION' | translate }}"
screenReaderPageLabel="{{ 'PAGINATION.SCREEN_READER.PAGE' | translate }}"
screenReaderCurrentLabel="{{ 'PAGINATION.SCREEN_READER.CURRENT' | translate }}"></pagination-controls>
</div> </div>
...@@ -2,10 +2,11 @@ import {AuthService} from '../../../auth/auth.service'; ...@@ -2,10 +2,11 @@ import {AuthService} from '../../../auth/auth.service';
import {Domain} from '../../../model/domain'; import {Domain} from '../../../model/domain';
import {Role} from '../../../model/userrole'; import {Role} from '../../../model/userrole';
import {DomainService} from '../../../service/domain.service'; import {DomainService} from '../../../service/domain.service';
import {Component, OnInit, QueryList, ViewChildren} from '@angular/core'; import {Component, OnInit, QueryList, ViewChild, ViewChildren} from '@angular/core';
import {Observable} from 'rxjs'; import {Observable} from 'rxjs';
import {map} from 'rxjs/operators'; import {map} from 'rxjs/operators';
import {TranslateService} from '@ngx-translate/core'; import {TranslateService} from '@ngx-translate/core';
import {ModalComponent} from '../../../shared';
import {SortableHeaderDirective, SortColumn, SortDirection} from '../../../service/sort-domain.directive'; import {SortableHeaderDirective, SortColumn, SortDirection} from '../../../service/sort-domain.directive';
...@@ -21,18 +22,33 @@ export interface SortEvent { ...@@ -21,18 +22,33 @@ export interface SortEvent {
}) })
export class DomainsListComponent implements OnInit { export class DomainsListComponent implements OnInit {
public readonly users_item_number_key = 'NUMBER_OF_DOMAIN_ITEM_KEY';
public domains: Observable<Domain[]>; public domains: Observable<Domain[]>;
public searchValue = ''; public searchValue = '';
p: number; p: number;
public pageNumber = 1;
public paginatorName = 'paginator-identifier';
public itemsPerPage: number[] = [15, 20, 25, 30, 50];
public maxItemsOnPage = 15;
public showNotActive = false;
@ViewChildren(SortableHeaderDirective) @ViewChildren(SortableHeaderDirective)
headers: QueryList<SortableHeaderDirective>; headers: QueryList<SortableHeaderDirective>;
public domainToRemove: Domain
constructor(protected domainService: DomainService, protected authService: AuthService, public translate: TranslateService) { constructor(protected domainService: DomainService, protected authService: AuthService, public translate: TranslateService) {
} }
ngOnInit() { ngOnInit() {
const i = sessionStorage.getItem(this.users_item_number_key)
if (i) {
this.maxItemsOnPage = +i;
}
this.update(); this.update();
} }
...@@ -46,18 +62,18 @@ export class DomainsListComponent implements OnInit { ...@@ -46,18 +62,18 @@ export class DomainsListComponent implements OnInit {
} }
} }
protected update(): void { public update(): void {
this.domains = this.getDomainsObservable().pipe( this.domains = this.getDomainsObservable().pipe(
map((domains) => [...domains].sort( map((domains) => [...domains].sort(
(a, b) => { (a, b) => {
if (a.name.toLowerCase() < b.name.toLowerCase()) { if (a.name.toLowerCase() < b.name.toLowerCase()) {
return -1; return -1;
}
if (a.name.toLowerCase() > b.name.toLowerCase()) {
return 1;
}
return 0;
} }
if (a.name.toLowerCase() > b.name.toLowerCase()) {
return 1;
}
return 0;
}
) )
) )
) )
...@@ -72,52 +88,50 @@ export class DomainsListComponent implements OnInit { ...@@ -72,52 +88,50 @@ export class DomainsListComponent implements OnInit {
return active ? this.translate.instant('DOMAINS.DISABLE_BUTTON') : this.translate.instant('DOMAINS.ENABLE_BUTTON'); return active ? this.translate.instant('DOMAINS.DISABLE_BUTTON') : this.translate.instant('DOMAINS.ENABLE_BUTTON');
} }
onSort({ column, direction }: SortEvent) { onSort(event: any) {
const sortColumn = event.sortColumn;
const direction = event.sortDirection;
console.warn(event)
// resetting other headers // resetting other headers
this.headers.forEach((header) => { this.headers.forEach((header) => {
if (header.sortable !== column) { if (header.sortable !== sortColumn) {
header.direction = ''; header.direction = '';
} }
}); });
this.domains = this.domains.pipe(map(value => value.sort((a, b) => { this.domains = this.domains.pipe(map(value => value.sort((a, b) => {
if (direction === 'asc') { if (direction === 'asc') {
if (a[column] > b[column]) { if (a[sortColumn] > b[sortColumn]) {
return 1; return 1;
} }
if (a[column] < b[column]) { if (a[sortColumn] < b[sortColumn]) {
return -1; return -1;
} }
return 0; return 0;
} else { } else {
if (a[column] > b[column]) { if (a[sortColumn] > b[sortColumn]) {
return -1; return -1;
} }
if (a[column] < b[column]) { if (a[sortColumn] < b[sortColumn]) {
return 1; return 1;
} }
return 0; return 0;
} }
} ))) } )))
this.domains.subscribe(value => console.warn(value)) this.domains.subscribe(value => console.warn(value))
} }
public getSort(column: string) {
let header; public setItems(item) {
if (this.headers !== undefined) { // store max items per page value in this session
this.headers.forEach(h => { sessionStorage.setItem(this.users_item_number_key, item);
if (h.sortable === column) header = h; this.maxItemsOnPage = item;
})
if (header !== undefined) {
return header.direction;
}
return ''
} else {
return ''
}
} }
onSorted(event: any) {
console.warn(event)
}
} }
<div style="display: inline;" class="col-xs-12 col-sm-6 col-md-6 col-lg-6 pull-right text-right"> <div class="col-sm-12 col-sm-10 col-md-12">
{{ 'USERS.ITEMS_PER_PAGE' | translate }}: <h3>
<span id="selectionItems" class="dropdown" style="vertical-align: middle; display: inline-block;"> {{ 'USERS.TITLE' | translate }}</h3>
<div class="flex space-between">
<div class="flex">
{{ 'DOMAINS.ITEMS_PER_PAGE' | translate }}:
<span id="selectionItems" class="dropdown" style="vertical-align: middle; display: inline-block; margin-right: 1rem;">
<button class="dropdown-toggle btn" data-toggle="dropdown" data-close-others="true"> <button class="dropdown-toggle btn" data-toggle="dropdown" data-close-others="true">
{{maxItemsOnPage}} {{maxItemsOnPage}}
</button> </button>
...@@ -12,31 +16,22 @@ ...@@ -12,31 +16,22 @@
</li> </li>
</ul> </ul>
</span> </span>
</div> </div>
<div class="row"> <div class="flex">
<h3> <input pInputText name="searchText" id="searchText" placeholder="Search" type="text" class="form-control" (keyup)="searchUsers($event.target.value)">
{{ 'USERS.TITLE' | translate }}
<button *ngIf="authService.hasDomainRole(domainId, 'ROLE_DOMAIN_ADMIN')"
class="btn btn-primary" (click)="changeMode()">
<span *ngIf="isModeAllowed(ComponentMode.DELETE)">{{'USERS.ADD_TO_DOMAIN_BUTTON' | translate}}</span>
<span *ngIf="isModeAllowed(ComponentMode.EDIT)">{{'USERS.GO_BACK_BUTTON' | translate}}</span>
</button>
</h3>
<div class="form-group row col-sm-4 align-vertically">
<label for="searchText" class="col-form-label col-sm-3">Search:</label>
<div class="col-sm-9">
<input id="searchText" type="text" [formControl]="searchText" class="form-control" (keyup)="searchUsers($event.target.value)">
</div> </div>
</div> </div>
<br> <br>
<table class="table table-hover table-condensed" sortable-table (sorted)="onSorted($event)" <table class="table table-hover table-condensed" sortable-table (sorted)="onSorted($event)"
aria-describedby="Users list"> aria-describedby="Users list" style="margin-top: 15px">
<thead> <thead>
<tr> <tr>
<th scope="col" class="column-sortable" sortable-column="username">{{ 'USERS.USER_NAME' | translate }}</th> <th scope="col" class="column-sortable" sortable-column="username"
sort-direction="asc">{{ 'USERS.USER_NAME' | translate }}</th>
<th scope="col" class="column-sortable" sortable-column="lastname">{{'USERS.NAME' | translate}}</th> <th scope="col" class="column-sortable" sortable-column="lastname">{{'USERS.NAME' | translate}}</th>
<th *ngIf="!domainMode" scope="col" class="column-sortable" sortable-column="email">{{'USERS.EMAIL' | translate}}</th> <th *ngIf="!domainMode" scope="col" class="column-sortable"
sortable-column="email">{{'USERS.EMAIL' | translate}}</th>
<th scope="col" class="column-sortable" sortable-column="domains" <th scope="col" class="column-sortable" sortable-column="domains"
*ngIf="domainId === domainService.getGlobalDomainId()">{{ 'USERS.DOMAINS' | translate }}</th> *ngIf="domainId === domainService.getGlobalDomainId()">{{ 'USERS.DOMAINS' | translate }}</th>
<th scope="col" class="column-sortable" sortable-column="globalRole" <th scope="col" class="column-sortable" sortable-column="globalRole"
...@@ -54,7 +49,8 @@ ...@@ -54,7 +49,8 @@
</thead> </thead>
<tbody> <tbody>
<tr *ngFor="let user of displayUsers | paginate: {itemsPerPage: maxItemsOnPage, currentPage: pageNumber, id: paginatorName}" [ngClass]="{'clickable!' : domainMode}" (click)="view(user.id)"> <tr *ngFor="let user of displayUsers | paginate: {itemsPerPage: maxItemsOnPage, currentPage: pageNumber, id: paginatorName}"
[ngClass]="{'clickable!' : domainMode}" (click)="view(user.id)">
<td>{{user.username}}</td> <td>{{user.username}}</td>
<td>{{(user.firstname || '') + ' ' + (user.lastname || '')}}</td> <td>{{(user.firstname || '') + ' ' + (user.lastname || '')}}</td>
<td *ngIf="!domainMode">{{user.email}}</td> <td *ngIf="!domainMode">{{user.email}}</td>
...@@ -92,13 +88,13 @@ ...@@ -92,13 +88,13 @@
{{"ENUM.USER_ROLES." + roles.role.toUpperCase() | translate}} {{"ENUM.USER_ROLES." + roles.role.toUpperCase() | translate}}
</span> </span>
</div> </div>
<div *roles="['ROLE_DOMAIN_ADMIN']"> <div *roles="['ROLE_DOMAIN_ADMIN']">
<div *ngIf="checkUserIfIsCurrentUser(user.username)"> <div *ngIf="checkUserIfIsCurrentUser(user.username)">
<span *ngFor="let roles of getOnlyDomainRoles(user)"> <span *ngFor="let roles of getOnlyDomainRoles(user)">
{{"ENUM.USER_ROLES." + roles.role.toUpperCase() | translate}} {{"ENUM.USER_ROLES." + roles.role.toUpperCase() | translate}}
</span> </span>
</div> </div>
</div> </div>
</td> </td>
<td *ngIf="!isModeAllowed(ComponentMode.EDIT) && !domainMode">{{user.firstLoginDate | date:'dd-MM-yyyy HH:mm'}}</td> <td *ngIf="!isModeAllowed(ComponentMode.EDIT) && !domainMode">{{user.firstLoginDate | date:'dd-MM-yyyy HH:mm'}}</td>
<td *ngIf="!isModeAllowed(ComponentMode.EDIT) && !domainMode">{{user.lastSuccessfulLoginDate | date:'dd-MM-yyyy HH:mm'}}</td> <td *ngIf="!isModeAllowed(ComponentMode.EDIT) && !domainMode">{{user.lastSuccessfulLoginDate | date:'dd-MM-yyyy HH:mm'}}</td>
...@@ -115,14 +111,15 @@ ...@@ -115,14 +111,15 @@
</a> </a>
<ul class="dropdown-menu pull-right-drop"> <ul class="dropdown-menu pull-right-drop">
<li> <li>
<a (click)="view(user.id);$event.stopPropagation()" *ngIf="isModeAllowed(ComponentMode.VIEW)"> <a (click)="view(user.id);$event.stopPropagation()"
*ngIf="isModeAllowed(ComponentMode.VIEW)">
{{ 'USERS.DETAILS_BUTTON' | translate }} {{ 'USERS.DETAILS_BUTTON' | translate }}
</a> </a>
</li> </li>
<li> <li>
<a (click)="changeUserStatus(user, false);$event.stopPropagation()" <a (click)="changeUserStatus(user, false);$event.stopPropagation()"
*ngIf="user.enabled && authService.hasRole('ROLE_SYSTEM_ADMIN') && user.username!==authService.getUsername()"> <!--user should not be able to disable himself --> *ngIf="user.enabled && authService.hasRole('ROLE_SYSTEM_ADMIN') && user.username!==authService.getUsername()"> <!--user should not be able to disable himself -->
{{ 'USERS.DISABLE_BUTTON' | translate }}</a> {{ 'USERS.DISABLE_BUTTON' | translate }}</a>
</li> </li>
<li> <li>
<a (click)="changeUserStatus(user, true);$event.stopPropagation()" <a (click)="changeUserStatus(user, true);$event.stopPropagation()"
...@@ -136,11 +133,13 @@ ...@@ -136,11 +133,13 @@
(click)="addToCurrentDomain(user);$event.stopPropagation()">{{'USERS.GRANT_USER_ROLE_IN_CURRENT_DOMAIN_BUTTON' | translate}}</a> (click)="addToCurrentDomain(user);$event.stopPropagation()">{{'USERS.GRANT_USER_ROLE_IN_CURRENT_DOMAIN_BUTTON' | translate}}</a>
</li> </li>
<li> <li>
<a role="button" *ngIf="isModeAllowed(ComponentMode.DELETE) && domainId != domainService.getGlobalDomainId() && user.username!==authService.getUsername()" <a role="button"
*ngIf="isModeAllowed(ComponentMode.DELETE) && domainId != domainService.getGlobalDomainId() && user.username!==authService.getUsername()"
(click)="onRemoveFromDomain.emit(user);$event.stopPropagation()">{{ 'USERS.REMOVE_FROM_DOMAIN_BUTTON' | translate }}</a> (click)="onRemoveFromDomain.emit(user);$event.stopPropagation()">{{ 'USERS.REMOVE_FROM_DOMAIN_BUTTON' | translate }}</a>
</li> </li>
<li> <li>
<a role="button" *ngIf="isModeAllowed(ComponentMode.DELETE) && authService.hasRole('ROLE_SYSTEM_ADMIN') && user.username!==authService.getUsername() && canUserBeDeleted(user)" <a role="button"
*ngIf="isModeAllowed(ComponentMode.DELETE) && authService.hasRole('ROLE_SYSTEM_ADMIN') && user.username!==authService.getUsername() && canUserBeDeleted(user)"
(click)="onDelete.emit(user);$event.stopPropagation()">{{ 'USERS.DELETE_BUTTON' | translate }}</a> (click)="onDelete.emit(user);$event.stopPropagation()">{{ 'USERS.DELETE_BUTTON' | translate }}</a>
</li> </li>
</ul> </ul>
...@@ -149,13 +148,15 @@ ...@@ -149,13 +148,15 @@
<td *ngIf="domainMode && !isModeAllowed(ComponentMode.EDIT)"> <td *ngIf="domainMode && !isModeAllowed(ComponentMode.EDIT)">
<span *ngIf="!checkUserIfIsCurrentUser(user.username)"> <span *ngIf="!checkUserIfIsCurrentUser(user.username)">
<a style="display: inline-block" class="" aria-expanded="false" <a style="display: inline-block" class="" aria-expanded="false"
aria-haspopup="true" role="button" (click)="onRemoveFromDomain.emit(user);$event.stopPropagation()"> aria-haspopup="true" role="button"
(click)="onRemoveFromDomain.emit(user);$event.stopPropagation()">
<em class="fas fa-trash icon-black "></em> <em class="fas fa-trash icon-black "></em>
</a> </a>
</span> </span>
</td> </td>
<td *ngIf="isModeAllowed(ComponentMode.EDIT)" style="width: 170px"> <td *ngIf="isModeAllowed(ComponentMode.EDIT)" style="width: 170px">
<button class="btn btn-success" role="button" (click)="addToCurrentDomain(user)" > {{'USERS.ADD_TO_DOMAIN_BUTTON' | translate}}</button> <button class="btn btn-success" role="button"
(click)="addToCurrentDomain(user)"> {{'USERS.ADD_TO_DOMAIN_BUTTON' | translate}}</button>
</td> </td>
</tr> </tr>
</tbody> </tbody>
...@@ -167,3 +168,4 @@ ...@@ -167,3 +168,4 @@
screenReaderPageLabel="{{ 'PAGINATION.SCREEN_READER.PAGE' | translate }}" screenReaderPageLabel="{{ 'PAGINATION.SCREEN_READER.PAGE' | translate }}"
screenReaderCurrentLabel="{{ 'PAGINATION.SCREEN_READER.CURRENT' | translate }}"></pagination-controls> screenReaderCurrentLabel="{{ 'PAGINATION.SCREEN_READER.CURRENT' | translate }}"></pagination-controls>
</div> </div>
...@@ -277,6 +277,7 @@ export class UsersListComponent extends BaseComponent implements OnInit, OnChang ...@@ -277,6 +277,7 @@ export class UsersListComponent extends BaseComponent implements OnInit, OnChang
} }
public searchUsers(search: string) { public searchUsers(search: string) {
console.log(search)
if (search === '') { if (search === '') {
this.filteredUsers = []; this.filteredUsers = [];
} else { } else {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment