remove required from user profile name, other accessibility fixes, fix text-filter input autocomplete value

This commit is contained in:
mchouliara 2024-09-20 17:21:39 +03:00
parent d1d5ad458c
commit b75b1fee10
36 changed files with 172 additions and 90 deletions

View File

@ -76,7 +76,7 @@
<ng-template #actions let-row="row" let-item> <ng-template #actions let-row="row" let-item>
<div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()"> <div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()">
<div class="col-auto"> <div class="col-auto">
<button mat-icon-button [matMenuTriggerFor]="actionsMenu"> <button mat-icon-button [matMenuTriggerFor]="actionsMenu" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon> <mat-icon>more_horiz</mat-icon>
</button> </button>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">

View File

@ -50,7 +50,7 @@
<ng-template #actions let-row="row" let-item> <ng-template #actions let-row="row" let-item>
<div class="row" (click)="$event.stopPropagation()"> <div class="row" (click)="$event.stopPropagation()">
<div class="col-auto" *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)"> <div class="col-auto" *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)">
<button mat-icon-button [matMenuTriggerFor]="actionsMenu"> <button mat-icon-button [matMenuTriggerFor]="actionsMenu" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon> <mat-icon>more_horiz</mat-icon>
</button> </button>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">

View File

@ -86,28 +86,28 @@
<ng-template #actions let-row="row" let-item> <ng-template #actions let-row="row" let-item>
<div *ngIf="showActions(row)" class="row" (click)="$event.stopPropagation()"> <div *ngIf="showActions(row)" class="row" (click)="$event.stopPropagation()">
<div class="col-auto"> <div class="col-auto">
<button mat-icon-button [matMenuTriggerFor]="actionsMenu"> <button mat-icon-button [matMenuTriggerFor]="actionsMenu" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon> <mat-icon>more_horiz</mat-icon>
</button> </button>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">
<a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/description-templates/', row.id])"> <a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/description-templates/', row.id])">
<mat-icon>edit</mat-icon>{{'DESCRIPTION-TEMPLATE-LISTING.ACTIONS.EDIT' | translate}} <mat-icon aria-hidden>edit</mat-icon>{{'DESCRIPTION-TEMPLATE-LISTING.ACTIONS.EDIT' | translate}}
</a> </a>
<a *ngIf="canAddNewVersion(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/description-templates/new-version/', row.id])"> <a *ngIf="canAddNewVersion(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/description-templates/new-version/', row.id])">
<mat-icon>queue</mat-icon>{{'DESCRIPTION-TEMPLATE-LISTING.ACTIONS.NEW-VERSION' | translate}} <mat-icon aria-hidden>queue</mat-icon>{{'DESCRIPTION-TEMPLATE-LISTING.ACTIONS.NEW-VERSION' | translate}}
</a> </a>
<a *ngIf="canClone(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/description-templates/clone/', row.id])"> <a *ngIf="canClone(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/description-templates/clone/', row.id])">
<mat-icon>content_copy</mat-icon>{{'DESCRIPTION-TEMPLATE-LISTING.ACTIONS.CLONE' | translate}} <mat-icon aria-hidden>content_copy</mat-icon>{{'DESCRIPTION-TEMPLATE-LISTING.ACTIONS.CLONE' | translate}}
</a> </a>
<a *ngIf="canViewVersions(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/description-templates/versions/', row.groupId])"> <a *ngIf="canViewVersions(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/description-templates/versions/', row.groupId])">
<mat-icon>library_books</mat-icon> <mat-icon aria-hidden>library_books</mat-icon>
{{'DESCRIPTION-TEMPLATE-LISTING.ACTIONS.VIEW-VERSIONS' | translate}} {{'DESCRIPTION-TEMPLATE-LISTING.ACTIONS.VIEW-VERSIONS' | translate}}
</a> </a>
<button *ngIf="canDownloadXml(row)" mat-menu-item (click)="export($event, row.id)"> <button *ngIf="canDownloadXml(row)" mat-menu-item (click)="export($event, row.id)">
<mat-icon>download</mat-icon>{{'DESCRIPTION-TEMPLATE-LISTING.ACTIONS.DOWNLOAD-XML' | translate}} <mat-icon aria-hidden>download</mat-icon>{{'DESCRIPTION-TEMPLATE-LISTING.ACTIONS.DOWNLOAD-XML' | translate}}
</button> </button>
<button *ngIf="canDelete(row)" mat-menu-item (click)="delete(row.id)"> <button *ngIf="canDelete(row)" mat-menu-item (click)="delete(row.id)">
<mat-icon>delete</mat-icon> <mat-icon aria-hidden>delete</mat-icon>
{{'DESCRIPTION-TEMPLATE-LISTING.ACTIONS.DELETE' | translate}} {{'DESCRIPTION-TEMPLATE-LISTING.ACTIONS.DELETE' | translate}}
</button> </button>
</mat-menu> </mat-menu>

View File

@ -86,15 +86,15 @@
<ng-template #actions let-row="row" let-item> <ng-template #actions let-row="row" let-item>
<div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()"> <div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()">
<div class="col-auto"> <div class="col-auto">
<button mat-icon-button [matMenuTriggerFor]="actionsMenu" *ngIf="!isFinalized(row) || row.belongsToCurrentTenant != false"> <button mat-icon-button [matMenuTriggerFor]="actionsMenu" *ngIf="!isFinalized(row) || row.belongsToCurrentTenant != false" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon> <mat-icon>more_horiz</mat-icon>
</button> </button>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">
<a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/description-template-type/' + row.id])"> <a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/description-template-type/' + row.id])">
<mat-icon>edit</mat-icon>{{'DESCRIPTION-TEMPLATE-TYPE-LISTING.ACTIONS.EDIT' | translate}} <mat-icon aria-hidden>edit</mat-icon>{{'DESCRIPTION-TEMPLATE-TYPE-LISTING.ACTIONS.EDIT' | translate}}
</a> </a>
<button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)"> <button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)">
<mat-icon>delete</mat-icon> <mat-icon aria-hidden>delete</mat-icon>
{{'DESCRIPTION-TEMPLATE-TYPE-LISTING.ACTIONS.DELETE' | translate}} {{'DESCRIPTION-TEMPLATE-TYPE-LISTING.ACTIONS.DELETE' | translate}}
</button> </button>
</mat-menu> </mat-menu>

View File

@ -66,12 +66,12 @@
<ng-template #actions let-row="row" let-item> <ng-template #actions let-row="row" let-item>
<div *ngIf="canDelete(row)" class="row" (click)="$event.stopPropagation()"> <div *ngIf="canDelete(row)" class="row" (click)="$event.stopPropagation()">
<div class="col-auto"> <div class="col-auto">
<button mat-icon-button [matMenuTriggerFor]="actionsMenu"> <button mat-icon-button [matMenuTriggerFor]="actionsMenu" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon> <mat-icon>more_horiz</mat-icon>
</button> </button>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">
<button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id, row.target)"> <button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id, row.target)">
<mat-icon>delete</mat-icon> <mat-icon aria-hidden>delete</mat-icon>
{{'LOCK-LISTING.ACTIONS.DELETE' | translate}} {{'LOCK-LISTING.ACTIONS.DELETE' | translate}}
</button> </button>
</mat-menu> </mat-menu>

