Skip to content

Commit fdef420

Browse files
committed
refactor(border): signal inputs, host bindings, cleanup, tests
1 parent abdce49 commit fdef420

File tree

2 files changed

+18
-12
lines changed

2 files changed

+18
-12
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
import { TestBed } from '@angular/core/testing';
12
import { BorderDirective } from './border.directive';
23

34
describe('BorderDirective', () => {
45
it('should create an instance', () => {
6+
TestBed.runInInjectionContext(() => {
57
const directive = new BorderDirective();
68
expect(directive).toBeTruthy();
9+
});
710
});
811
});

projects/coreui-angular/src/lib/utilities/border.directive.ts

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,37 @@
1-
import { Directive, HostBinding, Input } from '@angular/core';
1+
import { computed, Directive, input } from '@angular/core';
22
import { Border } from './border.type';
33

44
@Directive({
5-
selector: '[cBorder]'
5+
selector: '[cBorder]',
6+
exportAs: 'cBorder',
7+
host: { '[class]': 'hostClasses()' }
68
})
79
export class BorderDirective {
810
/**
911
* Add or remove an element’s borders
10-
* @type Border
12+
* @return Border
1113
*/
12-
@Input('cBorder') border: Border = true;
14+
readonly cBorder = input<Border>(true);
1315

14-
@HostBinding('class')
15-
get hostClasses(): any {
16-
if (typeof this.border === 'boolean') {
16+
readonly hostClasses = computed(() => {
17+
const border = this.cBorder();
18+
if (typeof border === 'boolean') {
1719
return { border: true };
1820
}
19-
if (typeof this.border === 'number' || typeof this.border === 'string') {
21+
if (typeof border === 'number' || typeof border === 'string') {
2022
return {
2123
border: true,
22-
[`border-${this.border}`]: true
24+
[`border-${border}`]: true
2325
};
2426
}
25-
if (typeof this.border === 'object') {
27+
if (typeof border === 'object') {
2628
const borderObj = {
2729
top: undefined,
2830
end: undefined,
2931
bottom: undefined,
3032
start: undefined,
3133
color: undefined,
32-
...this.border
34+
...border
3335
};
3436
// @ts-ignore
3537
const keys = Object.keys(borderObj).filter((key) => borderObj[key] !== undefined);
@@ -56,5 +58,6 @@ export class BorderDirective {
5658
});
5759
return Object.entries(classes).length === 0 ? { border: false } : classes;
5860
}
59-
}
61+
return { border: false };
62+
});
6063
}

0 commit comments

Comments
 (0)