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>
<div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()">
<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>
</button>
<mat-menu #actionsMenu="matMenu">

View File

@ -50,7 +50,7 @@
<ng-template #actions let-row="row" let-item>
<div class="row" (click)="$event.stopPropagation()">
<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>
</button>
<mat-menu #actionsMenu="matMenu">

View File

@ -86,28 +86,28 @@
<ng-template #actions let-row="row" let-item>
<div *ngIf="showActions(row)" class="row" (click)="$event.stopPropagation()">
<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>
</button>
<mat-menu #actionsMenu="matMenu">
<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 *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 *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 *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}}
</a>
<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 *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}}
</button>
</mat-menu>

View File

@ -86,15 +86,15 @@
<ng-template #actions let-row="row" let-item>
<div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()">
<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>
</button>
<mat-menu #actionsMenu="matMenu">
<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>
<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}}
</button>
</mat-menu>

View File

@ -66,12 +66,12 @@
<ng-template #actions let-row="row" let-item>
<div *ngIf="canDelete(row)" class="row" (click)="$event.stopPropagation()">
<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>
</button>
<mat-menu #actionsMenu="matMenu">
<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}}
</button>
</mat-menu>

View File

@ -77,15 +77,15 @@
<ng-template #actions let-row="row" let-item>
<div *ngIf="canEdit(row) || canDelete(row)" class="row" (click)="$event.stopPropagation()">
<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>
</button>
<mat-menu #actionsMenu="matMenu">
<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>
<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}}
</button>
</mat-menu>

View File

@ -81,28 +81,28 @@
<ng-template #actions let-row="row" let-item>
<div class="row" (click)="$event.stopPropagation()">
<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>
</button>
<mat-menu #actionsMenu="matMenu">
<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 *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 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 *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}}
</a>
<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 *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}}
</button>
</mat-menu>

View File

@ -49,15 +49,15 @@
<ng-template #actions let-row="row" let-item>
<div class="row" (click)="$event.stopPropagation()">
<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>
</button>
<mat-menu #actionsMenu="matMenu">
<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>
<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}}
</button>
</mat-menu>

View File

@ -79,15 +79,15 @@
<ng-template #actions let-row="row" let-item>
<div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()">
<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>
</button>
<mat-menu #actionsMenu="matMenu">
<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>
<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}}
</button>
</mat-menu>

View File

@ -80,15 +80,15 @@
<ng-template #actions let-row="row" let-item>
<div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()">
<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>
</button>
<mat-menu #actionsMenu="matMenu">
<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>
<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}}
</button>
</mat-menu>

View File

@ -101,15 +101,15 @@
<ng-template #actions let-row="row" let-item>
<div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()">
<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>
</button>
<mat-menu #actionsMenu="matMenu">
<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>
<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}}
</button>
</mat-menu>

View File

@ -80,15 +80,15 @@
<ng-template #actions let-row="row" let-item>
<div *ngIf="!isDeleted(row)" class="row" (click)="$event.stopPropagation()">
<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>
</button>
<mat-menu #actionsMenu="matMenu">
<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>
<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}}
</button>
</mat-menu>

View File

@ -80,15 +80,15 @@
<ng-template #actions let-row="row" let-item>
<div *ngIf="row?.belongsToCurrentTenant && !isDeleted(row)" class="row" (click)="$event.stopPropagation()">
<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>
</button>
<mat-menu #actionsMenu="matMenu">
<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>
<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}}
</button>
</mat-menu>

View File

@ -25,7 +25,7 @@
</div>
<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()">
<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>
</button>
</div>
@ -49,7 +49,7 @@
</mat-form-field>
</div>
<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="isDescending">keyboard_double_arrow_down</mat-icon>
</button>

View File