View File

@ -77,15 +77,15 @@
<ng-template #actions let-row="row" let-item> <ng-template #actions let-row="row" let-item>
<div *ngIf="canEdit(row) || canDelete(row)" class="row" (click)="$event.stopPropagation()"> <div *ngIf="canEdit(row) || canDelete(row)" class="row" (click)="$event.stopPropagation()">
<div class="col-auto"> <div class="col-auto">
<button mat-icon-button [matMenuTriggerFor]="actionsMenu"> <button mat-icon-button [matMenuTriggerFor]="actionsMenu" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon> <mat-icon>more_horiz</mat-icon>
</button> </button>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">
<a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/languages/', row.id])"> <a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/languages/', row.id])">
<mat-icon>edit</mat-icon>{{'LANGUAGE-LISTING.ACTIONS.EDIT' | translate}} <mat-icon aria-hidden>edit</mat-icon>{{'LANGUAGE-LISTING.ACTIONS.EDIT' | translate}}
</a> </a>
<button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)"> <button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)">
<mat-icon>delete</mat-icon> <mat-icon aria-hidden>delete</mat-icon>
{{'LANGUAGE-LISTING.ACTIONS.DELETE' | translate}} {{'LANGUAGE-LISTING.ACTIONS.DELETE' | translate}}
</button> </button>
</mat-menu> </mat-menu>

View File

@ -81,28 +81,28 @@
<ng-template #actions let-row="row" let-item> <ng-template #actions let-row="row" let-item>
<div class="row" (click)="$event.stopPropagation()"> <div class="row" (click)="$event.stopPropagation()">
<div class="col-auto"> <div class="col-auto">
<button mat-icon-button [matMenuTriggerFor]="actionsMenu"> <button mat-icon-button [matMenuTriggerFor]="actionsMenu" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon> <mat-icon>more_horiz</mat-icon>
</button> </button>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">
<a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/plan-blueprints/', row.id])"> <a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/plan-blueprints/', row.id])">
<mat-icon>edit</mat-icon>{{'PLAN-BLUEPRINT-LISTING.ACTIONS.EDIT' | translate}} <mat-icon aria-hidden>edit</mat-icon>{{'PLAN-BLUEPRINT-LISTING.ACTIONS.EDIT' | translate}}
</a> </a>
<a *ngIf="canCreateNewVersion(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/plan-blueprints/new-version/', row.id])"> <a *ngIf="canCreateNewVersion(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/plan-blueprints/new-version/', row.id])">
<mat-icon>queue</mat-icon>{{'PLAN-BLUEPRINT-LISTING.ACTIONS.NEW-VERSION' | translate}} <mat-icon aria-hidden>queue</mat-icon>{{'PLAN-BLUEPRINT-LISTING.ACTIONS.NEW-VERSION' | translate}}
</a> </a>
<a mat-menu-item [routerLink]="routerUtils.generateUrl(['/plan-blueprints/clone/', row.id])"> <a mat-menu-item [routerLink]="routerUtils.generateUrl(['/plan-blueprints/clone/', row.id])">
<mat-icon>content_copy</mat-icon>{{'PLAN-BLUEPRINT-LISTING.ACTIONS.CLONE' | translate}} <mat-icon aria-hidden>content_copy</mat-icon>{{'PLAN-BLUEPRINT-LISTING.ACTIONS.CLONE' | translate}}
</a> </a>
<a *ngIf="row.isActive == isActive.Active" mat-menu-item [routerLink]="routerUtils.generateUrl(['/plan-blueprints/versions/', row.groupId])"> <a *ngIf="row.isActive == isActive.Active" mat-menu-item [routerLink]="routerUtils.generateUrl(['/plan-blueprints/versions/', row.groupId])">
<mat-icon>library_books</mat-icon> <mat-icon aria-hidden>library_books</mat-icon>
{{'PLAN-BLUEPRINT-LISTING.ACTIONS.VIEW-VERSIONS' | translate}} {{'PLAN-BLUEPRINT-LISTING.ACTIONS.VIEW-VERSIONS' | translate}}
</a> </a>
<button mat-menu-item (click)="export($event, row.id)" *ngIf="canDownloadXML(row)"> <button mat-menu-item (click)="export($event, row.id)" *ngIf="canDownloadXML(row)">
<mat-icon>download</mat-icon>{{'PLAN-BLUEPRINT-LISTING.ACTIONS.DOWNLOAD-XML' | translate}} <mat-icon aria-hidden>download</mat-icon>{{'PLAN-BLUEPRINT-LISTING.ACTIONS.DOWNLOAD-XML' | translate}}
</button> </button>
<button *ngIf="canDelete(row)" mat-menu-item (click)="delete(row.id)"> <button *ngIf="canDelete(row)" mat-menu-item (click)="delete(row.id)">
<mat-icon>delete</mat-icon> <mat-icon aria-hidden>delete</mat-icon>
{{'PLAN-BLUEPRINT-LISTING.ACTIONS.DELETE' | translate}} {{'PLAN-BLUEPRINT-LISTING.ACTIONS.DELETE' | translate}}
</button> </button>
</mat-menu> </mat-menu>

View File

@ -49,15 +49,15 @@
<ng-template #actions let-row="row" let-item> <ng-template #actions let-row="row" let-item>
<div class="row" (click)="$event.stopPropagation()"> <div class="row" (click)="$event.stopPropagation()">
<div class="col-auto" *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)"> <div class="col-auto" *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)">
<button mat-icon-button [matMenuTriggerFor]="actionsMenu"> <button mat-icon-button [matMenuTriggerFor]="actionsMenu" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon> <mat-icon>more_horiz</mat-icon>
</button> </button>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">
<a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/plan-statuses/', row.id])"> <a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/plan-statuses/', row.id])">
<mat-icon>edit</mat-icon>{{'PLAN-STATUS-LISTING.ACTIONS.EDIT' | translate}} <mat-icon aria-hidden>edit</mat-icon>{{'PLAN-STATUS-LISTING.ACTIONS.EDIT' | translate}}
</a> </a>
<button *ngIf="canDelete(row)" mat-menu-item (click)="delete(row.id)"> <button *ngIf="canDelete(row)" mat-menu-item (click)="delete(row.id)">
<mat-icon>delete</mat-icon> <mat-icon aria-hidden>delete</mat-icon>
{{'PLAN-STATUS-LISTING.ACTIONS.DELETE' | translate}} {{'PLAN-STATUS-LISTING.ACTIONS.DELETE' | translate}}
</button> </button>
</mat-menu> </mat-menu>

View File

