|
1 |
| -import { booleanAttribute, Component, HostBinding, Input } from '@angular/core'; |
| 1 | +import { booleanAttribute, Component, computed, input } from '@angular/core'; |
2 | 2 |
|
3 | 3 | @Component({
|
4 | 4 | selector: 'c-form-feedback',
|
5 |
| - template: '<ng-content />' |
| 5 | + template: '<ng-content />', |
| 6 | + host: { '[class]': 'hostClasses()' } |
6 | 7 | })
|
7 | 8 | export class FormFeedbackComponent {
|
8 | 9 | /**
|
9 | 10 | * If your form layout allows it, you can display validation feedback in a styled tooltip.
|
10 |
| - * @type boolean |
| 11 | + * @default false |
11 | 12 | */
|
12 |
| - @Input({ transform: booleanAttribute }) tooltip: string | boolean = false; |
| 13 | + readonly tooltip = input(false, { transform: booleanAttribute }); |
13 | 14 |
|
14 | 15 | /**
|
15 | 16 | * Set component validation state to valid.
|
16 |
| - * @type boolean |
| 17 | + * @default undefined |
17 | 18 | */
|
18 |
| - @Input() valid?: boolean; |
| 19 | + readonly valid = input<boolean>(); |
19 | 20 |
|
20 |
| - @HostBinding('class') |
21 |
| - get hostClasses(): any { |
| 21 | + readonly hostClasses = computed(() => { |
| 22 | + const status = this.valid() === true ? 'valid' : 'invalid'; |
| 23 | + const type = this.tooltip() ? 'tooltip' : 'feedback'; |
22 | 24 | return {
|
23 |
| - 'valid-feedback': this.valid === true && !this.tooltip, |
24 |
| - 'valid-tooltip': this.valid === true && this.tooltip, |
25 |
| - 'invalid-feedback': this.valid !== true && !this.tooltip, |
26 |
| - 'invalid-tooltip': this.valid !== true && this.tooltip |
| 25 | + [`${status}-${type}`]: true |
| 26 | + // 'valid-feedback': valid === true && !tooltip, |
| 27 | + // 'valid-tooltip': valid === true && tooltip, |
| 28 | + // 'invalid-feedback': valid !== true && !tooltip, |
| 29 | + // 'invalid-tooltip': valid !== true && tooltip |
27 | 30 | };
|
28 |
| - } |
| 31 | + }); |
29 | 32 | }
|
0 commit comments