Skip to content

Commit 0ae0785

Browse files
feat(StyleClassHelper): add putIfPresent method (#539)
1 parent 0fa2c58 commit 0ae0785

File tree

2 files changed

+51
-8
lines changed

2 files changed

+51
-8
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { StyleClassHelper } from './StyleClassHelper';
2+
3+
describe('StyleClassHelper', () => {
4+
test('add class names', () => {
5+
const helper = StyleClassHelper.of('class1', 'class2');
6+
expect(helper.className).toEqual(`class1 class2`);
7+
});
8+
9+
test('put new classes', () => {
10+
const helper = StyleClassHelper.of('firstClass');
11+
helper.put('secondClass');
12+
expect(helper.className).toEqual(`firstClass secondClass`);
13+
});
14+
15+
test('putIfPresent', () => {
16+
const helper = StyleClassHelper.of('firstClass');
17+
helper.put('secondClass');
18+
helper.putIfPresent('ifPresent1');
19+
helper.putIfPresent('ifPresent2', 'ifPresent3');
20+
helper.putIfPresent(true === false && 'shouldNotBeThere1', 'a' === 'a' && 'ifPresent4');
21+
22+
expect(helper.className).toEqual('firstClass secondClass ifPresent1 ifPresent2 ifPresent3 ifPresent4');
23+
});
24+
25+
test('className, toString and valueOf return same value', () => {
26+
const helper = StyleClassHelper.of('class1', 'class2');
27+
expect(helper.toString()).toEqual(`class1 class2`);
28+
expect(helper.valueOf()).toEqual(`class1 class2`);
29+
expect(helper.className).toEqual(`class1 class2`);
30+
});
31+
});

packages/base/src/styling/StyleClassHelper.ts

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,40 @@
22
* Created by d059190 at 16.03.18
33
*/
44

5-
class StyleClassHelper extends String {
5+
class StyleClassHelper {
66
private classes: string[] = [];
77

88
constructor(...classes: string[]) {
9-
super();
109
this.classes = [...classes];
1110
}
1211

13-
put(...clazz: string[]) {
12+
put(...clazz: string[]): StyleClassHelper {
1413
this.classes.push(...clazz);
1514
return this;
1615
}
1716

18-
valueOf() {
19-
return this.classes.join(' ');
17+
putIfPresent(...clazzes: (string | null | undefined)[]): StyleClassHelper {
18+
for (const clazz of clazzes) {
19+
if (clazz) {
20+
this.classes.push(clazz);
21+
}
22+
}
23+
return this;
24+
}
25+
26+
valueOf(): string {
27+
return this.className;
2028
}
2129

22-
toString() {
23-
return this.valueOf();
30+
toString(): string {
31+
return this.className;
32+
}
33+
34+
get className(): string {
35+
return this.classes.join(' ');
2436
}
2537

26-
static of(...classes: string[]) {
38+
static of(...classes: string[]): StyleClassHelper {
2739
return new StyleClassHelper().put(...classes);
2840
}
2941
}

0 commit comments

Comments
 (0)