@ -79,15 +79,15 @@
<ng-template #actions let-row="row" let-item> <ng-template #actions let-row="row" let-item>
<div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()"> <div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()">
<div class="col-auto"> <div class="col-auto">
<button mat-icon-button [matMenuTriggerFor]="actionsMenu"> <button mat-icon-button [matMenuTriggerFor]="actionsMenu" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon> <mat-icon>more_horiz</mat-icon>
</button> </button>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">
<a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/prefilling-sources/', row.id])"> <a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/prefilling-sources/', row.id])">
<mat-icon>edit</mat-icon>{{'PREFILLING-SOURCE-LISTING.ACTIONS.EDIT' | translate}} <mat-icon aria-hidden>edit</mat-icon>{{'PREFILLING-SOURCE-LISTING.ACTIONS.EDIT' | translate}}
</a> </a>
<button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)"> <button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)">
<mat-icon>delete</mat-icon> <mat-icon aria-hidden>delete</mat-icon>
{{'PREFILLING-SOURCE-LISTING.ACTIONS.DELETE' | translate}} {{'PREFILLING-SOURCE-LISTING.ACTIONS.DELETE' | translate}}
</button> </button>
</mat-menu> </mat-menu>

View File

@ -80,15 +80,15 @@
<ng-template #actions let-row="row" let-item> <ng-template #actions let-row="row" let-item>
<div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()"> <div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()">
<div class="col-auto"> <div class="col-auto">
<button mat-icon-button [matMenuTriggerFor]="actionsMenu"> <button mat-icon-button [matMenuTriggerFor]="actionsMenu" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon> <mat-icon>more_horiz</mat-icon>
</button> </button>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">
<a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/reference-type/', row.id])"> <a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/reference-type/', row.id])">
<mat-icon>edit</mat-icon>{{'REFERENCE-TYPE-LISTING.ACTIONS.EDIT' | translate}} <mat-icon aria-hidden>edit</mat-icon>{{'REFERENCE-TYPE-LISTING.ACTIONS.EDIT' | translate}}
</a> </a>
<button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)"> <button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)">
<mat-icon>delete</mat-icon> <mat-icon aria-hidden>delete</mat-icon>
{{'REFERENCE-TYPE-LISTING.ACTIONS.DELETE' | translate}} {{'REFERENCE-TYPE-LISTING.ACTIONS.DELETE' | translate}}
</button> </button>
</mat-menu> </mat-menu>

View File

@ -101,15 +101,15 @@
<ng-template #actions let-row="row" let-item> <ng-template #actions let-row="row" let-item>
<div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()"> <div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()">
<div class="col-auto"> <div class="col-auto">
<button mat-icon-button [matMenuTriggerFor]="actionsMenu"> <button mat-icon-button [matMenuTriggerFor]="actionsMenu" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon> <mat-icon>more_horiz</mat-icon>
</button> </button>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">
<a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/references/', row.id])"> <a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/references/', row.id])">
<mat-icon>edit</mat-icon>{{'REFERENCE-LISTING.ACTIONS.EDIT' | translate}} <mat-icon aria-hidden>edit</mat-icon>{{'REFERENCE-LISTING.ACTIONS.EDIT' | translate}}
</a> </a>
<button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)"> <button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)">
<mat-icon>delete</mat-icon> <mat-icon aria-hidden>delete</mat-icon>
{{'REFERENCE-LISTING.ACTIONS.DELETE' | translate}} {{'REFERENCE-LISTING.ACTIONS.DELETE' | translate}}
</button> </button>
</mat-menu> </mat-menu>

View File

@ -80,15 +80,15 @@
<ng-template #actions let-row="row" let-item> <ng-template #actions let-row="row" let-item>
<div *ngIf="!isDeleted(row)" class="row" (click)="$event.stopPropagation()"> <div *ngIf="!isDeleted(row)" class="row" (click)="$event.stopPropagation()">
<div class="col-auto"> <div class="col-auto">
<button mat-icon-button [matMenuTriggerFor]="actionsMenu"> <button mat-icon-button [matMenuTriggerFor]="actionsMenu" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon> <mat-icon>more_horiz</mat-icon>
</button> </button>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">
<a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/tenants/', row.id])"> <a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/tenants/', row.id])">
<mat-icon>edit</mat-icon>{{'TENANT-LISTING.ACTIONS.EDIT' | translate}} <mat-icon aria-hidden>edit</mat-icon>{{'TENANT-LISTING.ACTIONS.EDIT' | translate}}
</a> </a>
<button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)"> <button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)">
<mat-icon>delete</mat-icon> <mat-icon aria-hidden>delete</mat-icon>
{{'TENANT-LISTING.ACTIONS.DELETE' | translate}} {{'TENANT-LISTING.ACTIONS.DELETE' | translate}}
</button> </button>
</mat-menu> </mat-menu>

View File

@ -80,15 +80,15 @@
<ng-template #actions let-row="row" let-item> <ng-template #actions let-row="row" let-item>
<div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()"> <div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()">
<div class="col-auto"> <div class="col-auto">
<button mat-icon-button [matMenuTriggerFor]="actionsMenu"> <button mat-icon-button [matMenuTriggerFor]="actionsMenu" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon> <mat-icon>more_horiz</mat-icon>
</button> </button>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">
<a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/usage-limits/', row.id])"> <a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/usage-limits/', row.id])">
<mat-icon>edit</mat-icon>{{'USAGE-LIMIT-LISTING.ACTIONS.EDIT' | translate}} <mat-icon aria-hidden>edit</mat-icon>{{'USAGE-LIMIT-LISTING.ACTIONS.EDIT' | translate}}
</a> </a>
<button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)"> <button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)">
<mat-icon>delete</mat-icon> <mat-icon aria-hidden>delete</mat-icon>
{{'USAGE-LIMIT-LISTING.ACTIONS.DELETE' | translate}} {{'USAGE-LIMIT-LISTING.ACTIONS.DELETE' | translate}}
</button> </button>
</mat-menu> </mat-menu>

View File

@ -25,7 +25,7 @@
</div> </div>
<div *ngIf="(isLoading || hasListingItems || hasFilters) && !isPublic" <div *ngIf="(isLoading || hasListingItems || hasFilters) && !isPublic"
class="filter-btn" [style.right]="dialog.getDialogById('filters') ? '446px' : '0px'" [style.width]="listingItems.length > 2 ? '57px' : '37px'" (click)="openFiltersDialog()"> class="filter-btn" [style.right]="dialog.getDialogById('filters') ? '446px' : '0px'" [style.width]="listingItems.length > 2 ? '57px' : '37px'" (click)="openFiltersDialog()">
<button mat-raised-button class="p-0" [matBadge]="filtersCount" [matBadgeHidden]="filtersCount === 0" matBadgePosition="before"> <button mat-raised-button class="p-0" [matBadge]="filtersCount" [matBadgeHidden]="filtersCount === 0" matBadgePosition="before" [attr.aria-label]="'ALT-TEXT.OPEN-FILTERS' | translate">
<mat-icon class="mr-4 filter-icon">filter_alt</mat-icon> <mat-icon class="mr-4 filter-icon">filter_alt</mat-icon>
</button> </button>
</div> </div>
@ -49,7 +49,7 @@
</mat-form-field> </mat-form-field>
</div> </div>
<div class="col-auto order-2 order-xl-3 mb-1 pl-0"> <div class="col-auto order-2 order-xl-3 mb-1 pl-0">
<button mat-icon-button (click)="toggleSortDirection()" [matTooltip]="sortingTooltipText"> <button mat-icon-button (click)="toggleSortDirection()" [matTooltip]="sortingTooltipText" [attr.aria-label]="sortingTooltipText">
<mat-icon *ngIf="isAscending">keyboard_double_arrow_up</mat-icon> <mat-icon *ngIf="isAscending">keyboard_double_arrow_up</mat-icon>
<mat-icon *ngIf="isDescending">keyboard_double_arrow_down</mat-icon> <mat-icon *ngIf="isDescending">keyboard_double_arrow_down</mat-icon>
</button> </button>

