1
- import { Directive , HostBinding , Input } from '@angular/core' ;
1
+ import { computed , Directive , input } from '@angular/core' ;
2
2
import { Border } from './border.type' ;
3
3
4
4
@Directive ( {
5
- selector : '[cBorder]'
5
+ selector : '[cBorder]' ,
6
+ exportAs : 'cBorder' ,
7
+ host : { '[class]' : 'hostClasses()' }
6
8
} )
7
9
export class BorderDirective {
8
10
/**
9
11
* Add or remove an element’s borders
10
- * @type Border
12
+ * @return Border
11
13
*/
12
- @ Input ( ' cBorder' ) border : Border = true ;
14
+ readonly cBorder = input < Border > ( true ) ;
13
15
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' ) {
17
19
return { border : true } ;
18
20
}
19
- if ( typeof this . border === 'number' || typeof this . border === 'string' ) {
21
+ if ( typeof border === 'number' || typeof border === 'string' ) {
20
22
return {
21
23
border : true ,
22
- [ `border-${ this . border } ` ] : true
24
+ [ `border-${ border } ` ] : true
23
25
} ;
24
26
}
25
- if ( typeof this . border === 'object' ) {
27
+ if ( typeof border === 'object' ) {
26
28
const borderObj = {
27
29
top : undefined ,
28
30
end : undefined ,
29
31
bottom : undefined ,
30
32
start : undefined ,
31
33
color : undefined ,
32
- ...this . border
34
+ ...border
33
35
} ;
34
36
// @ts -ignore
35
37
const keys = Object . keys ( borderObj ) . filter ( ( key ) => borderObj [ key ] !== undefined ) ;
@@ -56,5 +58,6 @@ export class BorderDirective {
56
58
} ) ;
57
59
return Object . entries ( classes ) . length === 0 ? { border : false } : classes ;
58
60
}
59
- }
61
+ return { border : false } ;
62
+ } ) ;
60
63
}
0 commit comments