mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-05-12 17:04:57 +00:00
This reverts commit f3a94bdfa44108082089ed21f79e3a466359344b.
This commit is contained in:
parent
e457dd3a78
commit
41c3667906
@ -12,7 +12,7 @@
|
|||||||
<adf-search-filter-chips></adf-search-filter-chips>
|
<adf-search-filter-chips></adf-search-filter-chips>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<mat-icon adf-reset-search title="reset" style="padding-right: 5px;">refresh</mat-icon>
|
<mat-icon adf-reset-search matTooltip="reset" style="padding-right: 5px;">refresh</mat-icon>
|
||||||
|
|
||||||
<adf-search-sorting-picker style="width: 240px"></adf-search-sorting-picker>
|
<adf-search-sorting-picker style="width: 240px"></adf-search-sorting-picker>
|
||||||
</div>
|
</div>
|
||||||
|
@ -16,3 +16,4 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
export * from './error.component';
|
export * from './error.component';
|
||||||
|
export * from './validation.component';
|
||||||
|
@ -16,7 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
export const materialLocators = {
|
export const materialLocators = {
|
||||||
Error: {
|
Error: {
|
||||||
root: 'mat-error'
|
root: 'mat-error'
|
||||||
}
|
},
|
||||||
|
Tooltip: {
|
||||||
|
root: 'mat-tooltip-component'
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
/*!
|
||||||
|
* @license
|
||||||
|
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Page } from '@playwright/test';
|
||||||
|
import { BaseComponent } from '../base.component';
|
||||||
|
import { materialLocators } from './material-locators';
|
||||||
|
|
||||||
|
export class TooltipComponent extends BaseComponent {
|
||||||
|
private static rootElement = materialLocators.Tooltip.root;
|
||||||
|
public content = this.getChild('div');
|
||||||
|
|
||||||
|
constructor(page: Page) {
|
||||||
|
super(page, TooltipComponent.rootElement);
|
||||||
|
}
|
||||||
|
}
|
@ -17,11 +17,13 @@
|
|||||||
|
|
||||||
import { Page } from '@playwright/test';
|
import { Page } from '@playwright/test';
|
||||||
import { BaseComponent } from '../../page-object/components/base.component';
|
import { BaseComponent } from '../../page-object/components/base.component';
|
||||||
import { ErrorComponent } from '../../page-object/components';
|
import { ErrorComponent, TooltipComponent, ListboxComponent } from '../../page-object/components';
|
||||||
|
|
||||||
export class GroupComponent extends BaseComponent {
|
export class GroupComponent extends BaseComponent {
|
||||||
private static rootElement = 'adf-cloud-group';
|
private static rootElement = 'adf-cloud-group';
|
||||||
public error = new ErrorComponent(this.page);
|
public error = new ErrorComponent(this.page);
|
||||||
|
public tooltip = new TooltipComponent(this.page);
|
||||||
|
public listbox = new ListboxComponent(this.page);
|
||||||
|
|
||||||
public groupNaming = this.getChild('[data-automation-id="adf-cloud-group-chip-list"]');
|
public groupNaming = this.getChild('[data-automation-id="adf-cloud-group-chip-list"]');
|
||||||
public groupInput = this.getChild('[data-automation-id="adf-group-cloud-search-input"]');
|
public groupInput = this.getChild('[data-automation-id="adf-group-cloud-search-input"]');
|
||||||
@ -31,4 +33,5 @@ export class GroupComponent extends BaseComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public getUserLocator = (userName: string) => this.getChild(`[data-automation-id="adf-cloud-group-chip-${userName}"]`);
|
public getUserLocator = (userName: string) => this.getChild(`[data-automation-id="adf-cloud-group-chip-${userName}"]`);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -17,11 +17,12 @@
|
|||||||
|
|
||||||
import { Page } from '@playwright/test';
|
import { Page } from '@playwright/test';
|
||||||
import { BaseComponent } from '../../page-object/components/base.component';
|
import { BaseComponent } from '../../page-object/components/base.component';
|
||||||
import { ErrorComponent, ListboxComponent } from '../../page-object/components';
|
import { ErrorComponent, TooltipComponent, ListboxComponent } from '../../page-object/components';
|
||||||
|
|
||||||
export class PeopleComponent extends BaseComponent {
|
export class PeopleComponent extends BaseComponent {
|
||||||
private static rootElement = 'adf-cloud-people';
|
private static rootElement = 'adf-cloud-people';
|
||||||
public error = new ErrorComponent(this.page);
|
public error = new ErrorComponent(this.page);
|
||||||
|
public tooltip = new TooltipComponent(this.page);
|
||||||
public listbox = new ListboxComponent(this.page);
|
public listbox = new ListboxComponent(this.page);
|
||||||
|
|
||||||
public usersNaming = this.getChild('[data-automation-id="adf-cloud-people-chip-list"]');
|
public usersNaming = this.getChild('[data-automation-id="adf-cloud-people-chip-list"]');
|
||||||
@ -32,4 +33,5 @@ export class PeopleComponent extends BaseComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public getUserLocator = (userName: string) => this.getChild(`[data-automation-id="adf-people-cloud-chip-${userName}"]`);
|
public getUserLocator = (userName: string) => this.getChild(`[data-automation-id="adf-people-cloud-chip-${userName}"]`);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,9 @@ test.describe('Groups component stories tests', () => {
|
|||||||
|
|
||||||
await processServicesCloud.navigateTo({ moduleNames: ['group-cloud'], componentName: 'group-cloud', story: 'mandatory-preselected-groups' });
|
await processServicesCloud.navigateTo({ moduleNames: ['group-cloud'], componentName: 'group-cloud', story: 'mandatory-preselected-groups' });
|
||||||
await expect.soft(groupComponent.groupNaming).toContainText(expectedUsersName);
|
await expect.soft(groupComponent.groupNaming).toContainText(expectedUsersName);
|
||||||
|
|
||||||
|
await groupComponent.getUserLocator('Meat Chicken').hover();
|
||||||
|
await expect(groupComponent.tooltip.content).toContainText('Mandatory');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Invalid Preselected Groups', async ({ processServicesCloud, groupComponent }) => {
|
test('Invalid Preselected Groups', async ({ processServicesCloud, groupComponent }) => {
|
||||||
@ -49,4 +52,5 @@ test.describe('Groups component stories tests', () => {
|
|||||||
|
|
||||||
await expect(groupComponent.error.content).toContainText(expectedWarningIcon + expectedWarningMessage);
|
await expect(groupComponent.error.content).toContainText(expectedWarningIcon + expectedWarningMessage);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -42,6 +42,7 @@ test.describe('People component stories tests', () => {
|
|||||||
await peopleComponent.getUserLocator('Kielbasa Sausage').hover();
|
await peopleComponent.getUserLocator('Kielbasa Sausage').hover();
|
||||||
|
|
||||||
await expect.soft(peopleComponent.usersNaming).toContainText(expectedUsersName);
|
await expect.soft(peopleComponent.usersNaming).toContainText(expectedUsersName);
|
||||||
|
await expect(peopleComponent.tooltip.content).toContainText('Mandatory');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Invalid Preselected Users', async ({ processServicesCloud, peopleComponent }) => {
|
test('Invalid Preselected Users', async ({ processServicesCloud, peopleComponent }) => {
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
<mat-panel-description
|
<mat-panel-description
|
||||||
class="adf-accordion-aspect-list-expansion-panel-header-description"
|
class="adf-accordion-aspect-list-expansion-panel-header-description"
|
||||||
[id]="'aspect-list-'+colIndex+'-title'"
|
[id]="'aspect-list-'+colIndex+'-title'"
|
||||||
[title]="getTitle(aspect)">
|
[matTooltip]="getTitle(aspect)">
|
||||||
{{getTitle(aspect)}}
|
{{getTitle(aspect)}}
|
||||||
</mat-panel-description>
|
</mat-panel-description>
|
||||||
</mat-expansion-panel-header>
|
</mat-expansion-panel-header>
|
||||||
|
@ -26,6 +26,7 @@ import { TranslateModule } from '@ngx-translate/core';
|
|||||||
import { MatDialogModule } from '@angular/material/dialog';
|
import { MatDialogModule } from '@angular/material/dialog';
|
||||||
import { AspectListDialogComponent } from './aspect-list-dialog.component';
|
import { AspectListDialogComponent } from './aspect-list-dialog.component';
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
||||||
import { ContentDirectiveModule } from '../directives/content-directive.module';
|
import { ContentDirectiveModule } from '../directives/content-directive.module';
|
||||||
|
|
||||||
@ -39,10 +40,17 @@ import { ContentDirectiveModule } from '../directives/content-directive.module';
|
|||||||
TranslateModule,
|
TranslateModule,
|
||||||
MatDialogModule,
|
MatDialogModule,
|
||||||
MatButtonModule,
|
MatButtonModule,
|
||||||
|
MatTooltipModule,
|
||||||
MatProgressSpinnerModule,
|
MatProgressSpinnerModule,
|
||||||
ContentDirectiveModule
|
ContentDirectiveModule
|
||||||
],
|
],
|
||||||
exports: [AspectListComponent, AspectListDialogComponent],
|
exports: [
|
||||||
declarations: [AspectListComponent, AspectListDialogComponent]
|
AspectListComponent,
|
||||||
|
AspectListDialogComponent
|
||||||
|
],
|
||||||
|
declarations: [
|
||||||
|
AspectListComponent,
|
||||||
|
AspectListDialogComponent
|
||||||
|
]
|
||||||
})
|
})
|
||||||
export class AspectListModule {}
|
export class AspectListModule { }
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
{{ 'NODE_SELECTOR.UPLOAD_FROM_DEVICE' | translate }}
|
{{ 'NODE_SELECTOR.UPLOAD_FROM_DEVICE' | translate }}
|
||||||
<mat-icon *ngIf="hasUploadError()"
|
<mat-icon *ngIf="hasUploadError()"
|
||||||
data-automation-id="adf-content-node-selector-disabled-tab-info-icon"
|
data-automation-id="adf-content-node-selector-disabled-tab-info-icon"
|
||||||
title="{{ getWarningMessage() | translate }}">info
|
matTooltip="{{ getWarningMessage() | translate }}">info
|
||||||
</mat-icon>
|
</mat-icon>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</div>
|
</div>
|
||||||
|
@ -334,12 +334,12 @@ describe('ContentNodeSelectorComponent', () => {
|
|||||||
|
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
const infoMatIcon = getTabInfoButton();
|
const infoMatIcon = getTabInfoButton();
|
||||||
const iconTooltipMessage = infoMatIcon.attributes['title'];
|
const iconTooltipMessage = infoMatIcon.attributes['ng-reflect-message'];
|
||||||
|
|
||||||
const expectedMessage = 'NODE_SELECTOR.UPLOAD_BUTTON_SEARCH_WARNING_MESSAGE';
|
const expectedMessage = 'NODE_SELECTOR.UPLOAD_BUTTON_SEARCH_WARNING_MESSAGE';
|
||||||
|
|
||||||
expect(component.getWarningMessage()).toEqual(expectedMessage);
|
expect(component.getWarningMessage()).toEqual(expectedMessage);
|
||||||
expect(iconTooltipMessage).toEqual(expectedMessage);
|
expect(iconTooltipMessage).toEqual(expectedMessage.substring(0, 30));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not be able to show warning message if it is not in search mode', () => {
|
it('should not be able to show warning message if it is not in search mode', () => {
|
||||||
@ -394,11 +394,11 @@ describe('ContentNodeSelectorComponent', () => {
|
|||||||
|
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
const infoMatIcon = getTabInfoButton();
|
const infoMatIcon = getTabInfoButton();
|
||||||
const iconTooltipMessage = infoMatIcon.attributes['title'];
|
const iconTooltipMessage = infoMatIcon.attributes['ng-reflect-message'];
|
||||||
const expectedMessage = 'NODE_SELECTOR.UPLOAD_BUTTON_PERMISSION_WARNING_MESSAGE';
|
const expectedMessage = 'NODE_SELECTOR.UPLOAD_BUTTON_PERMISSION_WARNING_MESSAGE';
|
||||||
|
|
||||||
expect(component.getWarningMessage()).toEqual(expectedMessage);
|
expect(component.getWarningMessage()).toEqual(expectedMessage);
|
||||||
expect(iconTooltipMessage).toEqual(expectedMessage);
|
expect(iconTooltipMessage).toEqual(expectedMessage.substring(0, 30));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not be able to show warning message while loading documents', () => {
|
it('should not be able to show warning message while loading documents', () => {
|
||||||
|
@ -5,13 +5,13 @@
|
|||||||
<mat-dialog-content>
|
<mat-dialog-content>
|
||||||
<br />
|
<br />
|
||||||
<form [formGroup]="form" (submit)="submit()">
|
<form [formGroup]="form" (submit)="submit()">
|
||||||
<mat-checkbox data-automation-id="adf-lock-node-checkbox" class="adf-lock-file-name" [title]="nodeName" [formControlName]="'isLocked'" ngDefaultControl>
|
<mat-checkbox data-automation-id="adf-lock-node-checkbox" class="adf-lock-file-name" matTooltip="{{ nodeName }}" [formControlName]="'isLocked'" ngDefaultControl>
|
||||||
{{ 'CORE.FILE_DIALOG.FILE_LOCK_CHECKBOX' | translate }} <strong>"{{ nodeName }}"</strong>
|
{{ 'CORE.FILE_DIALOG.FILE_LOCK_CHECKBOX' | translate }} <strong>"{{ nodeName }}"</strong>
|
||||||
</mat-checkbox>
|
</mat-checkbox>
|
||||||
|
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
<div *ngIf="form.value?.isLocked">
|
<div *ngIf="form.value.isLocked">
|
||||||
<mat-checkbox class="adf-lock-file-name" [formControlName]="'allowOwner'" ngDefaultControl>
|
<mat-checkbox class="adf-lock-file-name" [formControlName]="'allowOwner'" ngDefaultControl>
|
||||||
{{ 'CORE.FILE_DIALOG.ALLOW_OTHERS_CHECKBOX' | translate }}
|
{{ 'CORE.FILE_DIALOG.ALLOW_OTHERS_CHECKBOX' | translate }}
|
||||||
</mat-checkbox>
|
</mat-checkbox>
|
||||||
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
<mat-form-field *ngIf="form.value?.isTimeLock">
|
<mat-form-field *ngIf="form.value.isTimeLock">
|
||||||
<mat-datetimepicker-toggle [for]="datetimePicker" matSuffix></mat-datetimepicker-toggle>
|
<mat-datetimepicker-toggle [for]="datetimePicker" matSuffix></mat-datetimepicker-toggle>
|
||||||
<mat-datetimepicker #datetimePicker type="datetime" [openOnFocus]="true" [timeInterval]="1"></mat-datetimepicker>
|
<mat-datetimepicker #datetimePicker type="datetime" [openOnFocus]="true" [timeInterval]="1"></mat-datetimepicker>
|
||||||
<input matInput [formControlName]="'time'" [matDatetimepicker]="datetimePicker" required autocomplete="false">
|
<input matInput [formControlName]="'time'" [matDatetimepicker]="datetimePicker" required autocomplete="false">
|
||||||
|
@ -8,7 +8,9 @@
|
|||||||
[attr.aria-label]="option.name | translate"
|
[attr.aria-label]="option.name | translate"
|
||||||
(change)="changeHandler($event, option)"
|
(change)="changeHandler($event, option)"
|
||||||
class="adf-facet-filter">
|
class="adf-facet-filter">
|
||||||
<div title="{{ option.name | translate }}" class="adf-search-check-list-label">
|
<div matTooltip="{{ option.name | translate }}"
|
||||||
|
matTooltipPosition="before"
|
||||||
|
class="adf-search-check-list-label">
|
||||||
{{ option.name | translate }}
|
{{ option.name | translate }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -4,11 +4,14 @@
|
|||||||
class="adf-option-chips adf-autocomplete-added-option-chips"
|
class="adf-option-chips adf-autocomplete-added-option-chips"
|
||||||
*ngFor="let option of selectedOptions"
|
*ngFor="let option of selectedOptions"
|
||||||
(removed)="remove(option)">
|
(removed)="remove(option)">
|
||||||
<span [title]="option.fullPath ? ('SEARCH.RESULTS.WILL_CONTAIN' | translate:{searchTerm: option.fullPath}) : undefined">
|
<span [matTooltip]="'SEARCH.RESULTS.WILL_CONTAIN' | translate:{searchTerm: option.fullPath}"
|
||||||
|
[matTooltipDisabled]="!option.fullPath" [matTooltipShowDelay]="tooltipShowDelay">
|
||||||
{{ option.value }}
|
{{ option.value }}
|
||||||
</span>
|
</span>
|
||||||
<button matChipRemove class="adf-option-chips-delete-button adf-autocomplete-added-option-chips-delete-button"
|
<button matChipRemove class="adf-option-chips-delete-button adf-autocomplete-added-option-chips-delete-button" [matTooltipDisabled]="!option.fullPath"
|
||||||
[title]="'SEARCH.FILTER.BUTTONS.REMOVE' | translate">
|
[matTooltip]="('SEARCH.FILTER.BUTTONS.REMOVE' | translate) + ' \'' + option.fullPath + '\''"
|
||||||
|
[matTooltipShowDelay]="tooltipShowDelay"
|
||||||
|
[attr.aria-label]="('SEARCH.FILTER.BUTTONS.REMOVE' | translate) + ' ' + option.value">
|
||||||
<mat-icon class="adf-option-chips-delete-icon adf-autocomplete-added-option-chips-delete-icon">close</mat-icon>
|
<mat-icon class="adf-option-chips-delete-icon adf-autocomplete-added-option-chips-delete-icon">close</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</mat-chip>
|
</mat-chip>
|
||||||
@ -30,9 +33,10 @@
|
|||||||
<ng-container *ngIf="optionInput.value.length > 0">
|
<ng-container *ngIf="optionInput.value.length > 0">
|
||||||
<mat-option
|
<mat-option
|
||||||
[disabled]="option | adfIsIncluded: selectedOptions : compareOption"
|
[disabled]="option | adfIsIncluded: selectedOptions : compareOption"
|
||||||
*ngFor="let option of filteredOptions" [value]="option"
|
*ngFor="let option of filteredOptions" [value]="option" [matTooltipShowDelay]="tooltipShowDelay"
|
||||||
|
[matTooltipDisabled]="!option.fullPath" matTooltipPosition="right"
|
||||||
[attr.data-automation-id]="'option-' + (option.value)"
|
[attr.data-automation-id]="'option-' + (option.value)"
|
||||||
[title]="option.fullPath ? ('SEARCH.RESULTS.WILL_CONTAIN' | translate:{searchTerm: option.fullPath || option.value}): undefined"
|
[matTooltip]="'SEARCH.RESULTS.WILL_CONTAIN' | translate:{searchTerm: option.fullPath || option.value}"
|
||||||
class="adf-search-chip-autocomplete-added-option"
|
class="adf-search-chip-autocomplete-added-option"
|
||||||
[ngClass]="(option | adfIsIncluded: selectedOptions : compareOption) && 'adf-autocomplete-added-option'">
|
[ngClass]="(option | adfIsIncluded: selectedOptions : compareOption) && 'adf-autocomplete-added-option'">
|
||||||
{{ option.fullPath || option.value }}
|
{{ option.fullPath || option.value }}
|
||||||
|
@ -67,7 +67,7 @@ export class SearchChipAutocompleteInputComponent implements OnInit, OnDestroy,
|
|||||||
@Input()
|
@Input()
|
||||||
filter = (options: AutocompleteOption[], value: string): AutocompleteOption[] => {
|
filter = (options: AutocompleteOption[], value: string): AutocompleteOption[] => {
|
||||||
const filterValue = value.toLowerCase();
|
const filterValue = value.toLowerCase();
|
||||||
return options.filter((option) => option.value.toLowerCase().includes(filterValue)).slice(0, 15);
|
return options.filter(option => option.value.toLowerCase().includes(filterValue)).slice(0, 15);
|
||||||
};
|
};
|
||||||
|
|
||||||
@Output()
|
@Output()
|
||||||
@ -80,6 +80,7 @@ export class SearchChipAutocompleteInputComponent implements OnInit, OnDestroy,
|
|||||||
formCtrl = new FormControl('');
|
formCtrl = new FormControl('');
|
||||||
filteredOptions: AutocompleteOption[] = [];
|
filteredOptions: AutocompleteOption[] = [];
|
||||||
selectedOptions: AutocompleteOption[] = [];
|
selectedOptions: AutocompleteOption[] = [];
|
||||||
|
tooltipShowDelay = 800;
|
||||||
private onDestroy$ = new Subject<void>();
|
private onDestroy$ = new Subject<void>();
|
||||||
private _activeAnyOption = false;
|
private _activeAnyOption = false;
|
||||||
|
|
||||||
@ -91,7 +92,7 @@ export class SearchChipAutocompleteInputComponent implements OnInit, OnDestroy,
|
|||||||
this.formCtrl.valueChanges
|
this.formCtrl.valueChanges
|
||||||
.pipe(
|
.pipe(
|
||||||
startWith(''),
|
startWith(''),
|
||||||
tap(() => (this.activeAnyOption = false)),
|
tap(() => this.activeAnyOption = false),
|
||||||
debounce((value: string) => (value ? timer(300) : EMPTY)),
|
debounce((value: string) => (value ? timer(300) : EMPTY)),
|
||||||
takeUntil(this.onDestroy$)
|
takeUntil(this.onDestroy$)
|
||||||
)
|
)
|
||||||
@ -104,10 +105,7 @@ export class SearchChipAutocompleteInputComponent implements OnInit, OnDestroy,
|
|||||||
|
|
||||||
ngOnChanges(changes: SimpleChanges) {
|
ngOnChanges(changes: SimpleChanges) {
|
||||||
if (changes.autocompleteOptions) {
|
if (changes.autocompleteOptions) {
|
||||||
this.filteredOptions =
|
this.filteredOptions = changes.autocompleteOptions.currentValue?.length > 0 ? this.filter(changes.autocompleteOptions.currentValue, this.formCtrl.value) : [];
|
||||||
changes.autocompleteOptions.currentValue?.length > 0
|
|
||||||
? this.filter(changes.autocompleteOptions.currentValue, this.formCtrl.value)
|
|
||||||
: [];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,10 +123,10 @@ export class SearchChipAutocompleteInputComponent implements OnInit, OnDestroy,
|
|||||||
|
|
||||||
if (value && this.isExists(value) && !this.isAdded(value)) {
|
if (value && this.isExists(value) && !this.isAdded(value)) {
|
||||||
if (this.allowOnlyPredefinedValues) {
|
if (this.allowOnlyPredefinedValues) {
|
||||||
const index = this.autocompleteOptions.findIndex((option) => option.value.toLowerCase() === value.toLowerCase());
|
const index = this.autocompleteOptions.findIndex(option => option.value.toLowerCase() === value.toLowerCase());
|
||||||
this.selectedOptions.push(this.autocompleteOptions[index]);
|
this.selectedOptions.push(this.autocompleteOptions[index]);
|
||||||
} else {
|
} else {
|
||||||
this.selectedOptions.push({ value });
|
this.selectedOptions.push({value});
|
||||||
}
|
}
|
||||||
this.optionsChanged.emit(this.selectedOptions);
|
this.optionsChanged.emit(this.selectedOptions);
|
||||||
event.chipInput.clear();
|
event.chipInput.clear();
|
||||||
@ -155,12 +153,14 @@ export class SearchChipAutocompleteInputComponent implements OnInit, OnDestroy,
|
|||||||
|
|
||||||
private isAdded(value: string): boolean {
|
private isAdded(value: string): boolean {
|
||||||
const valueLowerCase = value.toLowerCase();
|
const valueLowerCase = value.toLowerCase();
|
||||||
return this.selectedOptions.some((option) => option.value.toLowerCase() === valueLowerCase);
|
return this.selectedOptions.some(option => option.value.toLowerCase() === valueLowerCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
private isExists(value: string): boolean {
|
private isExists(value: string): boolean {
|
||||||
const valueLowerCase = value.toLowerCase();
|
const valueLowerCase = value.toLowerCase();
|
||||||
return this.allowOnlyPredefinedValues ? this.autocompleteOptions.some((option) => option.value.toLowerCase() === valueLowerCase) : true;
|
return this.allowOnlyPredefinedValues
|
||||||
|
? this.autocompleteOptions.some(option => option.value.toLowerCase() === valueLowerCase)
|
||||||
|
: true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private reset() {
|
private reset() {
|
||||||
|
@ -5,7 +5,8 @@
|
|||||||
color="primary"
|
color="primary"
|
||||||
selected
|
selected
|
||||||
class="adf-search-chip-list-item"
|
class="adf-search-chip-list-item"
|
||||||
title="{{ 'SEARCH.FILTER.BUTTONS.CLEAR-ALL.TOOLTIP' | translate }}"
|
matTooltip="{{ 'SEARCH.FILTER.BUTTONS.CLEAR-ALL.TOOLTIP' | translate }}"
|
||||||
|
matTooltipPosition="right"
|
||||||
(click)="facetFiltersService.resetAllSelectedBuckets()">
|
(click)="facetFiltersService.resetAllSelectedBuckets()">
|
||||||
{{ 'SEARCH.FILTER.BUTTONS.CLEAR-ALL.LABEL' | translate }}
|
{{ 'SEARCH.FILTER.BUTTONS.CLEAR-ALL.LABEL' | translate }}
|
||||||
</mat-chip>
|
</mat-chip>
|
||||||
|
@ -34,7 +34,8 @@
|
|||||||
class="adf-search-filter-facet-checkbox"
|
class="adf-search-filter-facet-checkbox"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
title="{{ bucket.display || bucket.label | translate }} {{ getBucketCountDisplay(bucket) }}"
|
matTooltip="{{ bucket.display || bucket.label | translate }} {{ getBucketCountDisplay(bucket) }}"
|
||||||
|
matTooltipPosition="right"
|
||||||
class="adf-facet-label"
|
class="adf-facet-label"
|
||||||
[class.adf-search-filter-facet-checkbox-checked]="bucket.checked"
|
[class.adf-search-filter-facet-checkbox-checked]="bucket.checked"
|
||||||
>
|
>
|
||||||
|
@ -4,8 +4,9 @@
|
|||||||
<button mat-icon-button
|
<button mat-icon-button
|
||||||
class="adf-search-filter-title-action"
|
class="adf-search-filter-title-action"
|
||||||
aria-hidden="false"
|
aria-hidden="false"
|
||||||
|
[attr.aria-label]="'SEARCH.FILTER.BUTTONS.CLOSE' | translate"
|
||||||
(click)="onClose()"
|
(click)="onClose()"
|
||||||
[title]="'SEARCH.FILTER.BUTTONS.CLOSE' | translate">
|
[matTooltip]="'SEARCH.FILTER.BUTTONS.CLOSE' | translate">
|
||||||
<mat-icon>
|
<mat-icon>
|
||||||
close
|
close
|
||||||
</mat-icon>
|
</mat-icon>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
(keyup.enter)="$event.stopPropagation()"
|
(keyup.enter)="$event.stopPropagation()"
|
||||||
class="adf-filter-button"
|
class="adf-filter-button"
|
||||||
[attr.aria-label]="getTooltipTranslation(col?.title)"
|
[attr.aria-label]="getTooltipTranslation(col?.title)"
|
||||||
[title]="getTooltipTranslation(col?.title)"
|
[matTooltip]="getTooltipTranslation(col?.title)"
|
||||||
>
|
>
|
||||||
<adf-icon
|
<adf-icon
|
||||||
value="filter_list"
|
value="filter_list"
|
||||||
|
@ -3,7 +3,8 @@
|
|||||||
<button *ngIf="displayResetButton && facetFiltersService.responseFacets"
|
<button *ngIf="displayResetButton && facetFiltersService.responseFacets"
|
||||||
mat-button
|
mat-button
|
||||||
color="primary"
|
color="primary"
|
||||||
title="{{ 'SEARCH.FILTER.BUTTONS.RESET-ALL.TOOLTIP' | translate }}"
|
matTooltip="{{ 'SEARCH.FILTER.BUTTONS.RESET-ALL.TOOLTIP' | translate }}"
|
||||||
|
matTooltipPosition="right"
|
||||||
adf-reset-search>
|
adf-reset-search>
|
||||||
{{ 'SEARCH.FILTER.BUTTONS.RESET-ALL.LABEL' | translate }}
|
{{ 'SEARCH.FILTER.BUTTONS.RESET-ALL.LABEL' | translate }}
|
||||||
</button>
|
</button>
|
||||||
@ -16,7 +17,7 @@
|
|||||||
{{ category.name | translate }}
|
{{ category.name | translate }}
|
||||||
</mat-panel-title>
|
</mat-panel-title>
|
||||||
</mat-expansion-panel-header>
|
</mat-expansion-panel-header>
|
||||||
<adf-search-filter-card
|
<adf-search-filter-card
|
||||||
[category]="category">
|
[category]="category">
|
||||||
</adf-search-filter-card>
|
</adf-search-filter-card>
|
||||||
</mat-expansion-panel>
|
</mat-expansion-panel>
|
||||||
|
@ -6,7 +6,10 @@
|
|||||||
*ngFor="let option of options"
|
*ngFor="let option of options"
|
||||||
[value]="option.value"
|
[value]="option.value"
|
||||||
class="adf-facet-filter">
|
class="adf-facet-filter">
|
||||||
<div title="{{ option.name | translate }}" class="adf-filter-label">
|
<div
|
||||||
|
matTooltip="{{ option.name | translate }}"
|
||||||
|
matTooltipPosition="right"
|
||||||
|
class="adf-filter-label">
|
||||||
{{ option.name | translate }}
|
{{ option.name | translate }}
|
||||||
</div>
|
</div>
|
||||||
</mat-radio-button>
|
</mat-radio-button>
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
mat-icon-button
|
mat-icon-button
|
||||||
(click)="toggleCompact()"
|
(click)="toggleCompact()"
|
||||||
color="primary"
|
color="primary"
|
||||||
[title]="'CORE.BREADCRUMBS.SHOWALL' | translate"
|
[matTooltip]="'CORE.BREADCRUMBS.SHOWALL' | translate"
|
||||||
|
matTooltipClass="adf-tooltip"
|
||||||
[attr.aria-label]="'CORE.BREADCRUMBS.SHOWALL' | translate"
|
[attr.aria-label]="'CORE.BREADCRUMBS.SHOWALL' | translate"
|
||||||
>
|
>
|
||||||
<mat-icon class="adf-breadcrumb__show-all-button-icon--rotate">more_vert</mat-icon >
|
<mat-icon class="adf-breadcrumb__show-all-button-icon--rotate">more_vert</mat-icon >
|
||||||
|
@ -15,24 +15,11 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {
|
import { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, EventEmitter, Input, OnChanges, Output, QueryList, SimpleChanges, TemplateRef, ViewChildren } from '@angular/core';
|
||||||
AfterContentInit,
|
|
||||||
ChangeDetectionStrategy,
|
|
||||||
ChangeDetectorRef,
|
|
||||||
Component,
|
|
||||||
ContentChildren,
|
|
||||||
EventEmitter,
|
|
||||||
Input,
|
|
||||||
OnChanges,
|
|
||||||
Output,
|
|
||||||
QueryList,
|
|
||||||
SimpleChanges,
|
|
||||||
TemplateRef,
|
|
||||||
ViewChildren
|
|
||||||
} from '@angular/core';
|
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
import { MatIconModule } from '@angular/material/icon';
|
import { MatIconModule } from '@angular/material/icon';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { map, startWith } from 'rxjs/operators';
|
import { map, startWith } from 'rxjs/operators';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
|
|
||||||
@ -45,7 +32,7 @@ import { BreadcrumbItemComponent } from '../breadcrumb-item/breadcrumb-item.comp
|
|||||||
templateUrl: './breadcrumb.component.html',
|
templateUrl: './breadcrumb.component.html',
|
||||||
styleUrls: ['./breadcrumb.component.scss'],
|
styleUrls: ['./breadcrumb.component.scss'],
|
||||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
imports: [CommonModule, MatIconModule, TranslateModule, MatButtonModule, BreadcrumbFocusDirective]
|
imports: [ CommonModule, MatIconModule, TranslateModule, MatButtonModule, MatTooltipModule ]
|
||||||
})
|
})
|
||||||
export class BreadcrumbComponent implements AfterContentInit, OnChanges {
|
export class BreadcrumbComponent implements AfterContentInit, OnChanges {
|
||||||
private _breadcrumbTemplateRefs: Array<TemplateRef<unknown>> = [];
|
private _breadcrumbTemplateRefs: Array<TemplateRef<unknown>> = [];
|
||||||
@ -70,7 +57,9 @@ export class BreadcrumbComponent implements AfterContentInit, OnChanges {
|
|||||||
this.breadcrumbItems.changes
|
this.breadcrumbItems.changes
|
||||||
.pipe(
|
.pipe(
|
||||||
startWith(this.breadcrumbItems),
|
startWith(this.breadcrumbItems),
|
||||||
map((breadcrumbItems: QueryList<BreadcrumbItemComponent>) => this.mapToTemplateRefs(breadcrumbItems))
|
map((breadcrumbItems: QueryList<BreadcrumbItemComponent>) =>
|
||||||
|
this.mapToTemplateRefs(breadcrumbItems)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
.subscribe((templateRefs) => {
|
.subscribe((templateRefs) => {
|
||||||
this._breadcrumbTemplateRefs = templateRefs;
|
this._breadcrumbTemplateRefs = templateRefs;
|
||||||
@ -94,11 +83,16 @@ export class BreadcrumbComponent implements AfterContentInit, OnChanges {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private setBreadcrumbs(breadcrumbs: Array<TemplateRef<unknown>>) {
|
private setBreadcrumbs(breadcrumbs: Array<TemplateRef<unknown>>) {
|
||||||
this.selectedBreadcrumbs = this.compact && breadcrumbs.length > 2 ? [breadcrumbs[0], breadcrumbs[breadcrumbs.length - 1]] : [...breadcrumbs];
|
this.selectedBreadcrumbs =
|
||||||
|
this.compact && breadcrumbs.length > 2
|
||||||
|
? [breadcrumbs[0], breadcrumbs[breadcrumbs.length - 1]]
|
||||||
|
: [...breadcrumbs];
|
||||||
this.cdr.detectChanges();
|
this.cdr.detectChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
private mapToTemplateRefs(breadcrumbItems: QueryList<BreadcrumbItemComponent>) {
|
private mapToTemplateRefs( breadcrumbItems: QueryList<BreadcrumbItemComponent> ) {
|
||||||
return breadcrumbItems.toArray().map((breadcrumbItem) => breadcrumbItem.templateRef);
|
return breadcrumbItems
|
||||||
|
.toArray()
|
||||||
|
.map((breadcrumbItem) => breadcrumbItem.templateRef);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
<ng-container matColumnDef="value">
|
<ng-container matColumnDef="value">
|
||||||
<th mat-header-cell class="adf-val-col header-cell" *matHeaderCellDef>
|
<th mat-header-cell class="adf-val-col header-cell" *matHeaderCellDef>
|
||||||
<div class="adf-input-field-buttons-container">
|
<div class="adf-input-field-buttons-container">
|
||||||
<button *ngIf="showPlusButton$ | async" mat-icon-button title="{{'CORE.FEATURE-FLAGS.ADD_NEW' | translate}}" color="accent" (click)="onAddButtonClick()">
|
<button *ngIf="showPlusButton$ | async" mat-icon-button matTooltip="{{'CORE.FEATURE-FLAGS.ADD_NEW' | translate}}" color="accent" (click)="onAddButtonClick()">
|
||||||
<mat-icon class="material-icons-outlined" fontIcon="add_circle"></mat-icon>
|
<mat-icon class="material-icons-outlined" fontIcon="add_circle"></mat-icon>
|
||||||
</button>
|
</button>
|
||||||
<button *ngIf="inputValue" matSuffix mat-icon-button aria-label="Clear" (click)="onClearInput()" class="adf-clear-button">
|
<button *ngIf="inputValue" matSuffix mat-icon-button aria-label="Clear" (click)="onClearInput()" class="adf-clear-button">
|
||||||
|
@ -34,6 +34,7 @@ import { MatIconModule } from '@angular/material/icon';
|
|||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
import { MatInputModule } from '@angular/material/input';
|
import { MatInputModule } from '@angular/material/input';
|
||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { FlagsOverrideComponent } from '../feature-override-indicator.component';
|
import { FlagsOverrideComponent } from '../feature-override-indicator.component';
|
||||||
import { MatDialogModule } from '@angular/material/dialog';
|
import { MatDialogModule } from '@angular/material/dialog';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
@ -51,6 +52,7 @@ import { TranslateModule } from '@ngx-translate/core';
|
|||||||
MatIconModule,
|
MatIconModule,
|
||||||
MatButtonModule,
|
MatButtonModule,
|
||||||
MatInputModule,
|
MatInputModule,
|
||||||
|
MatTooltipModule,
|
||||||
MatDialogModule,
|
MatDialogModule,
|
||||||
TranslateModule
|
TranslateModule
|
||||||
],
|
],
|
||||||
|
@ -30,6 +30,7 @@ import { MatMenuModule } from '@angular/material/menu';
|
|||||||
import { MatSelectModule } from '@angular/material/select';
|
import { MatSelectModule } from '@angular/material/select';
|
||||||
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
||||||
import { MatTableModule } from '@angular/material/table';
|
import { MatTableModule } from '@angular/material/table';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { MatDatetimepickerModule, MatNativeDatetimeModule } from '@mat-datetimepicker/core';
|
import { MatDatetimepickerModule, MatNativeDatetimeModule } from '@mat-datetimepicker/core';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
|
|
||||||
@ -63,7 +64,8 @@ import { SelectFilterInputComponent } from './components/card-view-selectitem/se
|
|||||||
MatCardModule,
|
MatCardModule,
|
||||||
MatDatetimepickerModule,
|
MatDatetimepickerModule,
|
||||||
MatNativeDatetimeModule,
|
MatNativeDatetimeModule,
|
||||||
MatSlideToggleModule
|
MatSlideToggleModule,
|
||||||
|
MatTooltipModule
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
CardViewComponent,
|
CardViewComponent,
|
||||||
|
@ -13,7 +13,8 @@
|
|||||||
*ngIf="showProperty"
|
*ngIf="showProperty"
|
||||||
[attr.data-automation-id]="'card-dateitem-' + property.key"
|
[attr.data-automation-id]="'card-dateitem-' + property.key"
|
||||||
(dblclick)="copyToClipboard(property.displayValue)"
|
(dblclick)="copyToClipboard(property.displayValue)"
|
||||||
[title]="'CORE.METADATA.ACTIONS.COPY_TO_CLIPBOARD' | translate"
|
matTooltipShowDelay="1000"
|
||||||
|
[matTooltip]="'CORE.METADATA.ACTIONS.COPY_TO_CLIPBOARD' | translate"
|
||||||
>{{ property.displayValue }}</span
|
>{{ property.displayValue }}</span
|
||||||
>
|
>
|
||||||
</span>
|
</span>
|
||||||
|
@ -34,7 +34,9 @@
|
|||||||
[attr.aria-label]="property.label | translate"
|
[attr.aria-label]="property.label | translate"
|
||||||
[formControl]="textInput"
|
[formControl]="textInput"
|
||||||
(dblclick)="copyToClipboard(property.displayValue)"
|
(dblclick)="copyToClipboard(property.displayValue)"
|
||||||
[title]="'CORE.METADATA.ACTIONS.COPY_TO_CLIPBOARD' | translate"
|
matTooltipShowDelay="1000"
|
||||||
|
[matTooltip]="'CORE.METADATA.ACTIONS.COPY_TO_CLIPBOARD' | translate"
|
||||||
|
[matTooltipDisabled]="isEditable"
|
||||||
[attr.data-automation-id]="'card-textitem-value-' + property.key"
|
[attr.data-automation-id]="'card-textitem-value-' + property.key"
|
||||||
(keydown)="undoText($event)"
|
(keydown)="undoText($event)"
|
||||||
/>
|
/>
|
||||||
@ -43,6 +45,7 @@
|
|||||||
*ngIf="property.multiline"
|
*ngIf="property.multiline"
|
||||||
title="{{ property.label | translate }}"
|
title="{{ property.label | translate }}"
|
||||||
[cdkTextareaAutosize]="true"
|
[cdkTextareaAutosize]="true"
|
||||||
|
[cdkAutosizeMaxRows]="1"
|
||||||
[cdkAutosizeMaxRows]="5"
|
[cdkAutosizeMaxRows]="5"
|
||||||
class="adf-property-value"
|
class="adf-property-value"
|
||||||
[ngClass]="{
|
[ngClass]="{
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
[attr.data-automation-id]="'context-' + (link.title || link.model?.title | translate)"
|
[attr.data-automation-id]="'context-' + (link.title || link.model?.title | translate)"
|
||||||
mat-menu-item
|
mat-menu-item
|
||||||
[disabled]="link.model?.disabled"
|
[disabled]="link.model?.disabled"
|
||||||
[title]="link.model?.tooltip | translate"
|
[matTooltip]="link.model?.tooltip | translate"
|
||||||
(click)="onMenuItemClick($event, link)">
|
(click)="onMenuItemClick($event, link)">
|
||||||
<mat-icon *ngIf="link.model?.icon">{{ link.model.icon }}</mat-icon>
|
<mat-icon *ngIf="link.model?.icon">{{ link.model.icon }}</mat-icon>
|
||||||
<span>{{ link.title || link.model?.title | translate }}</span>
|
<span>{{ link.title || link.model?.title | translate }}</span>
|
||||||
|
@ -26,6 +26,7 @@ import { TranslateModule } from '@ngx-translate/core';
|
|||||||
import { contextMenuAnimation } from './animations';
|
import { contextMenuAnimation } from './animations';
|
||||||
import { ContextMenuOverlayRef } from './context-menu-overlay';
|
import { ContextMenuOverlayRef } from './context-menu-overlay';
|
||||||
import { CONTEXT_MENU_DATA } from './context-menu.tokens';
|
import { CONTEXT_MENU_DATA } from './context-menu.tokens';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'adf-context-menu',
|
selector: 'adf-context-menu',
|
||||||
@ -36,7 +37,7 @@ import { CONTEXT_MENU_DATA } from './context-menu.tokens';
|
|||||||
class: 'adf-context-menu'
|
class: 'adf-context-menu'
|
||||||
},
|
},
|
||||||
encapsulation: ViewEncapsulation.None,
|
encapsulation: ViewEncapsulation.None,
|
||||||
imports: [MatIconModule, MatMenuModule, NgForOf, NgIf, TranslateModule],
|
imports: [MatIconModule, MatMenuModule, MatTooltipModule, NgForOf, NgIf, TranslateModule],
|
||||||
animations: [trigger('panelAnimation', contextMenuAnimation)]
|
animations: [trigger('panelAnimation', contextMenuAnimation)]
|
||||||
})
|
})
|
||||||
export class ContextMenuListComponent implements AfterViewInit {
|
export class ContextMenuListComponent implements AfterViewInit {
|
||||||
|
@ -21,6 +21,7 @@ import { ContextMenuModule } from './context-menu.module';
|
|||||||
import { CoreTestingModule } from '../testing/core.testing.module';
|
import { CoreTestingModule } from '../testing/core.testing.module';
|
||||||
import { HarnessLoader } from '@angular/cdk/testing';
|
import { HarnessLoader } from '@angular/cdk/testing';
|
||||||
import { MatIconHarness } from '@angular/material/icon/testing';
|
import { MatIconHarness } from '@angular/material/icon/testing';
|
||||||
|
import { MatTooltipHarness } from '@angular/material/tooltip/testing';
|
||||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@ -196,5 +197,27 @@ describe('ContextMenuDirective', () => {
|
|||||||
).length
|
).length
|
||||||
).toBe(0);
|
).toBe(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should show tooltip if is set', async () => {
|
||||||
|
const expectedTooltipText = 'Action 5 tooltip';
|
||||||
|
const tooltip = await loader.getHarness(
|
||||||
|
MatTooltipHarness.with({
|
||||||
|
selector: '[data-automation-id="context-action-5"]'
|
||||||
|
})
|
||||||
|
);
|
||||||
|
await tooltip.show();
|
||||||
|
expect(await tooltip.isOpen()).toBeTrue();
|
||||||
|
expect(await tooltip.getTooltipText()).toEqual(expectedTooltipText);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not show tooltip if is not set', async () => {
|
||||||
|
const tooltip = await loader.getHarness(
|
||||||
|
MatTooltipHarness.with({
|
||||||
|
selector: '[data-automation-id="context-action-6"]'
|
||||||
|
})
|
||||||
|
);
|
||||||
|
await tooltip.show();
|
||||||
|
expect(await tooltip.isOpen()).toBeFalse();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -68,7 +68,7 @@
|
|||||||
!isResizing && col.sortable}"
|
!isResizing && col.sortable}"
|
||||||
>
|
>
|
||||||
<ng-container *ngIf="!col.header">
|
<ng-container *ngIf="!col.header">
|
||||||
<span *ngIf="col.title" title="{{col.title | translate}}" class="adf-datatable-cell-value">{{col.title | translate}}</span>
|
<span *ngIf="col.title" matTooltip="{{col.title | translate}}" class="adf-datatable-cell-value">{{col.title | translate}}</span>
|
||||||
|
|
||||||
<span *ngIf="col.title && col.sortable && isDraggingHeaderColumn" class="adf-sr-only" aria-live="polite">
|
<span *ngIf="col.title && col.sortable && isDraggingHeaderColumn" class="adf-sr-only" aria-live="polite">
|
||||||
{{ getSortLiveAnnouncement(col) | translate: { string: col.title | translate } }}
|
{{ getSortLiveAnnouncement(col) | translate: { string: col.title | translate } }}
|
||||||
@ -124,7 +124,7 @@
|
|||||||
<ng-container *ngIf="mainActionTemplate">
|
<ng-container *ngIf="mainActionTemplate">
|
||||||
<button
|
<button
|
||||||
data-automation-id="adf-datatable-main-menu-button"
|
data-automation-id="adf-datatable-main-menu-button"
|
||||||
title="{{ 'ADF-DATATABLE.CONTENT-ACTIONS.SELECT_COLUMNS' | translate }}"
|
matTooltip="{{ 'ADF-DATATABLE.CONTENT-ACTIONS.SELECT_COLUMNS' | translate }}"
|
||||||
mat-icon-button
|
mat-icon-button
|
||||||
#mainMenuTrigger="matMenuTrigger"
|
#mainMenuTrigger="matMenuTrigger"
|
||||||
(keydown.enter)="mainMenuTrigger.openMenu()"
|
(keydown.enter)="mainMenuTrigger.openMenu()"
|
||||||
|
@ -32,7 +32,7 @@ export class DecimalRenderMiddlewareService implements FormFieldModelRenderMiddl
|
|||||||
return field;
|
return field;
|
||||||
}
|
}
|
||||||
|
|
||||||
private forceMaxPrecisionIfNeeded(value: string | number, allowedMaxPrecision: number): string | number {
|
private forceMaxPrecisionIfNeeded(value: string | number, allowedMaxPrecision): string | number {
|
||||||
let numberOfDecimalDigits = 0;
|
let numberOfDecimalDigits = 0;
|
||||||
const stringValue = typeof value === 'string' ? value : `${value}`;
|
const stringValue = typeof value === 'string' ? value : `${value}`;
|
||||||
const numberChunks = stringValue.split('.');
|
const numberChunks = stringValue.split('.');
|
||||||
@ -42,9 +42,12 @@ export class DecimalRenderMiddlewareService implements FormFieldModelRenderMiddl
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (numberOfDecimalDigits > allowedMaxPrecision) {
|
if (numberOfDecimalDigits > allowedMaxPrecision) {
|
||||||
return parseFloat(value.toString()).toFixed(allowedMaxPrecision);
|
const valueWithCorrectPrecision = parseFloat(value.toString())
|
||||||
|
.toFixed(allowedMaxPrecision);
|
||||||
|
|
||||||
|
return valueWithCorrectPrecision;
|
||||||
}
|
}
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
@ -12,7 +12,9 @@
|
|||||||
<mat-form-field class="adf-amount-widget__input" [hideRequiredMarker]="true">
|
<mat-form-field class="adf-amount-widget__input" [hideRequiredMarker]="true">
|
||||||
<span matPrefix class="adf-amount-widget__prefix-spacing">{{ currency }} </span>
|
<span matPrefix class="adf-amount-widget__prefix-spacing">{{ currency }} </span>
|
||||||
<input matInput
|
<input matInput
|
||||||
[title]="field.tooltip"
|
[matTooltip]="field.tooltip"
|
||||||
|
matTooltipPosition="above"
|
||||||
|
[matTooltipShowDelay]="1000"
|
||||||
class="adf-input"
|
class="adf-input"
|
||||||
type="text"
|
type="text"
|
||||||
[id]="field.id"
|
[id]="field.id"
|
||||||
|
@ -20,6 +20,7 @@ import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
|||||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
import { MatFormFieldHarness } from '@angular/material/form-field/testing';
|
import { MatFormFieldHarness } from '@angular/material/form-field/testing';
|
||||||
import { MatInputHarness } from '@angular/material/input/testing';
|
import { MatInputHarness } from '@angular/material/input/testing';
|
||||||
|
import { MatTooltipHarness } from '@angular/material/tooltip/testing';
|
||||||
import { CoreTestingModule } from '../../../../testing';
|
import { CoreTestingModule } from '../../../../testing';
|
||||||
import { FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
import { FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
||||||
import { ADF_AMOUNT_SETTINGS, AmountWidgetComponent } from './amount.widget';
|
import { ADF_AMOUNT_SETTINGS, AmountWidgetComponent } from './amount.widget';
|
||||||
@ -89,8 +90,17 @@ describe('AmountWidgetComponent', () => {
|
|||||||
const input = await loader.getHarness(MatInputHarness);
|
const input = await loader.getHarness(MatInputHarness);
|
||||||
await (await input.host()).hover();
|
await (await input.host()).hover();
|
||||||
|
|
||||||
const tooltip = await (await input.host()).getAttribute('title');
|
const tooltip = await loader.getHarness(MatTooltipHarness);
|
||||||
expect(tooltip).toBe('my custom tooltip');
|
expect(await tooltip.getTooltipText()).toBe('my custom tooltip');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should hide tooltip', async () => {
|
||||||
|
const input = await loader.getHarness(MatInputHarness);
|
||||||
|
await (await input.host()).hover();
|
||||||
|
await (await input.host()).mouseAway();
|
||||||
|
|
||||||
|
const tooltip = await loader.getHarness(MatTooltipHarness);
|
||||||
|
expect(await tooltip.isOpen()).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ import { Component, OnInit, ViewEncapsulation, InjectionToken, Inject, Optional
|
|||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||||
import { MatInputModule } from '@angular/material/input';
|
import { MatInputModule } from '@angular/material/input';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { FormService } from '../../../services/form.service';
|
import { FormService } from '../../../services/form.service';
|
||||||
import { ErrorWidgetComponent } from '../error/error.component';
|
import { ErrorWidgetComponent } from '../error/error.component';
|
||||||
@ -49,7 +50,7 @@ export const ADF_AMOUNT_SETTINGS = new InjectionToken<AmountWidgetSettings>('adf
|
|||||||
'(invalid)': 'event($event)',
|
'(invalid)': 'event($event)',
|
||||||
'(select)': 'event($event)'
|
'(select)': 'event($event)'
|
||||||
},
|
},
|
||||||
imports: [MatFormFieldModule, MatInputModule, FormsModule, ErrorWidgetComponent, TranslateModule, NgIf],
|
imports: [MatFormFieldModule, MatTooltipModule, MatInputModule, FormsModule, ErrorWidgetComponent, TranslateModule, NgIf],
|
||||||
encapsulation: ViewEncapsulation.None
|
encapsulation: ViewEncapsulation.None
|
||||||
})
|
})
|
||||||
export class AmountWidgetComponent extends WidgetComponent implements OnInit {
|
export class AmountWidgetComponent extends WidgetComponent implements OnInit {
|
||||||
|
@ -6,8 +6,10 @@
|
|||||||
[disabled]="field.readOnly || readOnly"
|
[disabled]="field.readOnly || readOnly"
|
||||||
[(ngModel)]="field.value"
|
[(ngModel)]="field.value"
|
||||||
(ngModelChange)="onFieldChanged(field)"
|
(ngModelChange)="onFieldChanged(field)"
|
||||||
[title]="field.tooltip"
|
[matTooltip]="field.tooltip"
|
||||||
(click)="markAsTouched()">
|
(click)="markAsTouched()"
|
||||||
|
matTooltipPosition="right"
|
||||||
|
[matTooltipShowDelay]="1000">
|
||||||
{{ field.name | translate }}
|
{{ field.name | translate }}
|
||||||
<span class="adf-asterisk" *ngIf="isRequired()">*</span>
|
<span class="adf-asterisk" *ngIf="isRequired()">*</span>
|
||||||
</mat-checkbox>
|
</mat-checkbox>
|
||||||
|
@ -20,6 +20,8 @@ import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
|||||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||||
import { MatCheckboxHarness } from '@angular/material/checkbox/testing';
|
import { MatCheckboxHarness } from '@angular/material/checkbox/testing';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
|
import { MatTooltipHarness } from '@angular/material/tooltip/testing';
|
||||||
import { TranslateLoader } from '@ngx-translate/core';
|
import { TranslateLoader } from '@ngx-translate/core';
|
||||||
import { CoreTestingModule } from '../../../../testing';
|
import { CoreTestingModule } from '../../../../testing';
|
||||||
import { TranslateLoaderService } from '../../../../translation';
|
import { TranslateLoaderService } from '../../../../translation';
|
||||||
@ -34,7 +36,7 @@ describe('CheckboxWidgetComponent', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [CoreTestingModule, MatCheckboxModule],
|
imports: [CoreTestingModule, MatCheckboxModule, MatTooltipModule],
|
||||||
providers: [{ provide: TranslateLoader, useClass: TranslateLoaderService }]
|
providers: [{ provide: TranslateLoader, useClass: TranslateLoaderService }]
|
||||||
});
|
});
|
||||||
fixture = TestBed.createComponent(CheckboxWidgetComponent);
|
fixture = TestBed.createComponent(CheckboxWidgetComponent);
|
||||||
@ -108,8 +110,17 @@ describe('CheckboxWidgetComponent', () => {
|
|||||||
const checkbox = await loader.getHarness(MatCheckboxHarness);
|
const checkbox = await loader.getHarness(MatCheckboxHarness);
|
||||||
await (await checkbox.host()).hover();
|
await (await checkbox.host()).hover();
|
||||||
|
|
||||||
const tooltip = await (await checkbox.host()).getAttribute('title');
|
const tooltip = await loader.getHarness(MatTooltipHarness);
|
||||||
expect(tooltip).toBe('my custom tooltip');
|
expect(await tooltip.getTooltipText()).toBe('my custom tooltip');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should hide tooltip', async () => {
|
||||||
|
const checkbox = await loader.getHarness(MatCheckboxHarness);
|
||||||
|
await (await checkbox.host()).hover();
|
||||||
|
await (await checkbox.host()).mouseAway();
|
||||||
|
|
||||||
|
const tooltip = await loader.getHarness(MatTooltipHarness);
|
||||||
|
expect(await tooltip.isOpen()).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -21,6 +21,7 @@ import { NgClass, NgIf } from '@angular/common';
|
|||||||
import { Component, ViewEncapsulation } from '@angular/core';
|
import { Component, ViewEncapsulation } from '@angular/core';
|
||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { FormService } from '../../../services/form.service';
|
import { FormService } from '../../../services/form.service';
|
||||||
import { ErrorWidgetComponent } from '../error/error.component';
|
import { ErrorWidgetComponent } from '../error/error.component';
|
||||||
@ -41,7 +42,7 @@ import { WidgetComponent } from '../widget.component';
|
|||||||
'(invalid)': 'event($event)',
|
'(invalid)': 'event($event)',
|
||||||
'(select)': 'event($event)'
|
'(select)': 'event($event)'
|
||||||
},
|
},
|
||||||
imports: [NgClass, MatCheckboxModule, FormsModule, TranslateModule, ErrorWidgetComponent, NgIf],
|
imports: [NgClass, MatCheckboxModule, FormsModule, TranslateModule, MatTooltipModule, ErrorWidgetComponent, NgIf],
|
||||||
encapsulation: ViewEncapsulation.None
|
encapsulation: ViewEncapsulation.None
|
||||||
})
|
})
|
||||||
export class CheckboxWidgetComponent extends WidgetComponent {
|
export class CheckboxWidgetComponent extends WidgetComponent {
|
||||||
|
@ -24,8 +24,10 @@
|
|||||||
(dateChange)="onDateChanged($event)"
|
(dateChange)="onDateChanged($event)"
|
||||||
(keydown.enter)="datetimePicker.open()"
|
(keydown.enter)="datetimePicker.open()"
|
||||||
[placeholder]="field.placeholder"
|
[placeholder]="field.placeholder"
|
||||||
[title]="field.tooltip"
|
[matTooltip]="field.tooltip"
|
||||||
(blur)="markAsTouched()"
|
(blur)="markAsTouched()"
|
||||||
|
matTooltipPosition="above"
|
||||||
|
[matTooltipShowDelay]="1000"
|
||||||
[min]="minDate"
|
[min]="minDate"
|
||||||
[max]="maxDate">
|
[max]="maxDate">
|
||||||
<mat-datetimepicker-toggle matSuffix [for]="datetimePicker"
|
<mat-datetimepicker-toggle matSuffix [for]="datetimePicker"
|
||||||
|
@ -19,6 +19,8 @@ import { HarnessLoader } from '@angular/cdk/testing';
|
|||||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
import { MatInputHarness } from '@angular/material/input/testing';
|
import { MatInputHarness } from '@angular/material/input/testing';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
|
import { MatTooltipHarness } from '@angular/material/tooltip/testing';
|
||||||
import { CoreTestingModule } from '../../../../testing';
|
import { CoreTestingModule } from '../../../../testing';
|
||||||
import { DateFieldValidator, DateTimeFieldValidator, FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
import { DateFieldValidator, DateTimeFieldValidator, FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
||||||
import { DateTimeWidgetComponent } from './date-time.widget';
|
import { DateTimeWidgetComponent } from './date-time.widget';
|
||||||
@ -32,7 +34,7 @@ describe('DateTimeWidgetComponent', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [CoreTestingModule]
|
imports: [CoreTestingModule, MatTooltipModule]
|
||||||
});
|
});
|
||||||
fixture = TestBed.createComponent(DateTimeWidgetComponent);
|
fixture = TestBed.createComponent(DateTimeWidgetComponent);
|
||||||
|
|
||||||
@ -244,8 +246,17 @@ describe('DateTimeWidgetComponent', () => {
|
|||||||
const input = await loader.getHarness(MatInputHarness);
|
const input = await loader.getHarness(MatInputHarness);
|
||||||
await (await input.host()).hover();
|
await (await input.host()).hover();
|
||||||
|
|
||||||
const tooltip = await (await input.host()).getAttribute('title');
|
const tooltip = await loader.getHarness(MatTooltipHarness);
|
||||||
expect(tooltip).toBe('my custom tooltip');
|
expect(await tooltip.getTooltipText()).toBe('my custom tooltip');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should hide tooltip', async () => {
|
||||||
|
const input = await loader.getHarness(MatInputHarness);
|
||||||
|
await (await input.host()).hover();
|
||||||
|
await (await input.host()).mouseAway();
|
||||||
|
|
||||||
|
const tooltip = await loader.getHarness(MatTooltipHarness);
|
||||||
|
expect(await tooltip.isOpen()).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ import { FormsModule } from '@angular/forms';
|
|||||||
import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
|
import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
|
||||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||||
import { MatInputModule } from '@angular/material/input';
|
import { MatInputModule } from '@angular/material/input';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { DatetimeAdapter, MAT_DATETIME_FORMATS, MatDatetimepickerInputEvent, MatDatetimepickerModule } from '@mat-datetimepicker/core';
|
import { DatetimeAdapter, MAT_DATETIME_FORMATS, MatDatetimepickerInputEvent, MatDatetimepickerModule } from '@mat-datetimepicker/core';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { isValid } from 'date-fns';
|
import { isValid } from 'date-fns';
|
||||||
@ -42,7 +43,16 @@ import { WidgetComponent } from '../widget.component';
|
|||||||
],
|
],
|
||||||
templateUrl: './date-time.widget.html',
|
templateUrl: './date-time.widget.html',
|
||||||
styleUrls: ['./date-time.widget.scss'],
|
styleUrls: ['./date-time.widget.scss'],
|
||||||
imports: [NgIf, TranslateModule, MatFormFieldModule, MatInputModule, MatDatetimepickerModule, FormsModule, ErrorWidgetComponent],
|
imports: [
|
||||||
|
NgIf,
|
||||||
|
TranslateModule,
|
||||||
|
MatFormFieldModule,
|
||||||
|
MatInputModule,
|
||||||
|
MatDatetimepickerModule,
|
||||||
|
FormsModule,
|
||||||
|
MatTooltipModule,
|
||||||
|
ErrorWidgetComponent
|
||||||
|
],
|
||||||
encapsulation: ViewEncapsulation.None
|
encapsulation: ViewEncapsulation.None
|
||||||
})
|
})
|
||||||
export class DateTimeWidgetComponent extends WidgetComponent implements OnInit {
|
export class DateTimeWidgetComponent extends WidgetComponent implements OnInit {
|
||||||
|
@ -24,8 +24,10 @@
|
|||||||
(ngModelChange)="onFieldChanged(field)"
|
(ngModelChange)="onFieldChanged(field)"
|
||||||
[disabled]="field.readOnly"
|
[disabled]="field.readOnly"
|
||||||
[placeholder]="field.placeholder"
|
[placeholder]="field.placeholder"
|
||||||
[title]="field.tooltip"
|
[matTooltip]="field.tooltip"
|
||||||
(blur)="markAsTouched()" />
|
(blur)="markAsTouched()"
|
||||||
|
matTooltipPosition="above"
|
||||||
|
[matTooltipShowDelay]="1000" />
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
|
|
||||||
<error-widget [error]="field.validationSummary"></error-widget>
|
<error-widget [error]="field.validationSummary"></error-widget>
|
||||||
|
@ -20,6 +20,7 @@ import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
|||||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
import { MatInputModule } from '@angular/material/input';
|
import { MatInputModule } from '@angular/material/input';
|
||||||
import { MatInputHarness } from '@angular/material/input/testing';
|
import { MatInputHarness } from '@angular/material/input/testing';
|
||||||
|
import { MatTooltipHarness } from '@angular/material/tooltip/testing';
|
||||||
import { CoreTestingModule } from '../../../../testing';
|
import { CoreTestingModule } from '../../../../testing';
|
||||||
import { FormService } from '../../../services/form.service';
|
import { FormService } from '../../../services/form.service';
|
||||||
import { FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
import { FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
||||||
@ -57,8 +58,17 @@ describe('DecimalComponent', () => {
|
|||||||
const input = await loader.getHarness(MatInputHarness);
|
const input = await loader.getHarness(MatInputHarness);
|
||||||
await (await input.host()).hover();
|
await (await input.host()).hover();
|
||||||
|
|
||||||
const tooltip = await (await input.host()).getAttribute('title');
|
const tooltip = await loader.getHarness(MatTooltipHarness);
|
||||||
expect(tooltip).toBe('my custom tooltip');
|
expect(await tooltip.getTooltipText()).toBe('my custom tooltip');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should hide tooltip', async () => {
|
||||||
|
const input = await loader.getHarness(MatInputHarness);
|
||||||
|
await (await input.host()).hover();
|
||||||
|
await (await input.host()).mouseAway();
|
||||||
|
|
||||||
|
const tooltip = await loader.getHarness(MatTooltipHarness);
|
||||||
|
expect(await tooltip.isOpen()).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ import { Component, ViewEncapsulation } from '@angular/core';
|
|||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||||
import { MatInputModule } from '@angular/material/input';
|
import { MatInputModule } from '@angular/material/input';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { FormService } from '../../../services/form.service';
|
import { FormService } from '../../../services/form.service';
|
||||||
import { ErrorWidgetComponent } from '../error/error.component';
|
import { ErrorWidgetComponent } from '../error/error.component';
|
||||||
@ -41,7 +42,7 @@ import { WidgetComponent } from '../widget.component';
|
|||||||
'(invalid)': 'event($event)',
|
'(invalid)': 'event($event)',
|
||||||
'(select)': 'event($event)'
|
'(select)': 'event($event)'
|
||||||
},
|
},
|
||||||
imports: [NgIf, TranslateModule, MatFormFieldModule, MatInputModule, FormsModule, ErrorWidgetComponent],
|
imports: [NgIf, TranslateModule, MatFormFieldModule, MatInputModule, FormsModule, MatTooltipModule, ErrorWidgetComponent],
|
||||||
encapsulation: ViewEncapsulation.None
|
encapsulation: ViewEncapsulation.None
|
||||||
})
|
})
|
||||||
export class DecimalWidgetComponent extends WidgetComponent {
|
export class DecimalWidgetComponent extends WidgetComponent {
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
<div [title]="field.tooltip" class="adf-display-text-widget {{ field.className }}">
|
<div [matTooltip]="field.tooltip"
|
||||||
|
matTooltipPosition="above"
|
||||||
|
[matTooltipShowDelay]="1000"
|
||||||
|
class="adf-display-text-widget {{ field.className }}">
|
||||||
{{ field.value | translate }}
|
{{ field.value | translate }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
/* eslint-disable @angular-eslint/component-selector */
|
/* eslint-disable @angular-eslint/component-selector */
|
||||||
|
|
||||||
import { Component, ViewEncapsulation } from '@angular/core';
|
import { Component, ViewEncapsulation } from '@angular/core';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { FormService } from '../../../services/form.service';
|
import { FormService } from '../../../services/form.service';
|
||||||
import { WidgetComponent } from '../widget.component';
|
import { WidgetComponent } from '../widget.component';
|
||||||
@ -38,7 +39,7 @@ import { WidgetComponent } from '../widget.component';
|
|||||||
'(invalid)': 'event($event)',
|
'(invalid)': 'event($event)',
|
||||||
'(select)': 'event($event)'
|
'(select)': 'event($event)'
|
||||||
},
|
},
|
||||||
imports: [TranslateModule],
|
imports: [MatTooltipModule, TranslateModule],
|
||||||
encapsulation: ViewEncapsulation.None
|
encapsulation: ViewEncapsulation.None
|
||||||
})
|
})
|
||||||
export class DisplayTextWidgetComponent extends WidgetComponent {
|
export class DisplayTextWidgetComponent extends WidgetComponent {
|
||||||
|
@ -2,7 +2,9 @@
|
|||||||
<label class="adf-label" [attr.for]="field.id">
|
<label class="adf-label" [attr.for]="field.id">
|
||||||
{{ field.name | translate }}<span class="adf-asterisk" *ngIf="isRequired()">*</span>
|
{{ field.name | translate }}<span class="adf-asterisk" *ngIf="isRequired()">*</span>
|
||||||
</label>
|
</label>
|
||||||
<div [title]="field.tooltip">
|
<div [matTooltip]="field.tooltip"
|
||||||
|
matTooltipPosition="above"
|
||||||
|
[matTooltipShowDelay]="1000">
|
||||||
<a [href]="linkUrl" target="_blank" rel="nofollow">{{ linkText }}</a>
|
<a [href]="linkUrl" target="_blank" rel="nofollow">{{ linkText }}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { CoreTestingModule } from '../../../../testing';
|
import { CoreTestingModule } from '../../../../testing';
|
||||||
import { FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
import { FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
||||||
import { HyperlinkWidgetComponent } from './hyperlink.widget';
|
import { HyperlinkWidgetComponent } from './hyperlink.widget';
|
||||||
@ -27,7 +28,7 @@ describe('HyperlinkWidgetComponent', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [CoreTestingModule]
|
imports: [CoreTestingModule, MatTooltipModule]
|
||||||
});
|
});
|
||||||
fixture = TestBed.createComponent(HyperlinkWidgetComponent);
|
fixture = TestBed.createComponent(HyperlinkWidgetComponent);
|
||||||
widget = fixture.componentInstance;
|
widget = fixture.componentInstance;
|
||||||
@ -198,7 +199,7 @@ describe('HyperlinkWidgetComponent', () => {
|
|||||||
|
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
const checkbox = fixture.debugElement.nativeElement.querySelector('.adf-hyperlink-widget div');
|
const checkbox = fixture.debugElement.nativeElement.querySelector('.adf-hyperlink-widget div');
|
||||||
const tooltip = checkbox.getAttribute('title');
|
const tooltip = checkbox.getAttribute('ng-reflect-message');
|
||||||
|
|
||||||
expect(tooltip).toEqual(widget.field.tooltip);
|
expect(tooltip).toEqual(widget.field.tooltip);
|
||||||
});
|
});
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
import { NgIf } from '@angular/common';
|
import { NgIf } from '@angular/common';
|
||||||
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
|
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { FormService } from '../../../services/form.service';
|
import { FormService } from '../../../services/form.service';
|
||||||
import { FormFieldModel } from '../core';
|
import { FormFieldModel } from '../core';
|
||||||
@ -40,7 +41,7 @@ import { WidgetComponent } from '../widget.component';
|
|||||||
'(invalid)': 'event($event)',
|
'(invalid)': 'event($event)',
|
||||||
'(select)': 'event($event)'
|
'(select)': 'event($event)'
|
||||||
},
|
},
|
||||||
imports: [TranslateModule, NgIf],
|
imports: [TranslateModule, MatTooltipModule, NgIf],
|
||||||
encapsulation: ViewEncapsulation.None
|
encapsulation: ViewEncapsulation.None
|
||||||
})
|
})
|
||||||
export class HyperlinkWidgetComponent extends WidgetComponent implements OnInit {
|
export class HyperlinkWidgetComponent extends WidgetComponent implements OnInit {
|
||||||
|
@ -16,8 +16,10 @@
|
|||||||
(ngModelChange)="onFieldChanged(field)"
|
(ngModelChange)="onFieldChanged(field)"
|
||||||
[disabled]="field.readOnly || readOnly"
|
[disabled]="field.readOnly || readOnly"
|
||||||
[placeholder]="field.placeholder"
|
[placeholder]="field.placeholder"
|
||||||
[title]="field.tooltip"
|
[matTooltip]="field.tooltip"
|
||||||
(blur)="markAsTouched()">
|
(blur)="markAsTouched()"
|
||||||
|
matTooltipPosition="above"
|
||||||
|
[matTooltipShowDelay]="1000">
|
||||||
</textarea>
|
</textarea>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<div *ngIf="field.maxLength > 0" class="adf-multiline-word-counter">
|
<div *ngIf="field.maxLength > 0" class="adf-multiline-word-counter">
|
||||||
|
@ -19,6 +19,7 @@ import { HarnessLoader } from '@angular/cdk/testing';
|
|||||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
import { MatInputHarness } from '@angular/material/input/testing';
|
import { MatInputHarness } from '@angular/material/input/testing';
|
||||||
|
import { MatTooltipHarness } from '@angular/material/tooltip/testing';
|
||||||
import { CoreTestingModule } from '../../../../testing';
|
import { CoreTestingModule } from '../../../../testing';
|
||||||
import { FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
import { FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
||||||
import { MultilineTextWidgetComponentComponent } from './multiline-text.widget';
|
import { MultilineTextWidgetComponentComponent } from './multiline-text.widget';
|
||||||
@ -52,8 +53,17 @@ describe('MultilineTextWidgetComponentComponent', () => {
|
|||||||
const input = await loader.getHarness(MatInputHarness);
|
const input = await loader.getHarness(MatInputHarness);
|
||||||
await (await input.host()).hover();
|
await (await input.host()).hover();
|
||||||
|
|
||||||
const tooltip = await (await input.host()).getAttribute('title');
|
const tooltip = await loader.getHarness(MatTooltipHarness);
|
||||||
expect(tooltip).toBe('my custom tooltip');
|
expect(await tooltip.getTooltipText()).toBe('my custom tooltip');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should hide tooltip', async () => {
|
||||||
|
const input = await loader.getHarness(MatInputHarness);
|
||||||
|
await (await input.host()).hover();
|
||||||
|
await (await input.host()).mouseAway();
|
||||||
|
|
||||||
|
const tooltip = await loader.getHarness(MatTooltipHarness);
|
||||||
|
expect(await tooltip.isOpen()).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ import { Component, ViewEncapsulation } from '@angular/core';
|
|||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||||
import { MatInputModule } from '@angular/material/input';
|
import { MatInputModule } from '@angular/material/input';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { FormService } from '../../../services/form.service';
|
import { FormService } from '../../../services/form.service';
|
||||||
import { ErrorWidgetComponent } from '../error/error.component';
|
import { ErrorWidgetComponent } from '../error/error.component';
|
||||||
@ -43,7 +44,7 @@ import { WidgetComponent } from '../widget.component';
|
|||||||
'(invalid)': 'event($event)',
|
'(invalid)': 'event($event)',
|
||||||
'(select)': 'event($event)'
|
'(select)': 'event($event)'
|
||||||
},
|
},
|
||||||
imports: [MatFormFieldModule, NgIf, TranslateModule, MatInputModule, FormsModule, ErrorWidgetComponent],
|
imports: [MatFormFieldModule, NgIf, TranslateModule, MatInputModule, FormsModule, MatTooltipModule, ErrorWidgetComponent],
|
||||||
encapsulation: ViewEncapsulation.None
|
encapsulation: ViewEncapsulation.None
|
||||||
})
|
})
|
||||||
export class MultilineTextWidgetComponentComponent extends WidgetComponent {
|
export class MultilineTextWidgetComponentComponent extends WidgetComponent {
|
||||||
|
@ -24,8 +24,10 @@
|
|||||||
(ngModelChange)="onFieldChanged(field)"
|
(ngModelChange)="onFieldChanged(field)"
|
||||||
[disabled]="field.readOnly"
|
[disabled]="field.readOnly"
|
||||||
[placeholder]="field.placeholder"
|
[placeholder]="field.placeholder"
|
||||||
[title]="field.tooltip"
|
[matTooltip]="field.tooltip"
|
||||||
(blur)="markAsTouched()">
|
(blur)="markAsTouched()"
|
||||||
|
matTooltipPosition="above"
|
||||||
|
[matTooltipShowDelay]="1000">
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<error-widget [error]="field.validationSummary"></error-widget>
|
<error-widget [error]="field.validationSummary"></error-widget>
|
||||||
<error-widget *ngIf="isInvalidFieldRequired() && isTouched()"
|
<error-widget *ngIf="isInvalidFieldRequired() && isTouched()"
|
||||||
|
@ -21,6 +21,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
|
|||||||
import { MatIconModule } from '@angular/material/icon';
|
import { MatIconModule } from '@angular/material/icon';
|
||||||
import { MatInputModule } from '@angular/material/input';
|
import { MatInputModule } from '@angular/material/input';
|
||||||
import { MatInputHarness } from '@angular/material/input/testing';
|
import { MatInputHarness } from '@angular/material/input/testing';
|
||||||
|
import { MatTooltipHarness } from '@angular/material/tooltip/testing';
|
||||||
import { CoreTestingModule } from '../../../../testing';
|
import { CoreTestingModule } from '../../../../testing';
|
||||||
import { FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
import { FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
||||||
import { NumberWidgetComponent } from './number.widget';
|
import { NumberWidgetComponent } from './number.widget';
|
||||||
@ -54,8 +55,17 @@ describe('NumberWidgetComponent', () => {
|
|||||||
const input = await loader.getHarness(MatInputHarness);
|
const input = await loader.getHarness(MatInputHarness);
|
||||||
await (await input.host()).hover();
|
await (await input.host()).hover();
|
||||||
|
|
||||||
const tooltip = await (await input.host()).getAttribute('title');
|
const tooltip = await loader.getHarness(MatTooltipHarness);
|
||||||
expect(tooltip).toBe('my custom tooltip');
|
expect(await tooltip.getTooltipText()).toBe('my custom tooltip');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should hide tooltip', async () => {
|
||||||
|
const input = await loader.getHarness(MatInputHarness);
|
||||||
|
await (await input.host()).hover();
|
||||||
|
await (await input.host()).mouseAway();
|
||||||
|
|
||||||
|
const tooltip = await loader.getHarness(MatTooltipHarness);
|
||||||
|
expect(await tooltip.isOpen()).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ import { Component, OnInit, ViewEncapsulation } from '@angular/core';
|
|||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||||
import { MatInputModule } from '@angular/material/input';
|
import { MatInputModule } from '@angular/material/input';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { DecimalNumberPipe } from '../../../../pipes';
|
import { DecimalNumberPipe } from '../../../../pipes';
|
||||||
import { FormService } from '../../../services/form.service';
|
import { FormService } from '../../../services/form.service';
|
||||||
@ -44,7 +45,7 @@ import { WidgetComponent } from '../widget.component';
|
|||||||
'(invalid)': 'event($event)',
|
'(invalid)': 'event($event)',
|
||||||
'(select)': 'event($event)'
|
'(select)': 'event($event)'
|
||||||
},
|
},
|
||||||
imports: [NgIf, TranslateModule, MatFormFieldModule, MatInputModule, FormsModule, ErrorWidgetComponent],
|
imports: [NgIf, TranslateModule, MatFormFieldModule, MatInputModule, FormsModule, MatTooltipModule, ErrorWidgetComponent],
|
||||||
encapsulation: ViewEncapsulation.None
|
encapsulation: ViewEncapsulation.None
|
||||||
})
|
})
|
||||||
export class NumberWidgetComponent extends WidgetComponent implements OnInit {
|
export class NumberWidgetComponent extends WidgetComponent implements OnInit {
|
||||||
|
@ -23,8 +23,10 @@
|
|||||||
[disabled]="field.readOnly || readOnly"
|
[disabled]="field.readOnly || readOnly"
|
||||||
[textMask]="{mask: mask, isReversed: isMaskReversed}"
|
[textMask]="{mask: mask, isReversed: isMaskReversed}"
|
||||||
[placeholder]="placeholder"
|
[placeholder]="placeholder"
|
||||||
[title]="field.tooltip"
|
[matTooltip]="field.tooltip"
|
||||||
(blur)="markAsTouched()">
|
(blur)="markAsTouched()"
|
||||||
|
matTooltipPosition="above"
|
||||||
|
[matTooltipShowDelay]="1000">
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<error-widget [error]="field.validationSummary"></error-widget>
|
<error-widget [error]="field.validationSummary"></error-widget>
|
||||||
<error-widget *ngIf="isInvalidFieldRequired() && isTouched()"
|
<error-widget *ngIf="isInvalidFieldRequired() && isTouched()"
|
||||||
|
@ -28,6 +28,7 @@ import { HarnessLoader } from '@angular/cdk/testing';
|
|||||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||||
import { MatInputHarness } from '@angular/material/input/testing';
|
import { MatInputHarness } from '@angular/material/input/testing';
|
||||||
import { MatFormFieldHarness } from '@angular/material/form-field/testing';
|
import { MatFormFieldHarness } from '@angular/material/form-field/testing';
|
||||||
|
import { MatTooltipHarness } from '@angular/material/tooltip/testing';
|
||||||
|
|
||||||
describe('TextWidgetComponent', () => {
|
describe('TextWidgetComponent', () => {
|
||||||
const form = new FormModel({ taskId: 'fake-task-id' });
|
const form = new FormModel({ taskId: 'fake-task-id' });
|
||||||
@ -165,8 +166,17 @@ describe('TextWidgetComponent', () => {
|
|||||||
const input = await loader.getHarness(MatInputHarness);
|
const input = await loader.getHarness(MatInputHarness);
|
||||||
await (await input.host()).hover();
|
await (await input.host()).hover();
|
||||||
|
|
||||||
const tooltip = await (await input.host()).getAttribute('title');
|
const tooltip = await loader.getHarness(MatTooltipHarness);
|
||||||
expect(tooltip).toBe('my custom tooltip');
|
expect(await tooltip.getTooltipText()).toBe('my custom tooltip');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should hide tooltip', async () => {
|
||||||
|
const input = await loader.getHarness(MatInputHarness);
|
||||||
|
await (await input.host()).hover();
|
||||||
|
await (await input.host()).mouseAway();
|
||||||
|
|
||||||
|
const tooltip = await loader.getHarness(MatTooltipHarness);
|
||||||
|
expect(await tooltip.isOpen()).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ import { Component, OnInit, ViewEncapsulation } from '@angular/core';
|
|||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||||
import { MatInputModule } from '@angular/material/input';
|
import { MatInputModule } from '@angular/material/input';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { FormService } from '../../../services/form.service';
|
import { FormService } from '../../../services/form.service';
|
||||||
import { ErrorWidgetComponent } from '../error/error.component';
|
import { ErrorWidgetComponent } from '../error/error.component';
|
||||||
@ -44,7 +45,7 @@ import { InputMaskDirective } from './text-mask.component';
|
|||||||
'(invalid)': 'event($event)',
|
'(invalid)': 'event($event)',
|
||||||
'(select)': 'event($event)'
|
'(select)': 'event($event)'
|
||||||
},
|
},
|
||||||
imports: [NgIf, TranslateModule, MatFormFieldModule, MatInputModule, FormsModule, ErrorWidgetComponent, InputMaskDirective],
|
imports: [NgIf, TranslateModule, MatFormFieldModule, MatInputModule, FormsModule, MatTooltipModule, ErrorWidgetComponent, InputMaskDirective],
|
||||||
encapsulation: ViewEncapsulation.None
|
encapsulation: ViewEncapsulation.None
|
||||||
})
|
})
|
||||||
export class TextWidgetComponent extends WidgetComponent implements OnInit {
|
export class TextWidgetComponent extends WidgetComponent implements OnInit {
|
||||||
|
@ -42,70 +42,25 @@ import { MatSnackBarModule } from '@angular/material/snack-bar';
|
|||||||
import { MatTableModule } from '@angular/material/table';
|
import { MatTableModule } from '@angular/material/table';
|
||||||
import { MatTabsModule } from '@angular/material/tabs';
|
import { MatTabsModule } from '@angular/material/tabs';
|
||||||
import { MatToolbarModule } from '@angular/material/toolbar';
|
import { MatToolbarModule } from '@angular/material/toolbar';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { MatBadgeModule } from '@angular/material/badge';
|
import { MatBadgeModule } from '@angular/material/badge';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
MatAutocompleteModule,
|
MatAutocompleteModule, MatButtonModule, MatCardModule, MatCheckboxModule,
|
||||||
MatButtonModule,
|
MatChipsModule, MatDatepickerModule, MatDialogModule, MatGridListModule, MatIconModule,
|
||||||
MatCardModule,
|
MatInputModule, MatListModule, MatNativeDateModule, MatOptionModule, MatProgressSpinnerModule, MatRadioModule,
|
||||||
MatCheckboxModule,
|
MatRippleModule, MatSelectModule, MatSlideToggleModule, MatTableModule, MatTabsModule,
|
||||||
MatChipsModule,
|
MatMenuModule, MatProgressBarModule, MatSidenavModule, MatSnackBarModule, MatToolbarModule,
|
||||||
MatDatepickerModule,
|
MatTooltipModule, MatDatetimepickerModule, MatNativeDatetimeModule, MatExpansionModule, MatBadgeModule
|
||||||
MatDialogModule,
|
|
||||||
MatGridListModule,
|
|
||||||
MatIconModule,
|
|
||||||
MatInputModule,
|
|
||||||
MatListModule,
|
|
||||||
MatNativeDateModule,
|
|
||||||
MatOptionModule,
|
|
||||||
MatProgressSpinnerModule,
|
|
||||||
MatRadioModule,
|
|
||||||
MatRippleModule,
|
|
||||||
MatSelectModule,
|
|
||||||
MatSlideToggleModule,
|
|
||||||
MatTableModule,
|
|
||||||
MatTabsModule,
|
|
||||||
MatMenuModule,
|
|
||||||
MatProgressBarModule,
|
|
||||||
MatSidenavModule,
|
|
||||||
MatSnackBarModule,
|
|
||||||
MatToolbarModule,
|
|
||||||
MatDatetimepickerModule,
|
|
||||||
MatNativeDatetimeModule,
|
|
||||||
MatExpansionModule,
|
|
||||||
MatBadgeModule
|
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
MatAutocompleteModule,
|
MatAutocompleteModule, MatButtonModule, MatCardModule, MatCheckboxModule,
|
||||||
MatButtonModule,
|
MatChipsModule, MatDatepickerModule, MatDialogModule, MatGridListModule, MatIconModule,
|
||||||
MatCardModule,
|
MatInputModule, MatListModule, MatNativeDateModule, MatOptionModule, MatProgressSpinnerModule, MatRadioModule,
|
||||||
MatCheckboxModule,
|
MatRippleModule, MatSelectModule, MatSlideToggleModule, MatTableModule, MatTabsModule,
|
||||||
MatChipsModule,
|
MatMenuModule, MatProgressBarModule, MatSidenavModule, MatSnackBarModule, MatToolbarModule,
|
||||||
MatDatepickerModule,
|
MatTooltipModule, MatDatetimepickerModule, MatNativeDatetimeModule, MatExpansionModule, MatBadgeModule
|
||||||
MatDialogModule,
|
|
||||||
MatGridListModule,
|
|
||||||
MatIconModule,
|
|
||||||
MatInputModule,
|
|
||||||
MatListModule,
|
|
||||||
MatNativeDateModule,
|
|
||||||
MatOptionModule,
|
|
||||||
MatProgressSpinnerModule,
|
|
||||||
MatRadioModule,
|
|
||||||
MatRippleModule,
|
|
||||||
MatSelectModule,
|
|
||||||
MatSlideToggleModule,
|
|
||||||
MatTableModule,
|
|
||||||
MatTabsModule,
|
|
||||||
MatMenuModule,
|
|
||||||
MatProgressBarModule,
|
|
||||||
MatSidenavModule,
|
|
||||||
MatSnackBarModule,
|
|
||||||
MatToolbarModule,
|
|
||||||
MatDatetimepickerModule,
|
|
||||||
MatNativeDatetimeModule,
|
|
||||||
MatExpansionModule,
|
|
||||||
MatBadgeModule
|
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
export class MaterialModule {}
|
export class MaterialModule {}
|
||||||
|
@ -51,7 +51,8 @@
|
|||||||
<p class="adf-notification-history-menu-text adf-notification-history-menu-message"
|
<p class="adf-notification-history-menu-text adf-notification-history-menu-message"
|
||||||
*ngFor="let message of notification.messages"
|
*ngFor="let message of notification.messages"
|
||||||
mat-line
|
mat-line
|
||||||
[title]="message">
|
[matTooltip]="message"
|
||||||
|
matTooltipShowDelay="{{ 1000 }}">
|
||||||
{{ message }}
|
{{ message }}
|
||||||
</p>
|
</p>
|
||||||
<p class="adf-notification-history-menu-text adf-notification-history-menu-date" mat-line>
|
<p class="adf-notification-history-menu-text adf-notification-history-menu-date" mat-line>
|
||||||
|
@ -29,6 +29,7 @@ import { MatIconModule } from '@angular/material/icon';
|
|||||||
import { MatBadgeModule } from '@angular/material/badge';
|
import { MatBadgeModule } from '@angular/material/badge';
|
||||||
import { MatListModule } from '@angular/material/list';
|
import { MatListModule } from '@angular/material/list';
|
||||||
import { NgForOf, NgIf } from '@angular/common';
|
import { NgForOf, NgIf } from '@angular/common';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { InitialUsernamePipe, TimeAgoPipe } from '../../pipes';
|
import { InitialUsernamePipe, TimeAgoPipe } from '../../pipes';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@ -45,6 +46,7 @@ import { InitialUsernamePipe, TimeAgoPipe } from '../../pipes';
|
|||||||
MatListModule,
|
MatListModule,
|
||||||
NgIf,
|
NgIf,
|
||||||
NgForOf,
|
NgForOf,
|
||||||
|
MatTooltipModule,
|
||||||
TimeAgoPipe,
|
TimeAgoPipe,
|
||||||
InitialUsernamePipe
|
InitialUsernamePipe
|
||||||
],
|
],
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<button
|
<button
|
||||||
mat-icon-button
|
mat-icon-button
|
||||||
*ngFor="let report of reports; let idx = index"
|
*ngFor="let report of reports; let idx = index"
|
||||||
[title]="report.title"
|
[matTooltip]="report.title"
|
||||||
[color]="isCurrent(idx) ? 'primary' : null"
|
[color]="isCurrent(idx) ? 'primary' : null"
|
||||||
(click)="selectCurrent(idx)"
|
(click)="selectCurrent(idx)"
|
||||||
>
|
>
|
||||||
|
@ -21,6 +21,7 @@ import { Chart } from '../../diagram/models/chart/chart.model';
|
|||||||
import { AnalyticsService } from '../services/analytics.service';
|
import { AnalyticsService } from '../services/analytics.service';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { MatIconModule } from '@angular/material/icon';
|
import { MatIconModule } from '@angular/material/icon';
|
||||||
import { NgChartsModule } from 'ng2-charts';
|
import { NgChartsModule } from 'ng2-charts';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
@ -34,6 +35,7 @@ import { AnalyticsReportHeatMapComponent } from './analytics-report-heat-map.com
|
|||||||
imports: [
|
imports: [
|
||||||
CommonModule,
|
CommonModule,
|
||||||
MatButtonModule,
|
MatButtonModule,
|
||||||
|
MatTooltipModule,
|
||||||
MatIconModule,
|
MatIconModule,
|
||||||
NgChartsModule,
|
NgChartsModule,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<adf-toolbar class="adf-cloud-form-toolbar" *ngIf="displayMode === 'fullScreen' && findDisplayConfiguration('fullScreen')?.options?.displayToolbar">
|
<adf-toolbar class="adf-cloud-form-toolbar" *ngIf="displayMode === 'fullScreen' && findDisplayConfiguration('fullScreen')?.options?.displayToolbar">
|
||||||
<div class="adf-cloud-form__form-title">
|
<div class="adf-cloud-form__form-title">
|
||||||
<span class="adf-cloud-form__display-name" [title]="form.taskName">
|
<span class="adf-cloud-form__display-name" [matTooltip]="form.taskName">
|
||||||
{{form.taskName}}
|
{{form.taskName}}
|
||||||
<ng-container *ngIf="!form.taskName">
|
<ng-container *ngIf="!form.taskName">
|
||||||
{{'FORM.FORM_RENDERER.NAMELESS_TASK' | translate}}
|
{{'FORM.FORM_RENDERER.NAMELESS_TASK' | translate}}
|
||||||
@ -23,7 +23,7 @@
|
|||||||
data-automation-id="adf-toolbar-right-back"
|
data-automation-id="adf-toolbar-right-back"
|
||||||
[attr.aria-label]="'ADF_VIEWER.ACTIONS.CLOSE' | translate"
|
[attr.aria-label]="'ADF_VIEWER.ACTIONS.CLOSE' | translate"
|
||||||
[attr.data-automation-id]="'adf-cloud-form-close-button'"
|
[attr.data-automation-id]="'adf-cloud-form-close-button'"
|
||||||
[title]="'ADF_VIEWER.ACTIONS.CLOSE' | translate"
|
[matTooltip]="'ADF_VIEWER.ACTIONS.CLOSE' | translate"
|
||||||
mat-icon-button
|
mat-icon-button
|
||||||
title="{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}"
|
title="{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}"
|
||||||
(click)="switchToDisplayMode()">
|
(click)="switchToDisplayMode()">
|
||||||
@ -48,12 +48,12 @@
|
|||||||
<mat-icon>fullscreen</mat-icon>
|
<mat-icon>fullscreen</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="showRefreshButton" class="adf-cloud-form-reload-button" [title]="'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate">
|
<div *ngIf="showRefreshButton" class="adf-cloud-form-reload-button" [matTooltip]="'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate">
|
||||||
<button mat-icon-button (click)="onRefreshClicked()" [attr.aria-label]="'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate">
|
<button mat-icon-button (click)="onRefreshClicked()" [attr.aria-label]="'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate">
|
||||||
<mat-icon>refresh</mat-icon>
|
<mat-icon>refresh</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<span *ngIf="isTitleEnabled()" class="adf-cloud-form-title" [title]="form.taskName">
|
<span *ngIf="isTitleEnabled()" class="adf-cloud-form-title" [matTooltip]="form.taskName">
|
||||||
{{form.taskName}}
|
{{form.taskName}}
|
||||||
<ng-container *ngIf="!form.taskName">
|
<ng-container *ngIf="!form.taskName">
|
||||||
{{'FORM.FORM_RENDERER.NAMELESS_TASK' | translate}}
|
{{'FORM.FORM_RENDERER.NAMELESS_TASK' | translate}}
|
||||||
|
@ -12,7 +12,9 @@
|
|||||||
class="adf-attach-widget__menu-upload__button"
|
class="adf-attach-widget__menu-upload__button"
|
||||||
color="primary"
|
color="primary"
|
||||||
[id]="field.id"
|
[id]="field.id"
|
||||||
[title]="field.tooltip">
|
[matTooltip]="field.tooltip"
|
||||||
|
matTooltipPosition="above"
|
||||||
|
matTooltipShowDelay="1000">
|
||||||
{{ 'FORM.FIELD.ATTACH' | translate }}
|
{{ 'FORM.FIELD.ATTACH' | translate }}
|
||||||
<mat-icon class="adf-attach-widget__menu-upload__button__icon">{{getWidgetIcon()}}</mat-icon>
|
<mat-icon class="adf-attach-widget__menu-upload__button__icon">{{getWidgetIcon()}}</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
@ -71,6 +71,9 @@ import {
|
|||||||
import { By } from '@angular/platform-browser';
|
import { By } from '@angular/platform-browser';
|
||||||
import { of, throwError } from 'rxjs';
|
import { of, throwError } from 'rxjs';
|
||||||
import { FormCloudModule } from '../../../form-cloud.module';
|
import { FormCloudModule } from '../../../form-cloud.module';
|
||||||
|
import { HarnessLoader } from '@angular/cdk/testing';
|
||||||
|
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||||
|
import { MatTooltipHarness } from '@angular/material/tooltip/testing';
|
||||||
|
|
||||||
const mockNodeToBeVersioned: any = {
|
const mockNodeToBeVersioned: any = {
|
||||||
isFile: true,
|
isFile: true,
|
||||||
@ -122,6 +125,7 @@ describe('AttachFileCloudWidgetComponent', () => {
|
|||||||
let localizedDataPipe: LocalizedDatePipe;
|
let localizedDataPipe: LocalizedDatePipe;
|
||||||
let newVersionUploaderService: NewVersionUploaderService;
|
let newVersionUploaderService: NewVersionUploaderService;
|
||||||
let notificationService: NotificationService;
|
let notificationService: NotificationService;
|
||||||
|
let loader: HarnessLoader;
|
||||||
|
|
||||||
const createUploadWidgetField = (
|
const createUploadWidgetField = (
|
||||||
form: FormModel,
|
form: FormModel,
|
||||||
@ -165,6 +169,7 @@ describe('AttachFileCloudWidgetComponent', () => {
|
|||||||
contentNodeSelectorPanelService = TestBed.inject(ContentNodeSelectorPanelService);
|
contentNodeSelectorPanelService = TestBed.inject(ContentNodeSelectorPanelService);
|
||||||
openUploadFileDialogSpy = spyOn(contentCloudNodeSelectorService, 'openUploadFileDialog').and.returnValue(of([fakeNode]));
|
openUploadFileDialogSpy = spyOn(contentCloudNodeSelectorService, 'openUploadFileDialog').and.returnValue(of([fakeNode]));
|
||||||
localizedDataPipe = new LocalizedDatePipe();
|
localizedDataPipe = new LocalizedDatePipe();
|
||||||
|
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
@ -921,4 +926,37 @@ describe('AttachFileCloudWidgetComponent', () => {
|
|||||||
expect(spyOnShowError).toHaveBeenCalledWith(mockError.value);
|
expect(spyOnShowError).toHaveBeenCalledWith(mockError.value);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('when tooltip is set', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
widget.field = new FormFieldModel(new FormModel({ taskId: '<id>' }), {
|
||||||
|
type: FormFieldTypes.UPLOAD,
|
||||||
|
tooltip: 'my custom tooltip'
|
||||||
|
});
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should show tooltip', async () => {
|
||||||
|
const attachButton = fixture.nativeElement.querySelector('button');
|
||||||
|
attachButton.dispatchEvent(new Event('mouseenter'));
|
||||||
|
|
||||||
|
const tooltipElement = await loader.getHarness(MatTooltipHarness);
|
||||||
|
|
||||||
|
expect(await tooltipElement.isOpen()).toBeTrue();
|
||||||
|
expect(await tooltipElement.getTooltipText()).toBe('my custom tooltip');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should hide tooltip', async () => {
|
||||||
|
const attachButton = fixture.nativeElement.querySelector('.adf-attach-widget__menu-upload__button');
|
||||||
|
attachButton.dispatchEvent(new Event('mouseenter'));
|
||||||
|
fixture.detectChanges();
|
||||||
|
|
||||||
|
attachButton.dispatchEvent(new Event('mouseleave'));
|
||||||
|
fixture.detectChanges();
|
||||||
|
|
||||||
|
const tooltipElement = await loader.getHarness(MatTooltipHarness);
|
||||||
|
|
||||||
|
expect(await tooltipElement.isOpen()).toBeFalse();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -20,7 +20,8 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div *ngIf="(!hasFile || multipleOption) && !field.readOnly">
|
<div *ngIf="(!hasFile || multipleOption) && !field.readOnly">
|
||||||
<button mat-raised-button color="primary" (click)="uploadFiles.click()" [title]="field.tooltip">
|
<button mat-raised-button color="primary" (click)="uploadFiles.click()" [matTooltip]="field.tooltip"
|
||||||
|
matTooltipPosition="above" matTooltipShowDelay="1000">
|
||||||
{{ 'FORM.FIELD.UPLOAD' | translate }}<mat-icon>file_upload</mat-icon>
|
{{ 'FORM.FIELD.UPLOAD' | translate }}<mat-icon>file_upload</mat-icon>
|
||||||
<input #uploadFiles [multiple]="multipleOption" type="file" [id]="field.form.nodeId"
|
<input #uploadFiles [multiple]="multipleOption" type="file" [id]="field.form.nodeId"
|
||||||
(change)="onFileChanged($event)" />
|
(change)="onFileChanged($event)" />
|
||||||
|
@ -15,7 +15,9 @@
|
|||||||
[min]="minDate"
|
[min]="minDate"
|
||||||
[max]="maxDate"
|
[max]="maxDate"
|
||||||
[disabled]="field.readOnly"
|
[disabled]="field.readOnly"
|
||||||
[title]="field.tooltip"
|
[matTooltip]="field.tooltip"
|
||||||
|
matTooltipPosition="above"
|
||||||
|
matTooltipShowDelay="1000"
|
||||||
(dateChange)="onDateChanged($event)"
|
(dateChange)="onDateChanged($event)"
|
||||||
(blur)="markAsTouched()">
|
(blur)="markAsTouched()">
|
||||||
<mat-datepicker-toggle matSuffix [for]="datePicker" [disabled]="field.readOnly"></mat-datepicker-toggle>
|
<mat-datepicker-toggle matSuffix [for]="datePicker" [disabled]="field.readOnly"></mat-datepicker-toggle>
|
||||||
|
@ -21,6 +21,10 @@ import { FormFieldModel, FormModel, FormFieldTypes, DateFieldValidator, MinDateF
|
|||||||
import { ProcessServiceCloudTestingModule } from '../../../../testing/process-service-cloud.testing.module';
|
import { ProcessServiceCloudTestingModule } from '../../../../testing/process-service-cloud.testing.module';
|
||||||
import { DateAdapter } from '@angular/material/core';
|
import { DateAdapter } from '@angular/material/core';
|
||||||
import { isEqual, subDays, addDays } from 'date-fns';
|
import { isEqual, subDays, addDays } from 'date-fns';
|
||||||
|
import { HarnessLoader } from '@angular/cdk/testing';
|
||||||
|
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||||
|
import { MatTooltipHarness } from '@angular/material/tooltip/testing';
|
||||||
|
import { MatInputHarness } from '@angular/material/input/testing';
|
||||||
|
|
||||||
describe('DateWidgetComponent', () => {
|
describe('DateWidgetComponent', () => {
|
||||||
let widget: DateCloudWidgetComponent;
|
let widget: DateCloudWidgetComponent;
|
||||||
@ -28,6 +32,7 @@ describe('DateWidgetComponent', () => {
|
|||||||
let element: HTMLElement;
|
let element: HTMLElement;
|
||||||
let adapter: DateAdapter<Date>;
|
let adapter: DateAdapter<Date>;
|
||||||
let form: FormModel;
|
let form: FormModel;
|
||||||
|
let loader: HarnessLoader;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
@ -42,6 +47,7 @@ describe('DateWidgetComponent', () => {
|
|||||||
|
|
||||||
widget = fixture.componentInstance;
|
widget = fixture.componentInstance;
|
||||||
element = fixture.nativeElement;
|
element = fixture.nativeElement;
|
||||||
|
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should setup min value for date picker', () => {
|
it('should setup min value for date picker', () => {
|
||||||
@ -427,6 +433,34 @@ describe('DateWidgetComponent', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('when tooltip is set', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
widget.field = new FormFieldModel(new FormModel({ taskId: '<id>' }), {
|
||||||
|
type: FormFieldTypes.DATE,
|
||||||
|
tooltip: 'my custom tooltip'
|
||||||
|
});
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should show tooltip', async () => {
|
||||||
|
const dateCloudInput = await loader.getHarness(MatInputHarness);
|
||||||
|
await (await dateCloudInput.host()).dispatchEvent('mouseenter');
|
||||||
|
|
||||||
|
const tooltipElement = await loader.getHarness(MatTooltipHarness);
|
||||||
|
expect(await tooltipElement.isOpen()).toBeTruthy();
|
||||||
|
expect(await tooltipElement.getTooltipText()).toEqual('my custom tooltip');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should hide tooltip', async () => {
|
||||||
|
const dateCloudInput = await loader.getHarness(MatInputHarness);
|
||||||
|
await (await dateCloudInput.host()).dispatchEvent('mouseenter');
|
||||||
|
await (await dateCloudInput.host()).dispatchEvent('mouseleave');
|
||||||
|
|
||||||
|
const tooltipElement = await loader.getHarness(MatTooltipHarness);
|
||||||
|
expect(await tooltipElement.isOpen()).toBeFalsy();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('when is required', () => {
|
describe('when is required', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
widget.field = new FormFieldModel(new FormModel({ taskId: '<id>' }), {
|
widget.field = new FormFieldModel(new FormModel({ taskId: '<id>' }), {
|
||||||
|
@ -16,10 +16,12 @@
|
|||||||
[disabled]="field.readOnly"
|
[disabled]="field.readOnly"
|
||||||
[compareWith]="compareDropdownValues"
|
[compareWith]="compareDropdownValues"
|
||||||
(ngModelChange)="selectionChangedForField(field)"
|
(ngModelChange)="selectionChangedForField(field)"
|
||||||
[title]="field.tooltip"
|
[matTooltip]="field.tooltip"
|
||||||
[required]="isRequired()"
|
[required]="isRequired()"
|
||||||
panelClass="adf-select-filter"
|
panelClass="adf-select-filter"
|
||||||
(blur)="markAsTouched()"
|
(blur)="markAsTouched()"
|
||||||
|
matTooltipPosition="above"
|
||||||
|
matTooltipShowDelay="1000"
|
||||||
[multiple]="field.hasMultipleValues">
|
[multiple]="field.hasMultipleValues">
|
||||||
<adf-select-filter-input *ngIf="showInputFilter" (change)="filter$.next($event)"></adf-select-filter-input>
|
<adf-select-filter-input *ngIf="showInputFilter" (change)="filter$.next($event)"></adf-select-filter-input>
|
||||||
|
|
||||||
|
@ -37,6 +37,7 @@ import { HarnessLoader } from '@angular/cdk/testing';
|
|||||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||||
import { MatSelectHarness } from '@angular/material/select/testing';
|
import { MatSelectHarness } from '@angular/material/select/testing';
|
||||||
import { MatFormFieldHarness } from '@angular/material/form-field/testing';
|
import { MatFormFieldHarness } from '@angular/material/form-field/testing';
|
||||||
|
import { MatTooltipHarness } from '@angular/material/tooltip/testing';
|
||||||
|
|
||||||
describe('DropdownCloudWidgetComponent', () => {
|
describe('DropdownCloudWidgetComponent', () => {
|
||||||
let formService: FormService;
|
let formService: FormService;
|
||||||
@ -258,6 +259,38 @@ describe('DropdownCloudWidgetComponent', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('when tooltip is set', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
widget.field = new FormFieldModel(new FormModel({ taskId: '<id>' }), {
|
||||||
|
type: FormFieldTypes.DROPDOWN,
|
||||||
|
tooltip: 'my custom tooltip'
|
||||||
|
});
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should show tooltip', async () => {
|
||||||
|
const dropdown = await loader.getHarness(MatSelectHarness.with({ selector: '.adf-select' }));
|
||||||
|
const dropdownInput = await dropdown.host();
|
||||||
|
dropdownInput.dispatchEvent('mouseenter');
|
||||||
|
|
||||||
|
const tooltipElement = await loader.getHarness(MatTooltipHarness);
|
||||||
|
expect(tooltipElement).toBeTruthy();
|
||||||
|
expect(await tooltipElement.getTooltipText()).toBe('my custom tooltip');
|
||||||
|
expect(await tooltipElement.isOpen()).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should hide tooltip', async () => {
|
||||||
|
const dropdown = await loader.getHarness(MatSelectHarness.with({ selector: '.adf-select' }));
|
||||||
|
const dropdownInput = await dropdown.host();
|
||||||
|
await dropdownInput.dispatchEvent('mouseenter');
|
||||||
|
|
||||||
|
await dropdownInput.dispatchEvent('mouseleave');
|
||||||
|
|
||||||
|
const tooltipElement = await loader.getHarness(MatTooltipHarness);
|
||||||
|
expect(await tooltipElement.isOpen()).toBeFalsy();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('when is required', () => {
|
describe('when is required', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
widget.field = new FormFieldModel(new FormModel({ taskId: '<id>' }), {
|
widget.field = new FormFieldModel(new FormModel({ taskId: '<id>' }), {
|
||||||
|
@ -15,7 +15,9 @@
|
|||||||
(changedGroups)="onChangedGroup($event)"
|
(changedGroups)="onChangedGroup($event)"
|
||||||
[preSelectGroups]="preSelectGroup"
|
[preSelectGroups]="preSelectGroup"
|
||||||
(blur)="markAsTouched()"
|
(blur)="markAsTouched()"
|
||||||
[attr.title]="field.tooltip">
|
[matTooltip]="field.tooltip"
|
||||||
|
[matTooltipPosition]="'above'"
|
||||||
|
[matTooltipShowDelay]="1000">
|
||||||
</adf-cloud-group>
|
</adf-cloud-group>
|
||||||
<error-widget [error]="field.validationSummary"></error-widget>
|
<error-widget [error]="field.validationSummary"></error-widget>
|
||||||
<error-widget class="adf-dropdown-required-message" *ngIf="isInvalidFieldRequired() && isTouched()"
|
<error-widget class="adf-dropdown-required-message" *ngIf="isInvalidFieldRequired() && isTouched()"
|
||||||
|
@ -22,6 +22,7 @@ import { ProcessServiceCloudTestingModule } from '../../../../testing/process-se
|
|||||||
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||||
import { HarnessLoader } from '@angular/cdk/testing';
|
import { HarnessLoader } from '@angular/cdk/testing';
|
||||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||||
|
import { MatTooltipHarness } from '@angular/material/tooltip/testing';
|
||||||
import { MatChipHarness } from '@angular/material/chips/testing';
|
import { MatChipHarness } from '@angular/material/chips/testing';
|
||||||
import { MatFormFieldHarness } from '@angular/material/form-field/testing';
|
import { MatFormFieldHarness } from '@angular/material/form-field/testing';
|
||||||
|
|
||||||
@ -73,8 +74,23 @@ describe('GroupCloudWidgetComponent', () => {
|
|||||||
await fixture.whenStable();
|
await fixture.whenStable();
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
|
||||||
const tooltip = cloudGroupInput.getAttribute('title');
|
const tooltipElement = await loader.getHarness(MatTooltipHarness);
|
||||||
expect(tooltip).toEqual('my custom tooltip');
|
expect(await tooltipElement.isOpen()).toBeTruthy();
|
||||||
|
expect(await tooltipElement.getTooltipText()).toEqual('my custom tooltip');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should hide tooltip', async () => {
|
||||||
|
const cloudGroupInput = element.querySelector('[data-automation-id="adf-cloud-group-search-input"]');
|
||||||
|
cloudGroupInput.dispatchEvent(new Event('mouseenter'));
|
||||||
|
await fixture.whenStable();
|
||||||
|
fixture.detectChanges();
|
||||||
|
|
||||||
|
cloudGroupInput.dispatchEvent(new Event('mouseleave'));
|
||||||
|
await fixture.whenStable();
|
||||||
|
fixture.detectChanges();
|
||||||
|
|
||||||
|
const tooltipElement = await loader.getHarness(MatTooltipHarness);
|
||||||
|
expect(await tooltipElement.isOpen()).toBeFalsy();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -151,8 +167,8 @@ describe('GroupCloudWidgetComponent', () => {
|
|||||||
const formField = await loader.getHarness(MatFormFieldHarness);
|
const formField = await loader.getHarness(MatFormFieldHarness);
|
||||||
expect(await formField.isDisabled()).toBeTrue();
|
expect(await formField.isDisabled()).toBeTrue();
|
||||||
|
|
||||||
const groupChip = await loader.getHarness(MatChipHarness);
|
const gtoupChip = await loader.getHarness(MatChipHarness);
|
||||||
expect(await groupChip.isDisabled()).toBeTrue();
|
expect(await gtoupChip.isDisabled()).toBeTrue();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should multi chips be disabled', async () => {
|
it('should multi chips be disabled', async () => {
|
||||||
|
@ -17,7 +17,9 @@
|
|||||||
[mode]="mode"
|
[mode]="mode"
|
||||||
[groupsRestriction]="groupsRestriction"
|
[groupsRestriction]="groupsRestriction"
|
||||||
(blur)="markAsTouched()"
|
(blur)="markAsTouched()"
|
||||||
[attr.title]="field.tooltip">
|
[matTooltip]="field.tooltip"
|
||||||
|
matTooltipPosition="above"
|
||||||
|
matTooltipShowDelay="1000">
|
||||||
</adf-cloud-people>
|
</adf-cloud-people>
|
||||||
<error-widget [error]="field.validationSummary"></error-widget>
|
<error-widget [error]="field.validationSummary"></error-widget>
|
||||||
<error-widget class="adf-dropdown-required-message" *ngIf="isInvalidFieldRequired() && isTouched()"
|
<error-widget class="adf-dropdown-required-message" *ngIf="isInvalidFieldRequired() && isTouched()"
|
||||||
|
@ -24,6 +24,7 @@ import { IdentityUserService } from '../../../../people/services/identity-user.s
|
|||||||
import { mockShepherdsPie, mockYorkshirePudding } from '../../../../people/mock/people-cloud.mock';
|
import { mockShepherdsPie, mockYorkshirePudding } from '../../../../people/mock/people-cloud.mock';
|
||||||
import { HarnessLoader } from '@angular/cdk/testing';
|
import { HarnessLoader } from '@angular/cdk/testing';
|
||||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||||
|
import { MatTooltipHarness } from '@angular/material/tooltip/testing';
|
||||||
import { MatFormFieldHarness } from '@angular/material/form-field/testing';
|
import { MatFormFieldHarness } from '@angular/material/form-field/testing';
|
||||||
import { MatChipHarness } from '@angular/material/chips/testing';
|
import { MatChipHarness } from '@angular/material/chips/testing';
|
||||||
|
|
||||||
@ -101,8 +102,23 @@ describe('PeopleCloudWidgetComponent', () => {
|
|||||||
await fixture.whenStable();
|
await fixture.whenStable();
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
|
||||||
const tooltip = cloudPeopleInput.getAttribute('title');
|
const tooltipElement = await loader.getHarness(MatTooltipHarness);
|
||||||
expect(tooltip).toEqual('my custom tooltip');
|
expect(await tooltipElement.isOpen()).toBeTruthy();
|
||||||
|
expect(await tooltipElement.getTooltipText()).toEqual('my custom tooltip');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should hide tooltip', async () => {
|
||||||
|
const cloudPeopleInput = element.querySelector('adf-cloud-people');
|
||||||
|
cloudPeopleInput.dispatchEvent(new Event('mouseenter'));
|
||||||
|
await fixture.whenStable();
|
||||||
|
fixture.detectChanges();
|
||||||
|
|
||||||
|
cloudPeopleInput.dispatchEvent(new Event('mouseleave'));
|
||||||
|
await fixture.whenStable();
|
||||||
|
fixture.detectChanges();
|
||||||
|
|
||||||
|
const tooltipElement = await loader.getHarness(MatTooltipHarness);
|
||||||
|
expect(await tooltipElement.isOpen()).toBeFalsy();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -4,7 +4,9 @@
|
|||||||
<label class="adf-label" [attr.for]="field.id">{{field.name | translate }}<span class="adf-asterisk" *ngIf="isRequired()">*</span></label>
|
<label class="adf-label" [attr.for]="field.id">{{field.name | translate }}<span class="adf-asterisk" *ngIf="isRequired()">*</span></label>
|
||||||
<mat-radio-group [ngClass]="(field.alignmentType === 'vertical') ? 'adf-radio-group': 'adf-radio-group-horizontal'" class="adf-radio-group" [(ngModel)]="field.value" [disabled]="field.readOnly">
|
<mat-radio-group [ngClass]="(field.alignmentType === 'vertical') ? 'adf-radio-group': 'adf-radio-group-horizontal'" class="adf-radio-group" [(ngModel)]="field.value" [disabled]="field.readOnly">
|
||||||
<mat-radio-button
|
<mat-radio-button
|
||||||
[title]="field.tooltip"
|
[matTooltip]="field.tooltip"
|
||||||
|
matTooltipPosition="above"
|
||||||
|
matTooltipShowDelay="1000"
|
||||||
[id]="field.id + '-' + opt.id"
|
[id]="field.id + '-' + opt.id"
|
||||||
[name]="field.id"
|
[name]="field.id"
|
||||||
[value]="opt.id"
|
[value]="opt.id"
|
||||||
|
@ -24,6 +24,7 @@ import { of, throwError } from 'rxjs';
|
|||||||
import { HarnessLoader } from '@angular/cdk/testing';
|
import { HarnessLoader } from '@angular/cdk/testing';
|
||||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||||
import { MatRadioButtonHarness, MatRadioGroupHarness } from '@angular/material/radio/testing';
|
import { MatRadioButtonHarness, MatRadioGroupHarness } from '@angular/material/radio/testing';
|
||||||
|
import { MatTooltipHarness } from '@angular/material/tooltip/testing';
|
||||||
|
|
||||||
describe('RadioButtonsCloudWidgetComponent', () => {
|
describe('RadioButtonsCloudWidgetComponent', () => {
|
||||||
let fixture: ComponentFixture<RadioButtonsCloudWidgetComponent>;
|
let fixture: ComponentFixture<RadioButtonsCloudWidgetComponent>;
|
||||||
@ -218,8 +219,19 @@ describe('RadioButtonsCloudWidgetComponent', () => {
|
|||||||
it('should show tooltip', async () => {
|
it('should show tooltip', async () => {
|
||||||
const radioButton = await loader.getHarness(MatRadioButtonHarness);
|
const radioButton = await loader.getHarness(MatRadioButtonHarness);
|
||||||
await (await radioButton.host()).hover();
|
await (await radioButton.host()).hover();
|
||||||
const tooltip = await (await radioButton.host()).getAttribute('title');
|
const tooltip = await loader.getHarness(MatTooltipHarness);
|
||||||
expect(tooltip).toBe('my custom tooltip');
|
expect(await tooltip.getTooltipText()).toBe('my custom tooltip');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should hide tooltip', async () => {
|
||||||
|
const radioButton = await loader.getHarness(MatRadioButtonHarness);
|
||||||
|
const tooltipElement = await loader.getHarness(MatTooltipHarness);
|
||||||
|
|
||||||
|
await (await radioButton.host()).hover();
|
||||||
|
expect(await tooltipElement.isOpen()).toBeTrue();
|
||||||
|
|
||||||
|
await (await radioButton.host()).mouseAway();
|
||||||
|
expect(await tooltipElement.isOpen()).toBeFalse();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
[removable]="!(group.readonly)"
|
[removable]="!(group.readonly)"
|
||||||
[attr.data-automation-id]="'adf-cloud-group-chip-' + group.name"
|
[attr.data-automation-id]="'adf-cloud-group-chip-' + group.name"
|
||||||
(removed)="onRemove(group)"
|
(removed)="onRemove(group)"
|
||||||
title="{{ (group.readonly ? 'ADF_CLOUD_GROUPS.MANDATORY' : '') | translate }}">
|
matTooltip="{{ (group.readonly ? 'ADF_CLOUD_GROUPS.MANDATORY' : '') | translate }}">
|
||||||
{{group.name}}
|
{{group.name}}
|
||||||
<mat-icon
|
<mat-icon
|
||||||
*ngIf="!(group.readonly || readOnly)"
|
*ngIf="!(group.readonly || readOnly)"
|
||||||
|
@ -37,56 +37,25 @@ import { MatSelectModule } from '@angular/material/select';
|
|||||||
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
||||||
import { MatTableModule } from '@angular/material/table';
|
import { MatTableModule } from '@angular/material/table';
|
||||||
import { MatTabsModule } from '@angular/material/tabs';
|
import { MatTabsModule } from '@angular/material/tabs';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
providers: [{ provide: MAT_FORM_FIELD_DEFAULT_OPTIONS, useValue: { floatLabel: 'never' } }],
|
providers: [
|
||||||
|
{ provide: MAT_FORM_FIELD_DEFAULT_OPTIONS, useValue: { floatLabel: 'never' } }
|
||||||
|
],
|
||||||
imports: [
|
imports: [
|
||||||
MatAutocompleteModule,
|
MatAutocompleteModule, MatButtonModule, MatCardModule, MatDialogModule,
|
||||||
MatButtonModule,
|
MatCheckboxModule, MatDatepickerModule, MatGridListModule, MatIconModule, MatInputModule,
|
||||||
MatCardModule,
|
MatListModule, MatOptionModule, MatRadioModule, MatSelectModule, MatSlideToggleModule, MatTableModule,
|
||||||
MatDialogModule,
|
MatTabsModule, MatProgressSpinnerModule, MatNativeDateModule, MatRippleModule, MatTooltipModule,
|
||||||
MatCheckboxModule,
|
MatChipsModule, MatMenuModule, MatExpansionModule
|
||||||
MatDatepickerModule,
|
|
||||||
MatGridListModule,
|
|
||||||
MatIconModule,
|
|
||||||
MatInputModule,
|
|
||||||
MatListModule,
|
|
||||||
MatOptionModule,
|
|
||||||
MatRadioModule,
|
|
||||||
MatSelectModule,
|
|
||||||
MatSlideToggleModule,
|
|
||||||
MatTableModule,
|
|
||||||
MatTabsModule,
|
|
||||||
MatProgressSpinnerModule,
|
|
||||||
MatNativeDateModule,
|
|
||||||
MatRippleModule,
|
|
||||||
MatChipsModule,
|
|
||||||
MatMenuModule,
|
|
||||||
MatExpansionModule
|
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
MatAutocompleteModule,
|
MatAutocompleteModule, MatButtonModule, MatCardModule, MatDialogModule,
|
||||||
MatButtonModule,
|
MatCheckboxModule, MatDatepickerModule, MatGridListModule, MatIconModule, MatInputModule,
|
||||||
MatCardModule,
|
MatListModule, MatOptionModule, MatRadioModule, MatSelectModule, MatSlideToggleModule, MatTableModule,
|
||||||
MatDialogModule,
|
MatTabsModule, MatProgressSpinnerModule, MatNativeDateModule, MatRippleModule, MatTooltipModule,
|
||||||
MatCheckboxModule,
|
MatChipsModule, MatMenuModule, MatExpansionModule
|
||||||
MatDatepickerModule,
|
|
||||||
MatGridListModule,
|
|
||||||
MatIconModule,
|
|
||||||
MatInputModule,
|
|
||||||
MatListModule,
|
|
||||||
MatOptionModule,
|
|
||||||
MatRadioModule,
|
|
||||||
MatSelectModule,
|
|
||||||
MatSlideToggleModule,
|
|
||||||
MatTableModule,
|
|
||||||
MatTabsModule,
|
|
||||||
MatProgressSpinnerModule,
|
|
||||||
MatNativeDateModule,
|
|
||||||
MatRippleModule,
|
|
||||||
MatChipsModule,
|
|
||||||
MatMenuModule,
|
|
||||||
MatExpansionModule
|
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
export class MaterialModule {}
|
export class MaterialModule {}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
[removable]="!(user.readonly)"
|
[removable]="!(user.readonly)"
|
||||||
[attr.data-automation-id]="'adf-people-cloud-chip-' + user.username"
|
[attr.data-automation-id]="'adf-people-cloud-chip-' + user.username"
|
||||||
(removed)="onRemove(user)"
|
(removed)="onRemove(user)"
|
||||||
title="{{ (user.readonly ? 'ADF_CLOUD_GROUPS.MANDATORY' : '') | translate }}">
|
matTooltip="{{ (user.readonly ? 'ADF_CLOUD_GROUPS.MANDATORY' : '') | translate }}">
|
||||||
{{user | fullName}}
|
{{user | fullName}}
|
||||||
<mat-icon
|
<mat-icon
|
||||||
matChipRemove
|
matChipRemove
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<span *ngIf="showTitle"> {{ 'ADF_CLOUD_EDIT_PROCESS_FILTER.TITLE' | translate}}</span>
|
<span *ngIf="showTitle"> {{ 'ADF_CLOUD_EDIT_PROCESS_FILTER.TITLE' | translate}}</span>
|
||||||
<div *ngIf="showFilterActions" class="adf-cloud-edit-process-filter-actions">
|
<div *ngIf="showFilterActions" class="adf-cloud-edit-process-filter-actions">
|
||||||
<ng-container *ngIf="toggleFilterActions">
|
<ng-container *ngIf="toggleFilterActions">
|
||||||
<button *ngFor="let filterAction of processFilterActions" mat-icon-button title="{{ filterAction.tooltip | translate}}" [attr.data-automation-id]="'adf-filter-action-' + filterAction.actionType" [disabled]="isDisabledAction(filterAction)" (click)="executeFilterActions($event, filterAction)">
|
<button *ngFor="let filterAction of processFilterActions" mat-icon-button matTooltip="{{ filterAction.tooltip | translate}}" [attr.data-automation-id]="'adf-filter-action-' + filterAction.actionType" [disabled]="isDisabledAction(filterAction)" (click)="executeFilterActions($event, filterAction)">
|
||||||
<adf-icon [value]="filterAction.icon"></adf-icon>
|
<adf-icon [value]="filterAction.icon"></adf-icon>
|
||||||
</button>
|
</button>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<ng-container *ngIf="toggleFilterActions">
|
<ng-container *ngIf="toggleFilterActions">
|
||||||
<button *ngFor="let filterAction of taskFilterActions"
|
<button *ngFor="let filterAction of taskFilterActions"
|
||||||
mat-icon-button
|
mat-icon-button
|
||||||
title="{{ filterAction.tooltip | translate}}"
|
matTooltip="{{ filterAction.tooltip | translate}}"
|
||||||
[attr.data-automation-id]="'adf-filter-action-' + filterAction.actionType"
|
[attr.data-automation-id]="'adf-filter-action-' + filterAction.actionType"
|
||||||
[disabled]="isDisabledAction(filterAction)"
|
[disabled]="isDisabledAction(filterAction)"
|
||||||
(click)="executeFilterActions(filterAction)">
|
(click)="executeFilterActions(filterAction)">
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
<mat-icon>refresh</mat-icon>
|
<mat-icon>refresh</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<span *ngIf="isTitleEnabled()" class="adf-form-title" [title]="form.taskName">
|
<span *ngIf="isTitleEnabled()" class="adf-form-title" [matTooltip]="form.taskName">
|
||||||
{{form.taskName}}
|
{{form.taskName}}
|
||||||
<ng-container *ngIf="!form.taskName">
|
<ng-container *ngIf="!form.taskName">
|
||||||
{{'FORM.FORM_RENDERER.NAMELESS_TASK' | translate}}
|
{{'FORM.FORM_RENDERER.NAMELESS_TASK' | translate}}
|
||||||
|
@ -45,12 +45,13 @@ import { CommonModule } from '@angular/common';
|
|||||||
import { MatCardModule } from '@angular/material/card';
|
import { MatCardModule } from '@angular/material/card';
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
import { MatIconModule } from '@angular/material/icon';
|
import { MatIconModule } from '@angular/material/icon';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'adf-form',
|
selector: 'adf-form',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [CommonModule, MatCardModule, MatButtonModule, MatIconModule, TranslateModule, FormRendererComponent, FormatSpacePipe],
|
imports: [CommonModule, MatCardModule, MatButtonModule, MatIconModule, MatTooltipModule, TranslateModule, FormRendererComponent, FormatSpacePipe],
|
||||||
templateUrl: './form.component.html',
|
templateUrl: './form.component.html',
|
||||||
encapsulation: ViewEncapsulation.None
|
encapsulation: ViewEncapsulation.None
|
||||||
})
|
})
|
||||||
|
@ -72,7 +72,7 @@
|
|||||||
matLine
|
matLine
|
||||||
id="{{ 'file-' + file.id }}"
|
id="{{ 'file-' + file.id }}"
|
||||||
(click)="onAttachFileClicked(file)"
|
(click)="onAttachFileClicked(file)"
|
||||||
[title]="file.name"
|
[matTooltip]="file.name"
|
||||||
(keyup.enter)="onAttachFileClicked(file)"
|
(keyup.enter)="onAttachFileClicked(file)"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
role="button"
|
role="button"
|
||||||
|
@ -33,11 +33,12 @@ import { MatIconModule } from '@angular/material/icon';
|
|||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
import { MatMenuModule } from '@angular/material/menu';
|
import { MatMenuModule } from '@angular/material/menu';
|
||||||
import { MatListModule } from '@angular/material/list';
|
import { MatListModule } from '@angular/material/list';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'attach-widget',
|
selector: 'attach-widget',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [CommonModule, TranslateModule, MatIconModule, MatButtonModule, MatMenuModule, MatListModule, ErrorWidgetComponent],
|
imports: [CommonModule, TranslateModule, MatIconModule, MatButtonModule, MatMenuModule, MatListModule, MatTooltipModule, ErrorWidgetComponent],
|
||||||
templateUrl: './attach-file-widget.component.html',
|
templateUrl: './attach-file-widget.component.html',
|
||||||
styleUrls: ['./attach-file-widget.component.scss'],
|
styleUrls: ['./attach-file-widget.component.scss'],
|
||||||
host: {
|
host: {
|
||||||
|
@ -14,7 +14,9 @@
|
|||||||
[placeholder]="field.placeholder"
|
[placeholder]="field.placeholder"
|
||||||
[matAutocomplete]="auto"
|
[matAutocomplete]="auto"
|
||||||
(blur)="markAsTouched()"
|
(blur)="markAsTouched()"
|
||||||
[title]="field.tooltip">
|
[matTooltip]="field.tooltip"
|
||||||
|
matTooltipPosition="above"
|
||||||
|
matTooltipShowDelay="1000">
|
||||||
<mat-autocomplete class="adf-people-widget-list"
|
<mat-autocomplete class="adf-people-widget-list"
|
||||||
#auto="matAutocomplete"
|
#auto="matAutocomplete"
|
||||||
(optionSelected)="onItemSelect($event.option.value)"
|
(optionSelected)="onItemSelect($event.option.value)"
|
||||||
|
@ -293,7 +293,7 @@ describe('PeopleWidgetComponent', () => {
|
|||||||
await fixture.whenStable();
|
await fixture.whenStable();
|
||||||
|
|
||||||
const radioButtonsElement: any = element.querySelector('#people-id');
|
const radioButtonsElement: any = element.querySelector('#people-id');
|
||||||
const tooltip = radioButtonsElement.getAttribute('title');
|
const tooltip = radioButtonsElement.getAttribute('ng-reflect-message');
|
||||||
|
|
||||||
expect(tooltip).toEqual(widget.field.tooltip);
|
expect(tooltip).toEqual(widget.field.tooltip);
|
||||||
});
|
});
|
||||||
|
@ -29,6 +29,7 @@ import { TranslateModule } from '@ngx-translate/core';
|
|||||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||||
import { MatInputModule } from '@angular/material/input';
|
import { MatInputModule } from '@angular/material/input';
|
||||||
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'people-widget',
|
selector: 'people-widget',
|
||||||
@ -40,6 +41,7 @@ import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|||||||
MatInputModule,
|
MatInputModule,
|
||||||
ReactiveFormsModule,
|
ReactiveFormsModule,
|
||||||
MatAutocompleteModule,
|
MatAutocompleteModule,
|
||||||
|
MatTooltipModule,
|
||||||
InitialUsernamePipe,
|
InitialUsernamePipe,
|
||||||
ErrorWidgetComponent
|
ErrorWidgetComponent
|
||||||
],
|
],
|
||||||
|
@ -4,7 +4,9 @@
|
|||||||
<label class="adf-label" [attr.for]="field.id">{{field.name | translate }}<span class="adf-asterisk" *ngIf="isRequired()">*</span></label>
|
<label class="adf-label" [attr.for]="field.id">{{field.name | translate }}<span class="adf-asterisk" *ngIf="isRequired()">*</span></label>
|
||||||
<mat-radio-group class="adf-radio-group" [(ngModel)]="field.value" [disabled]="field.readOnly">
|
<mat-radio-group class="adf-radio-group" [(ngModel)]="field.value" [disabled]="field.readOnly">
|
||||||
<mat-radio-button
|
<mat-radio-button
|
||||||
[title]="field.tooltip"
|
[matTooltip]="field.tooltip"
|
||||||
|
matTooltipPosition="above"
|
||||||
|
matTooltipShowDelay="1000"
|
||||||
[id]="field.id + '-' + opt.id"
|
[id]="field.id + '-' + opt.id"
|
||||||
[name]="field.id"
|
[name]="field.id"
|
||||||
[value]="opt.id"
|
[value]="opt.id"
|
||||||
|
@ -27,6 +27,7 @@ import { ProcessDefinitionService } from '../../services/process-definition.serv
|
|||||||
import { HarnessLoader } from '@angular/cdk/testing';
|
import { HarnessLoader } from '@angular/cdk/testing';
|
||||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||||
import { MatRadioButtonHarness, MatRadioGroupHarness } from '@angular/material/radio/testing';
|
import { MatRadioButtonHarness, MatRadioGroupHarness } from '@angular/material/radio/testing';
|
||||||
|
import { MatTooltipHarness } from '@angular/material/tooltip/testing';
|
||||||
|
|
||||||
describe('RadioButtonsWidgetComponent', () => {
|
describe('RadioButtonsWidgetComponent', () => {
|
||||||
let formService: FormService;
|
let formService: FormService;
|
||||||
@ -241,9 +242,9 @@ describe('RadioButtonsWidgetComponent', () => {
|
|||||||
|
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
|
||||||
const option = await loader.getHarness(MatRadioButtonHarness.with({ selector: '#radio-id-opt-1' }));
|
const tooltip = await loader.getHarness(MatTooltipHarness.with({ selector: '#radio-id-opt-1' }));
|
||||||
const tooltip = await (await option.host()).getAttribute('title');
|
await tooltip.show();
|
||||||
expect(tooltip).toEqual(radioButtonWidget.field.tooltip);
|
expect(await tooltip.getTooltipText()).toEqual(radioButtonWidget.field.tooltip);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('and radioButton is populated via taskId', () => {
|
describe('and radioButton is populated via taskId', () => {
|
||||||
|
@ -25,11 +25,12 @@ import { CommonModule } from '@angular/common';
|
|||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { MatRadioModule } from '@angular/material/radio';
|
import { MatRadioModule } from '@angular/material/radio';
|
||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'radio-buttons-widget',
|
selector: 'radio-buttons-widget',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [CommonModule, TranslateModule, MatRadioModule, FormsModule, ErrorWidgetComponent],
|
imports: [CommonModule, TranslateModule, MatRadioModule, FormsModule, MatTooltipModule, ErrorWidgetComponent],
|
||||||
templateUrl: './radio-buttons.widget.html',
|
templateUrl: './radio-buttons.widget.html',
|
||||||
styleUrls: ['./radio-buttons.widget.scss'],
|
styleUrls: ['./radio-buttons.widget.scss'],
|
||||||
host: {
|
host: {
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
</mat-chip-list>
|
</mat-chip-list>
|
||||||
|
|
||||||
|
|
||||||
<button mat-icon-button *ngIf="!readOnly" title="Add a checklist"
|
<button mat-icon-button *ngIf="!readOnly" matTooltip="Add a checklist" [matTooltipPosition]="'before'"
|
||||||
id="add-checklist" class="adf-add-to-checklist-button" (click)="showDialog()">
|
id="add-checklist" class="adf-add-to-checklist-button" (click)="showDialog()">
|
||||||
<mat-icon>add</mat-icon>
|
<mat-icon>add</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
@ -23,6 +23,7 @@ import { CommonModule } from '@angular/common';
|
|||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { MatChipsModule } from '@angular/material/chips';
|
import { MatChipsModule } from '@angular/material/chips';
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { MatIconModule } from '@angular/material/icon';
|
import { MatIconModule } from '@angular/material/icon';
|
||||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||||
import { MatInputModule } from '@angular/material/input';
|
import { MatInputModule } from '@angular/material/input';
|
||||||
@ -36,6 +37,7 @@ import { FormsModule } from '@angular/forms';
|
|||||||
TranslateModule,
|
TranslateModule,
|
||||||
MatChipsModule,
|
MatChipsModule,
|
||||||
MatButtonModule,
|
MatButtonModule,
|
||||||
|
MatTooltipModule,
|
||||||
MatIconModule,
|
MatIconModule,
|
||||||
MatDialogModule,
|
MatDialogModule,
|
||||||
MatFormFieldModule,
|
MatFormFieldModule,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user