View File

@ -1,5 +1,5 @@
<div class="description-card"> <div class="description-card">
<a [routerLink]="getItemLink()" class="pointer"> <a [routerLink]="getItemLink()" class="pointer" [attr.aria-label]="'ALT-TEXT.OPEN-DESCRIPTION-OVERVIEW' | translate">
<div class="d-flex flex-direction-row"> <div class="d-flex flex-direction-row">
<div class="col-auto description-label">{{'DESCRIPTION-LISTING.DESCRIPTION' | translate}}</div> <div class="col-auto description-label">{{'DESCRIPTION-LISTING.DESCRIPTION' | translate}}</div>
<div class="col-auto ml-auto"> <div class="col-auto ml-auto">
@ -33,10 +33,32 @@
</div> </div>
</a> </a>
<div class="description-card-actions"> <div class="description-card-actions">
<a class="col-auto border-right pointer" *ngIf="fileTransformerService.availableFormatsFor(fileTransformerEntityTypeEnum.Description) && fileTransformerService.availableFormatsFor(fileTransformerEntityTypeEnum.Description).length > 0" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DESCRIPTION-LISTING.ACTIONS.EXPORT' | translate}}</a> <a
<a class="col-auto border-right pointer" *ngIf="canInvitePlanUsers" (click)="openShareDialog()"><span class="material-icons icon-align pr-2">group_add</span>{{'DESCRIPTION-LISTING.ACTIONS.INVITE-SHORT' | translate}}</a> class="col-auto border-right pointer d-flex align-items-center gap-quarter-rem"
<a class="col-auto border-right pointer" *ngIf="isAuthenticated()" (click)="copyToPlan(description)"><span class="material-icons icon-align pr-2">file_copy</span>{{'DESCRIPTION-LISTING.ACTIONS.COPY-DESCRIPTION' | translate}}</a> *ngIf="fileTransformerService.availableFormatsFor(fileTransformerEntityTypeEnum.Description) && fileTransformerService.availableFormatsFor(fileTransformerEntityTypeEnum.Description).length > 0"
<a class="col-auto border-right pointer" *ngIf="canDelete" (click)="deleteClicked(description.id)"><span class="material-icons icon-align pr-2">delete</span>{{ 'DESCRIPTION-LISTING.ACTIONS.DELETE' | translate }}</a> [matMenuTriggerFor]="exportMenu"
>
<mat-icon class="material-icons icon-align pr-2" aria-hidden>open_in_new</mat-icon>
{{'DESCRIPTION-LISTING.ACTIONS.EXPORT' | translate}}
</a>
<a
class="col-auto border-right pointer d-flex align-items-center gap-quarter-rem"
*ngIf="canInvitePlanUsers"
(click)="openShareDialog()"
>
<mat-icon class="material-icons icon-align pr-2" aria-hidden>group_add</mat-icon>{{'DESCRIPTION-LISTING.ACTIONS.INVITE-SHORT' | translate}}</a>
<a
class="col-auto border-right pointer d-flex align-items-center gap-quarter-rem"
*ngIf="isAuthenticated()"
(click)="copyToPlan(description)"
>
<mat-icon class="material-icons icon-align pr-2" aria-hidden>file_copy</mat-icon>{{'DESCRIPTION-LISTING.ACTIONS.COPY-DESCRIPTION' | translate}}</a>
<a
class="col-auto border-right pointer d-flex align-items-center gap-quarter-rem"
*ngIf="canDelete"
(click)="deleteClicked(description.id)"
>
<mat-icon class="material-icons icon-align pr-2" aria-hidden>delete</mat-icon>{{ 'DESCRIPTION-LISTING.ACTIONS.DELETE' | translate }}</a>
</div> </div>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">
<button *ngIf="isAuthenticated()" mat-menu-item (click)="copyToPlan(description)" class="menu-item"> <button *ngIf="isAuthenticated()" mat-menu-item (click)="copyToPlan(description)" class="menu-item">

View File

@ -7,7 +7,7 @@
</div> </div>
<div class="col-auto p-0" [ngClass]="{'mb-1': item.title == HOME_SYMBOL}"> <div class="col-auto p-0" [ngClass]="{'mb-1': item.title == HOME_SYMBOL}">
<a *ngIf="(!item?.skipNavigation && !isLast) else skipNavigation" [routerLink]="computePath(index)" class=" text-black" disabled> <a *ngIf="(!item?.skipNavigation && !isLast) else skipNavigation" [routerLink]="computePath(index)" [attr.aria-label]="item.title !== HOME_SYMBOL ? item.title : ('ALT-TEXT.GO-TO-MAIN' | translate)" class=" text-black" disabled>
<ng-container *ngIf="item.title !== HOME_SYMBOL else homeIcon"> <ng-container *ngIf="item.title !== HOME_SYMBOL else homeIcon">
<span class="breadcrumb-item p-2"> <span class="breadcrumb-item p-2">
{{ item.title | translate:item.translateParams }} {{ item.title | translate:item.translateParams }}

View File

