File tree 2 files changed +26
-4
lines changed
2 files changed +26
-4
lines changed Original file line number Diff line number Diff line change @@ -17,4 +17,16 @@ describe('cx', () => {
17
17
expect ( cx ( '' ) ) . toBe ( undefined ) ;
18
18
expect ( cx ( false , undefined , null ) ) . toBe ( undefined ) ;
19
19
} ) ;
20
+
21
+ test ( 'recursively concatenates arrays' , ( ) => {
22
+ expect ( cx ( [ 'class1' , 'class2' ] , [ 'class3' , 'class4' ] ) ) . toBe (
23
+ 'class1 class2 class3 class4'
24
+ ) ;
25
+ expect ( cx ( [ 'class1' , 'class2' ] , false && [ 'class3' , 'class4' ] ) ) . toBe (
26
+ 'class1 class2'
27
+ ) ;
28
+ expect (
29
+ cx ( [ 'class1' , false && 'class2' ] , [ 'class3' , false && 'class4' ] )
30
+ ) . toBe ( 'class1 class3' ) ;
31
+ } ) ;
20
32
} ) ;
Original file line number Diff line number Diff line change 1
- export function cx (
2
- ...classNames : Array < string | number | boolean | undefined | null >
3
- ) {
4
- return classNames . filter ( Boolean ) . join ( ' ' ) || undefined ;
1
+ type ClassValue = string | undefined | boolean | null | number ;
2
+
3
+ export function cx ( ...cssClasses : Array < ClassValue | ClassValue [ ] > ) {
4
+ return (
5
+ cssClasses
6
+ . reduce < ClassValue [ ] > ( ( acc , className ) => {
7
+ if ( Array . isArray ( className ) ) {
8
+ return acc . concat ( className ) ;
9
+ }
10
+ return acc . concat ( [ className ] ) ;
11
+ } , [ ] )
12
+ . filter ( Boolean )
13
+ . join ( ' ' ) || undefined
14
+ ) ;
5
15
}
You can’t perform that action at this time.
0 commit comments