@ -1,5 +1,5 @@
<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="col-auto description-label">{{'DESCRIPTION-LISTING.DESCRIPTION' | translate}}</div>
<div class="col-auto ml-auto">
@ -33,10 +33,32 @@
</div>
</a>
<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 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>
<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>
<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>
<a
class="col-auto border-right pointer d-flex align-items-center gap-quarter-rem"
*ngIf="fileTransformerService.availableFormatsFor(fileTransformerEntityTypeEnum.Description) && fileTransformerService.availableFormatsFor(fileTransformerEntityTypeEnum.Description).length > 0"
[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>
<mat-menu #actionsMenu="matMenu">
<button *ngIf="isAuthenticated()" mat-menu-item (click)="copyToPlan(description)" class="menu-item">

View File

@ -7,7 +7,7 @@
</div>
<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">
<span class="breadcrumb-item p-2">
{{ item.title | translate:item.translateParams }}

View File

@ -40,9 +40,9 @@
</mat-menu>
</li>
<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" aria-hidden>arrow_drop_down</mat-icon>
<mat-icon class="m-0">arrow_drop_down</mat-icon>
</button>
<mat-menu #tenantMenu="matMenu" class="nav-mat-menu">
<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">
<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();">
<mat-icon aria-hidden>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>language</mat-icon><span class="text-uppercase" style="font-weight: 500;">{{selectedLanguage}}</span>
<mat-icon iconPositionEnd>arrow_drop_down</mat-icon>
</button>
<mat-menu #languageMenu="matMenu" class="nav-mat-menu">
<app-language (languageChange)="getLanguage($event)"></app-language>
</mat-menu>
<ng-container *ngIf="isAuthenticated()">
<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" aria-hidden>arrow_drop_down</mat-icon>
<mat-icon class="m-0 material-symbols-outlined">tenancy</mat-icon>
<mat-icon class="m-0">arrow_drop_down</mat-icon>
</button>
<mat-menu #tenantMenu="matMenu" class="nav-mat-menu">
<app-tenant-switch></app-tenant-switch>

View File

@ -1,5 +1,5 @@
<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="col-auto plan-label">{{ 'PLAN-LISTING.PLAN' | translate }}</div>
<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>
<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" *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>
<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 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" *ngIf="!isAuthenticated() && showAllVersionsAction" (click)="viewVersions(plan)"><span class="material-icons icon-align pr-2">library_books</span>{{'PLAN-LISTING.ACTIONS.VIEW-VERSION' | 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">
<mat-icon class="material-icons icon-align pr-2" aria-hidden>open_in_new</mat-icon>{{'PLAN-LISTING.ACTIONS.EXPORT' | 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">
<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 pointer" *ngIf="showActionsMenu" [matMenuTriggerFor]="actionsMenu"><span class="material-icons icon-align pl-2">more_horiz</span></a>
<a class="col-auto border-right pointer d-flex align-items-center gap-quarter-rem" *ngIf="canDeletePlan" (click)="deleteClicked(plan.id)">
<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>
<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)">

View File

@ -15,7 +15,7 @@
<app-navigation-breadcrumb />
</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()">
<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>
</button>
</div>
@ -39,7 +39,7 @@
</mat-form-field>
</div>
<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="isDescending">keyboard_double_arrow_down</mat-icon>
</button>

View File

@ -41,14 +41,14 @@
<div class="col">
<div class="row">
<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 class="row">
<div class="col name-form">
<mat-form-field>
<input matInput type="text" name="name" placeholder="{{'USER-PROFILE.SETTINGS.NAME' | translate}}" [formControl]="formGroup.get('name')" required>
<mat-error *ngIf="formGroup.get('name').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
<input matInput type="text" name="name" placeholder="{{'USER-PROFILE.SETTINGS.NAME' | translate}}" [formControl]="formGroup.get('name')">
<mat-error *ngIf="formGroup.get('name').hasError('backendError')">{{formGroup.get('name').getError('backendError').message}}</mat-error>
</mat-form-field>
</div>
</div>
@ -145,7 +145,7 @@
<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')">
<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-option *ngFor="let timezone of filteredTimezones" [value]="timezone">{{timezone | timezoneInfoDisplay}}</mat-option>
</mat-autocomplete>
@ -190,6 +190,8 @@
</mat-option>
</mat-select>
<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>
</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) {
Object.keys(rootform.controls).forEach(key => {
const errors = rootform.get(key).errors;

View File

@ -2587,6 +2587,10 @@
"NOTIFICATIONS": "Notifications",
"USER-AVATAR": "User avatar",
"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",
"USER-AVATAR": "User avatar",
"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",
"USER-AVATAR": "User avatar",
"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",
"USER-AVATAR": "User avatar",
"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",
"USER-AVATAR": "User avatar",
"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",
"USER-AVATAR": "User avatar",
"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",
"USER-AVATAR": "User avatar",
"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",
"USER-AVATAR": "User avatar",
"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",
"USER-AVATAR": "User avatar",
"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",
"USER-AVATAR": "User avatar",
"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",
"USER-AVATAR": "User avatar",
"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-icon *ngIf="suffixIcon" matSuffix>{{suffixIcon}}</mat-icon>
<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>

View File

@ -94,15 +94,15 @@
<ng-template #actions let-row="row" let-item>
<div *ngIf="canEdit(row) || canDelete(row)" class="row" (click)="$event.stopPropagation()">
<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>
</button>
<mat-menu #actionsMenu="matMenu">
<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>
<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}}
</button>
</mat-menu>

View File

@ -82,12 +82,12 @@
<ng-template #actions let-row="row" let-item>
<div *ngIf="canDelete(row)" class="row" (click)="$event.stopPropagation()">
<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>
</button>
<mat-menu #actionsMenu="matMenu">
<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}}
</button>
</mat-menu>

View File

@ -78,12 +78,12 @@
<ng-template #actions let-row="row" let-item>
<div class="row" (click)="$event.stopPropagation()">
<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>
</button>
<mat-menu #actionsMenu="matMenu">
<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}}
</button>
</mat-menu>