@ -40,9 +40,9 @@
</mat-menu> </mat-menu>
</li> </li>
<li class="navbar-item-lg" *ngIf="isAuthenticated()"> <li class="navbar-item-lg" *ngIf="isAuthenticated()">
<button mat-button [matMenuTriggerFor]="tenantMenu" class="p-0 lang" aria-label="{{'ALT-TEXT.TENANT-SELECT' | translate}}"> <button mat-button [matMenuTriggerFor]="tenantMenu" class="p-0 lang" [attr.aria-label]="'ALT-TEXT.TENANT-SELECT' | translate">
<mat-icon class="m-0 material-symbols-outlined">tenancy</mat-icon> <mat-icon class="m-0 material-symbols-outlined">tenancy</mat-icon>
<mat-icon class="m-0" aria-hidden>arrow_drop_down</mat-icon> <mat-icon class="m-0">arrow_drop_down</mat-icon>
</button> </button>
<mat-menu #tenantMenu="matMenu" class="nav-mat-menu"> <mat-menu #tenantMenu="matMenu" class="nav-mat-menu">
<app-tenant-switch class="d-lg-block d-none"></app-tenant-switch> <app-tenant-switch class="d-lg-block d-none"></app-tenant-switch>
@ -79,16 +79,16 @@
<li class="ml-3 d-flex justify-content-around align-items-center" (click)="$event.stopPropagation()" tabindex="0"> <li class="ml-3 d-flex justify-content-around align-items-center" (click)="$event.stopPropagation()" tabindex="0">
<button mat-button class="faq-title" (click)="openFaqDialog()" aria-label="faq">{{ 'FAQ.TITLE' | translate }}</button> <button mat-button class="faq-title" (click)="openFaqDialog()" aria-label="faq">{{ 'FAQ.TITLE' | translate }}</button>
<button mat-button [matMenuTriggerFor]="languageMenu" class="lang" [attr.aria-label]="'ALT-TEXT.LANGUAGE-SELECT' | translate" (click)="$event.stopPropagation();"> <button mat-button [matMenuTriggerFor]="languageMenu" class="lang" [attr.aria-label]="'ALT-TEXT.LANGUAGE-SELECT' | translate" (click)="$event.stopPropagation();">
<mat-icon aria-hidden>language</mat-icon><span class="text-uppercase" style="font-weight: 500;">{{selectedLanguage}}</span> <mat-icon>language</mat-icon><span class="text-uppercase" style="font-weight: 500;">{{selectedLanguage}}</span>
<mat-icon iconPositionEnd aria-hidden aria-hidden>arrow_drop_down</mat-icon> <mat-icon iconPositionEnd>arrow_drop_down</mat-icon>
</button> </button>
<mat-menu #languageMenu="matMenu" class="nav-mat-menu"> <mat-menu #languageMenu="matMenu" class="nav-mat-menu">
<app-language (languageChange)="getLanguage($event)"></app-language> <app-language (languageChange)="getLanguage($event)"></app-language>
</mat-menu> </mat-menu>
<ng-container *ngIf="isAuthenticated()"> <ng-container *ngIf="isAuthenticated()">
<button mat-button [matMenuTriggerFor]="tenantMenu" class="p-0" [attr.aria-label]="'ALT-TEXT.TENANT-SELECT' | translate"> <button mat-button [matMenuTriggerFor]="tenantMenu" class="p-0" [attr.aria-label]="'ALT-TEXT.TENANT-SELECT' | translate">
<mat-icon class="m-0 material-symbols-outlined" aria-hidden>tenancy</mat-icon> <mat-icon class="m-0 material-symbols-outlined">tenancy</mat-icon>
<mat-icon class="m-0" aria-hidden>arrow_drop_down</mat-icon> <mat-icon class="m-0">arrow_drop_down</mat-icon>
</button> </button>
<mat-menu #tenantMenu="matMenu" class="nav-mat-menu"> <mat-menu #tenantMenu="matMenu" class="nav-mat-menu">
<app-tenant-switch></app-tenant-switch> <app-tenant-switch></app-tenant-switch>

View File

@ -1,5 +1,5 @@
<div class="plan-card"> <div class="plan-card">
<a [routerLink]="isPublic ? this.routerUtils.generateUrl(['/explore-plans/overview/public/', plan.id]) : this.routerUtils.generateUrl(['/plans/overview/', plan.id])" class="pointer"> <a [routerLink]="isPublic ? this.routerUtils.generateUrl(['/explore-plans/overview/public/', plan.id]) : this.routerUtils.generateUrl(['/plans/overview/', plan.id])" class="pointer" [attr.aria-label]="'ALT-TEXT.OPEN-PLAN-OVERVIEW' | translate">
<div class="d-flex flex-direction-row"> <div class="d-flex flex-direction-row">
<div class="col-auto plan-label">{{ 'PLAN-LISTING.PLAN' | translate }}</div> <div class="col-auto plan-label">{{ 'PLAN-LISTING.PLAN' | translate }}</div>
<div class="col-auto ml-auto"> <div class="col-auto ml-auto">
@ -41,14 +41,28 @@
<a class="d-flex justify-content-center pb-3 show-more" *ngIf="plan.descriptions?.length > 3" [routerLink]="isPublic ? this.routerUtils.generateUrl(['/explore-plans/overview/public/', plan.id]) : this.routerUtils.generateUrl(['/plans/overview/', plan.id])"><u>{{'GENERAL.ACTIONS.SHOW-MORE' | translate}}</u></a> <a class="d-flex justify-content-center pb-3 show-more" *ngIf="plan.descriptions?.length > 3" [routerLink]="isPublic ? this.routerUtils.generateUrl(['/explore-plans/overview/public/', plan.id]) : this.routerUtils.generateUrl(['/plans/overview/', plan.id])"><u>{{'GENERAL.ACTIONS.SHOW-MORE' | translate}}</u></a>
</a> </a>
<div class="plan-card-actions"> <div class="plan-card-actions">
<a class="col-auto border-right pointer" *ngIf="canExportPlan && fileTransformerService.availableFormatsFor(fileTransformerEntityTypeEnum.Plan).length > 0" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'PLAN-LISTING.ACTIONS.EXPORT' | translate}}</a> <a class="col-auto border-right pointer d-flex align-items-center gap-quarter-rem" *ngIf="canExportPlan && fileTransformerService.availableFormatsFor(fileTransformerEntityTypeEnum.Plan).length > 0" [matMenuTriggerFor]="exportMenu">
<a class="col-auto border-right pointer" *ngIf="canEditPlan" [routerLink]="this.routerUtils.generateUrl(['/plans/edit/', plan.id])" target="_blank"><span class="material-icons icon-align">add</span>{{'PLAN-LISTING.ACTIONS.ADD-DESCRIPTION-SHORT' | translate}}</a> <mat-icon class="material-icons icon-align pr-2" aria-hidden>open_in_new</mat-icon>{{'PLAN-LISTING.ACTIONS.EXPORT' | translate}}
<a class="col-auto border-right pointer" *ngIf="canInvitePlanUsers" (click)="inviteToPlan()"><span class="material-icons icon-align pr-2">group_add</span>{{'PLAN-LISTING.ACTIONS.INVITE-SHORT' | translate}}</a> </a>
<a class="col-auto border-right pointer" *ngIf="canClonePlan" (click)="cloneClicked()"><span class="material-icons icon-align pr-2">filter_none</span>{{'PLAN-LISTING.ACTIONS.CLONE' | translate}}</a> <a class="col-auto border-right pointer d-flex align-items-center gap-quarter-rem" *ngIf="canEditPlan" [routerLink]="this.routerUtils.generateUrl(['/plans/edit/', plan.id])" target="_blank">
<a class="col-auto border-right pointer" *ngIf="!isAuthenticated() && showAllVersionsAction" (click)="viewVersions(plan)"><span class="material-icons icon-align pr-2">library_books</span>{{'PLAN-LISTING.ACTIONS.VIEW-VERSION' | translate}}</a> <mat-icon class="material-icons icon-align">add</mat-icon>{{'PLAN-LISTING.ACTIONS.ADD-DESCRIPTION-SHORT' | translate}}
</a>
<a class="col-auto border-right pointer d-flex align-items-center gap-quarter-rem" *ngIf="canInvitePlanUsers" (click)="inviteToPlan()">
<mat-icon class="material-icons icon-align pr-2" aria-hidden>group_add</mat-icon>{{'PLAN-LISTING.ACTIONS.INVITE-SHORT' | translate}}
</a>
<a class="col-auto border-right pointer d-flex align-items-center gap-quarter-rem" *ngIf="canClonePlan" (click)="cloneClicked()">
<mat-icon class="material-icons icon-align pr-2" aria-hidden>filter_none</mat-icon>{{'PLAN-LISTING.ACTIONS.CLONE' | translate}}
</a>
<a class="col-auto border-right pointer d-flex align-items-center gap-quarter-rem" *ngIf="!isAuthenticated() && showAllVersionsAction" (click)="viewVersions(plan)">
<mat-icon class="material-icons icon-align pr-2" aria-hidden>library_books</mat-icon>{{'PLAN-LISTING.ACTIONS.VIEW-VERSION' | translate}}
</a>
<a class="col-auto border-right pointer" *ngIf="canDeletePlan" (click)="deleteClicked(plan.id)"><span class="material-icons icon-align pr-2">delete</span>{{ 'PLAN-LISTING.ACTIONS.DELETE' | translate }}</a> <a class="col-auto border-right pointer d-flex align-items-center gap-quarter-rem" *ngIf="canDeletePlan" (click)="deleteClicked(plan.id)">
<a class="col-auto pointer" *ngIf="showActionsMenu" [matMenuTriggerFor]="actionsMenu"><span class="material-icons icon-align pl-2">more_horiz</span></a> <mat-icon class="material-icons icon-align pr-2" aria-hidden>delete</mat-icon>{{ 'PLAN-LISTING.ACTIONS.DELETE' | translate }}
</a>
<a class="col-auto pointer" *ngIf="showActionsMenu" [matMenuTriggerFor]="actionsMenu" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon>
</a>
</div> </div>
<mat-menu #exportMenu="matMenu" xPosition="before"> <mat-menu #exportMenu="matMenu" xPosition="before">
<button mat-menu-item *ngFor='let fileTransformer of fileTransformerService.availableFormatsFor(fileTransformerEntityTypeEnum.Plan)' (click)="fileTransformerService.exportPlan(plan.id, fileTransformer.repositoryId, fileTransformer.format, isPublic)"> <button mat-menu-item *ngFor='let fileTransformer of fileTransformerService.availableFormatsFor(fileTransformerEntityTypeEnum.Plan)' (click)="fileTransformerService.exportPlan(plan.id, fileTransformer.repositoryId, fileTransformer.format, isPublic)">

View File

@ -15,7 +15,7 @@
<app-navigation-breadcrumb /> <app-navigation-breadcrumb />
</div> </div>
<div *ngIf="!versionsModeEnabled && (isLoading || hasListingItems || hasFilters) && !isPublic" class="filter-btn" [style.right]="dialog.getDialogById('filters') ? '446px' : '0px'" [style.width]="listingItems.length > 2 ? '57px' : '37px'" (click)="openFiltersDialog()"> <div *ngIf="!versionsModeEnabled && (isLoading || hasListingItems || hasFilters) && !isPublic" class="filter-btn" [style.right]="dialog.getDialogById('filters') ? '446px' : '0px'" [style.width]="listingItems.length > 2 ? '57px' : '37px'" (click)="openFiltersDialog()">
<button mat-raised-button class="p-0" [matBadge]="filtersCount" [matBadgeHidden]="filtersCount === 0" matBadgePosition="before"> <button mat-raised-button class="p-0" [matBadge]="filtersCount" [matBadgeHidden]="filtersCount === 0" matBadgePosition="before" [attr.aria-label]="'ALT-TEXT.OPEN-FILTERS' | translate">
<mat-icon class="mr-4 filter-icon">filter_alt</mat-icon> <mat-icon class="mr-4 filter-icon">filter_alt</mat-icon>
</button> </button>
</div> </div>
@ -39,7 +39,7 @@
</mat-form-field> </mat-form-field>
</div> </div>
<div class="col-auto order-2 order-xl-3 mb-1 pl-0"> <div class="col-auto order-2 order-xl-3 mb-1 pl-0">
<button mat-icon-button (click)="toggleSortDirection()" [matTooltip]="sortingTooltipText"> <button mat-icon-button (click)="toggleSortDirection()" [matTooltip]="sortingTooltipText" [attr.aria-label]="sortingTooltipText">
<mat-icon *ngIf="isAscending">keyboard_double_arrow_up</mat-icon> <mat-icon *ngIf="isAscending">keyboard_double_arrow_up</mat-icon>
<mat-icon *ngIf="isDescending">keyboard_double_arrow_down</mat-icon> <mat-icon *ngIf="isDescending">keyboard_double_arrow_down</mat-icon>
</button> </button>

View File

@ -41,14 +41,14 @@
<div class="col"> <div class="col">
<div class="row"> <div class="row">
<div class="col-auto mb-1 field-title">{{'USER-PROFILE.SETTINGS.NAME' | translate}} <div class="col-auto mb-1 field-title">{{'USER-PROFILE.SETTINGS.NAME' | translate}}
&nbsp;*<small class="required-text">{{'GENERAL.VALIDATION.REQUIRED' | translate }}</small>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col name-form"> <div class="col name-form">
<mat-form-field> <mat-form-field>
<input matInput type="text" name="name" placeholder="{{'USER-PROFILE.SETTINGS.NAME' | translate}}" [formControl]="formGroup.get('name')" required> <input matInput type="text" name="name" placeholder="{{'USER-PROFILE.SETTINGS.NAME' | translate}}" [formControl]="formGroup.get('name')">
<mat-error *ngIf="formGroup.get('name').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error> <mat-error *ngIf="formGroup.get('name').hasError('backendError')">{{formGroup.get('name').getError('backendError').message}}</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>
</div> </div>
@ -145,7 +145,7 @@
<mat-form-field class="w-100"> <mat-form-field class="w-100">
<input matInput autocomplete="off" placeholder="{{'USER-PROFILE.SETTINGS.TIMEZONE' | translate}}" [matAutocomplete]="timezoneAuto" type="text" name="timezone" [formControl]="formGroup.get('additionalInfo').get('timezone')"> <input matInput autocomplete="off" placeholder="{{'USER-PROFILE.SETTINGS.TIMEZONE' | translate}}" [matAutocomplete]="timezoneAuto" type="text" name="timezone" [formControl]="formGroup.get('additionalInfo').get('timezone')">
<mat-error *ngIf="formGroup.get('additionalInfo').get('timezone').hasError('backendError')">{{formGroup.get('additionalInfo').get('timezone').getError('backendError').message}}</mat-error> <mat-error *ngIf="formGroup.get('additionalInfo').get('timezone').hasError('backendError')">{{formGroup.get('additionalInfo').get('timezone').getError('backendError').message}}</mat-error>
<mat-error *ngIf="formGroup.get('additionalInfo').get('timezone').hasError('required')">{{'COMMONS.VALIDATION.REQUIRED' | translate}}</mat-error> <mat-error *ngIf="formGroup.get('additionalInfo').get('timezone').hasError('backendError')">{{formGroup.get('additionalInfo').get('timezone').getError('backendError').message}}</mat-error>
<mat-autocomplete autoActiveFirstOption #timezoneAuto="matAutocomplete"> <mat-autocomplete autoActiveFirstOption #timezoneAuto="matAutocomplete">
<mat-option *ngFor="let timezone of filteredTimezones" [value]="timezone">{{timezone | timezoneInfoDisplay}}</mat-option> <mat-option *ngFor="let timezone of filteredTimezones" [value]="timezone">{{timezone | timezoneInfoDisplay}}</mat-option>
</mat-autocomplete> </mat-autocomplete>
@ -190,6 +190,8 @@
</mat-option> </mat-option>
</mat-select> </mat-select>
<mat-error *ngIf="this.formGroup.get('additionalInfo').get('language').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error> <mat-error *ngIf="this.formGroup.get('additionalInfo').get('language').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
<mat-error *ngIf="formGroup.get('additionalInfo').get('language').hasError('backendError')">{{formGroup.get('additionalInfo').get('language').getError('backendError').message}}</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>
</div> </div>

View File

@ -301,7 +301,7 @@ export class UserProfileComponent extends BaseComponent implements OnInit, OnDes
}); });
} }
printErrors(rootform: UntypedFormGroup) { printErrors(rootform: UntypedFormGroup) { //TODO this is wrong
if (!rootform.valid) { if (!rootform.valid) {
Object.keys(rootform.controls).forEach(key => { Object.keys(rootform.controls).forEach(key => {
const errors = rootform.get(key).errors; const errors = rootform.get(key).errors;

View File

@ -2587,6 +2587,10 @@
"NOTIFICATIONS": "Notifications", "NOTIFICATIONS": "Notifications",
"USER-AVATAR": "User avatar", "USER-AVATAR": "User avatar",
"SELECT-OPTION": "Select an option", "SELECT-OPTION": "Select an option",
"INTERNAL-EXTERNAL-USER": "Select internal or external user" "INTERNAL-EXTERNAL-USER": "Select internal or external user",
"OPEN-FILTERS": "Open filters",
"OPEN-PLAN-OVERVIEW": "Open plan overview",
"OPEN-DESCRIPTION-OVERVIEW": "Open description overview",
"MORE-ACTIONS": "More actions"
} }
} }

View File

@ -2587,6 +2587,10 @@
"NOTIFICATIONS": "Notifications", "NOTIFICATIONS": "Notifications",
"USER-AVATAR": "User avatar", "USER-AVATAR": "User avatar",
"SELECT-OPTION": "Select an option", "SELECT-OPTION": "Select an option",
"INTERNAL-EXTERNAL-USER": "Select internal or external user" "INTERNAL-EXTERNAL-USER": "Select internal or external user",
"OPEN-FILTERS": "Open filters",
"OPEN-PLAN-OVERVIEW": "Open plan overview",
"OPEN-DESCRIPTION-OVERVIEW": "Open description overview",
"MORE-ACTIONS": "More actions"
} }
} }

View File

@ -2588,6 +2588,10 @@
"NOTIFICATIONS": "Notifications", "NOTIFICATIONS": "Notifications",
"USER-AVATAR": "User avatar", "USER-AVATAR": "User avatar",
"SELECT-OPTION": "Select an option", "SELECT-OPTION": "Select an option",
"INTERNAL-EXTERNAL-USER": "Select internal or external user" "INTERNAL-EXTERNAL-USER": "Select internal or external user",
"OPEN-FILTERS": "Open filters",
"OPEN-PLAN-OVERVIEW": "Open plan overview",
"OPEN-DESCRIPTION-OVERVIEW": "Open description overview",
"MORE-ACTIONS": "More actions"
} }
} }

View File

@ -2587,6 +2587,10 @@
"NOTIFICATIONS": "Notifications", "NOTIFICATIONS": "Notifications",
"USER-AVATAR": "User avatar", "USER-AVATAR": "User avatar",
"SELECT-OPTION": "Select an option", "SELECT-OPTION": "Select an option",
"INTERNAL-EXTERNAL-USER": "Select internal or external user" "INTERNAL-EXTERNAL-USER": "Select internal or external user",
"OPEN-FILTERS": "Open filters",
"OPEN-PLAN-OVERVIEW": "Open plan overview",
"OPEN-DESCRIPTION-OVERVIEW": "Open description overview",
"MORE-ACTIONS": "More actions"
} }
} }

View File

@ -2587,6 +2587,10 @@
"NOTIFICATIONS": "Notifications", "NOTIFICATIONS": "Notifications",
"USER-AVATAR": "User avatar", "USER-AVATAR": "User avatar",
"SELECT-OPTION": "Select an option", "SELECT-OPTION": "Select an option",
"INTERNAL-EXTERNAL-USER": "Select internal or external user" "INTERNAL-EXTERNAL-USER": "Select internal or external user",
"OPEN-FILTERS": "Open filters",
"OPEN-PLAN-OVERVIEW": "Open plan overview",
"OPEN-DESCRIPTION-OVERVIEW": "Open description overview",
"MORE-ACTIONS": "More actions"
} }
} }

View File

@ -2587,6 +2587,10 @@
"NOTIFICATIONS": "Notifications", "NOTIFICATIONS": "Notifications",
"USER-AVATAR": "User avatar", "USER-AVATAR": "User avatar",
"SELECT-OPTION": "Select an option", "SELECT-OPTION": "Select an option",
"INTERNAL-EXTERNAL-USER": "Select internal or external user" "INTERNAL-EXTERNAL-USER": "Select internal or external user",
"OPEN-FILTERS": "Open filters",
"OPEN-PLAN-OVERVIEW": "Open plan overview",
"OPEN-DESCRIPTION-OVERVIEW": "Open description overview",
"MORE-ACTIONS": "More actions"
} }
} }

View File

@ -2587,6 +2587,10 @@
"NOTIFICATIONS": "Notifications", "NOTIFICATIONS": "Notifications",
"USER-AVATAR": "User avatar", "USER-AVATAR": "User avatar",
"SELECT-OPTION": "Select an option", "SELECT-OPTION": "Select an option",
"INTERNAL-EXTERNAL-USER": "Select internal or external user" "INTERNAL-EXTERNAL-USER": "Select internal or external user",
"OPEN-FILTERS": "Open filters",
"OPEN-PLAN-OVERVIEW": "Open plan overview",
"OPEN-DESCRIPTION-OVERVIEW": "Open description overview",
"MORE-ACTIONS": "More actions"
} }
} }

View File

@ -2587,6 +2587,10 @@
"NOTIFICATIONS": "Notifications", "NOTIFICATIONS": "Notifications",
"USER-AVATAR": "User avatar", "USER-AVATAR": "User avatar",
"SELECT-OPTION": "Select an option", "SELECT-OPTION": "Select an option",
"INTERNAL-EXTERNAL-USER": "Select internal or external user" "INTERNAL-EXTERNAL-USER": "Select internal or external user",
"OPEN-FILTERS": "Open filters",
"OPEN-PLAN-OVERVIEW": "Open plan overview",
"OPEN-DESCRIPTION-OVERVIEW": "Open description overview",
"MORE-ACTIONS": "More actions"
} }
} }

View File

@ -2587,6 +2587,10 @@
"NOTIFICATIONS": "Notifications", "NOTIFICATIONS": "Notifications",
"USER-AVATAR": "User avatar", "USER-AVATAR": "User avatar",
"SELECT-OPTION": "Select an option", "SELECT-OPTION": "Select an option",
"INTERNAL-EXTERNAL-USER": "Select internal or external user" "INTERNAL-EXTERNAL-USER": "Select internal or external user",
"OPEN-FILTERS": "Open filters",
"OPEN-PLAN-OVERVIEW": "Open plan overview",
"OPEN-DESCRIPTION-OVERVIEW": "Open description overview",
"MORE-ACTIONS": "More actions"
} }
} }

View File

@ -2587,6 +2587,10 @@
"NOTIFICATIONS": "Notifications", "NOTIFICATIONS": "Notifications",
"USER-AVATAR": "User avatar", "USER-AVATAR": "User avatar",
"SELECT-OPTION": "Select an option", "SELECT-OPTION": "Select an option",
"INTERNAL-EXTERNAL-USER": "Select internal or external user" "INTERNAL-EXTERNAL-USER": "Select internal or external user",
"OPEN-FILTERS": "Open filters",
"OPEN-PLAN-OVERVIEW": "Open plan overview",
"OPEN-DESCRIPTION-OVERVIEW": "Open description overview",
"MORE-ACTIONS": "More actions"
} }
} }

View File

@ -2587,6 +2587,10 @@
"NOTIFICATIONS": "Notifications", "NOTIFICATIONS": "Notifications",
"USER-AVATAR": "User avatar", "USER-AVATAR": "User avatar",
"SELECT-OPTION": "Select an option", "SELECT-OPTION": "Select an option",
"INTERNAL-EXTERNAL-USER": "Select internal or external user" "INTERNAL-EXTERNAL-USER": "Select internal or external user",
"OPEN-FILTERS": "Open filters",
"OPEN-PLAN-OVERVIEW": "Open plan overview",
"OPEN-DESCRIPTION-OVERVIEW": "Open description overview",
"MORE-ACTIONS": "More actions"
} }
} }

View File

@ -1,5 +1,5 @@
<mat-form-field subscriptSizing="dynamic" [floatLabel]="floatLabel" class="w-100"> <mat-form-field subscriptSizing="dynamic" [floatLabel]="floatLabel" class="w-100">
<mat-icon *ngIf="suffixIcon" matSuffix>{{suffixIcon}}</mat-icon> <mat-icon *ngIf="suffixIcon" matSuffix>{{suffixIcon}}</mat-icon>
<mat-label *ngIf="label">{{label}}</mat-label> <mat-label *ngIf="label">{{label}}</mat-label>
<input autocomplete="nope" matInput class="search-box" [placeholder]="textPlaceholder" [(ngModel)]="inputValue"> <input autocomplete="off" matInput class="search-box" [placeholder]="textPlaceholder" [(ngModel)]="inputValue">
</mat-form-field> </mat-form-field>

View File

@ -94,15 +94,15 @@
<ng-template #actions let-row="row" let-item> <ng-template #actions let-row="row" let-item>
<div *ngIf="canEdit(row) || canDelete(row)" class="row" (click)="$event.stopPropagation()"> <div *ngIf="canEdit(row) || canDelete(row)" class="row" (click)="$event.stopPropagation()">
<div class="col-auto"> <div class="col-auto">
<button mat-icon-button [matMenuTriggerFor]="actionsMenu"> <button mat-icon-button [matMenuTriggerFor]="actionsMenu" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon> <mat-icon>more_horiz</mat-icon>
</button> </button>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">
<a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/notification-templates/', row.id])"> <a *ngIf="canEdit(row)" mat-menu-item [routerLink]="routerUtils.generateUrl(['/notification-templates/', row.id])">
<mat-icon>edit</mat-icon>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-LISTING.ACTIONS.EDIT' | translate}} <mat-icon aria-hidden>edit</mat-icon>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-LISTING.ACTIONS.EDIT' | translate}}
</a> </a>
<button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)"> <button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)">
<mat-icon>delete</mat-icon> <mat-icon aria-hidden>delete</mat-icon>
{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-LISTING.ACTIONS.DELETE' | translate}} {{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-LISTING.ACTIONS.DELETE' | translate}}
</button> </button>
</mat-menu> </mat-menu>

View File

@ -82,12 +82,12 @@
<ng-template #actions let-row="row" let-item> <ng-template #actions let-row="row" let-item>
<div *ngIf="canDelete(row)" class="row" (click)="$event.stopPropagation()"> <div *ngIf="canDelete(row)" class="row" (click)="$event.stopPropagation()">
<div class="col-auto"> <div class="col-auto">
<button mat-icon-button [matMenuTriggerFor]="actionsMenu"> <button mat-icon-button [matMenuTriggerFor]="actionsMenu" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon> <mat-icon>more_horiz</mat-icon>
</button> </button>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">
<button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)"> <button *ngIf="canDelete(row)" mat-menu-item (click)="deleteType(row.id)">
<mat-icon>delete</mat-icon> <mat-icon aria-hidden>delete</mat-icon>
{{'NOTIFICATION-SERVICE.NOTIFICATION-LISTING.ACTIONS.DELETE' | translate}} {{'NOTIFICATION-SERVICE.NOTIFICATION-LISTING.ACTIONS.DELETE' | translate}}
</button> </button>
</mat-menu> </mat-menu>

View File

@ -78,12 +78,12 @@
<ng-template #actions let-row="row" let-item> <ng-template #actions let-row="row" let-item>
<div class="row" (click)="$event.stopPropagation()"> <div class="row" (click)="$event.stopPropagation()">
<div class="col-auto"> <div class="col-auto">
<button mat-icon-button [matMenuTriggerFor]="actionsMenu"> <button mat-icon-button [matMenuTriggerFor]="actionsMenu" [attr.aria-label]="'ALT-TEXT.MORE-ACTIONS' | translate">
<mat-icon>more_horiz</mat-icon> <mat-icon>more_horiz</mat-icon>
</button> </button>
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">
<button mat-menu-item (click)="deleteType(row.id)"> <button mat-menu-item (click)="deleteType(row.id)">
<mat-icon>delete</mat-icon> <mat-icon aria-hidden>delete</mat-icon>
{{'NOTIFICATION-SERVICE.INAPP-NOTIFICATION-LISTING.ACTIONS.DELETE' | translate}} {{'NOTIFICATION-SERVICE.INAPP-NOTIFICATION-LISTING.ACTIONS.DELETE' | translate}}
</button> </button>
</mat-menu> </mat-menu>