-
Notifications
You must be signed in to change notification settings - Fork 35
/
BooleansColumn.ts
113 lines (93 loc) · 4.56 KB
/
BooleansColumn.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import ArrayColumn, {IArrayColumnDesc} from './ArrayColumn';
import {ISetColumn, ICategoricalColorMappingFunction} from './ICategoricalColumn';
import {IDataRow, DEFAULT_COLOR, ITypeFactory, ECompareValueType} from './interfaces';
import CategoricalColumn from './CategoricalColumn';
import {DEFAULT_CATEGORICAL_COLOR_FUNCTION} from './CategoricalColorMappingFunction';
import ValueColumn, {dataLoaded} from './ValueColumn';
import Column, {labelChanged, metaDataChanged, dirty, dirtyHeader, dirtyValues, rendererTypeChanged, groupRendererChanged, summaryRendererChanged, visibilityChanged, widthChanged, dirtyCaches} from './Column';
import {IEventListener} from '../internal';
import {chooseUIntByDataLength, integrateDefaults} from './internal';
import {toCategory} from './internalCategorical';
import {toolbar} from './annotations';
export declare type IBooleansColumnDesc = IArrayColumnDesc<boolean>;
/**
* emitted when the color mapping property changes
* @asMemberOf BooleansColumn
* @event
*/
export declare function colorMappingChanged_BCS(previous: ICategoricalColorMappingFunction, current: ICategoricalColorMappingFunction): void;
@toolbar('rename', 'clone', 'sort', 'sortBy')
export default class BooleansColumn extends ArrayColumn<boolean> implements ISetColumn {
static readonly EVENT_COLOR_MAPPING_CHANGED = CategoricalColumn.EVENT_COLOR_MAPPING_CHANGED;
private colorMapping: ICategoricalColorMappingFunction;
constructor(id: string, desc: Readonly<IBooleansColumnDesc>) {
super(id, integrateDefaults(desc, {
renderer: 'upset'
}));
this.colorMapping = DEFAULT_CATEGORICAL_COLOR_FUNCTION;
}
get categories() {
return this.labels.map((d, i) => toCategory(d, i));
}
getSet(row: IDataRow) {
const vs = this.getValues(row);
return new Set(this.categories.filter((_, i) => vs[i]));
}
toCompareValue(row: IDataRow) {
const v = this.getValue(row);
if (v == null) {
return NaN;
}
return v.reduce((a, b) => a + (b ? 1 : 0), 0);
}
toCompareValueType(): ECompareValueType {
return chooseUIntByDataLength(this.dataLength);
}
getCategories(row: IDataRow) {
const categories = this.categories;
return super.getValues(row).map((v, i) => {
return v ? categories[i]! : null;
});
}
iterCategory(row: IDataRow) {
return this.getCategories(row);
}
getColors(row: IDataRow) {
return this.getCategories(row).map((d) => d ? this.colorMapping.apply(d) : DEFAULT_COLOR);
}
protected createEventList() {
return super.createEventList().concat([BooleansColumn.EVENT_COLOR_MAPPING_CHANGED]);
}
on(type: typeof BooleansColumn.EVENT_COLOR_MAPPING_CHANGED, listener: typeof colorMappingChanged_BCS | null): this;
on(type: typeof ValueColumn.EVENT_DATA_LOADED, listener: typeof dataLoaded | null): this;
on(type: typeof Column.EVENT_WIDTH_CHANGED, listener: typeof widthChanged | null): this;
on(type: typeof Column.EVENT_LABEL_CHANGED, listener: typeof labelChanged | null): this;
on(type: typeof Column.EVENT_METADATA_CHANGED, listener: typeof metaDataChanged | null): this;
on(type: typeof Column.EVENT_DIRTY, listener: typeof dirty | null): this;
on(type: typeof Column.EVENT_DIRTY_HEADER, listener: typeof dirtyHeader | null): this;
on(type: typeof Column.EVENT_DIRTY_VALUES, listener: typeof dirtyValues | null): this;
on(type: typeof Column.EVENT_DIRTY_CACHES, listener: typeof dirtyCaches | null): this;
on(type: typeof Column.EVENT_RENDERER_TYPE_CHANGED, listener: typeof rendererTypeChanged | null): this;
on(type: typeof Column.EVENT_GROUP_RENDERER_TYPE_CHANGED, listener: typeof groupRendererChanged | null): this;
on(type: typeof Column.EVENT_SUMMARY_RENDERER_TYPE_CHANGED, listener: typeof summaryRendererChanged | null): this;
on(type: typeof Column.EVENT_VISIBILITY_CHANGED, listener: typeof visibilityChanged | null): this;
on(type: string | string[], listener: IEventListener | null): this; // required for correct typings in *.d.ts
on(type: string | string[], listener: IEventListener | null): this {
return super.on(<any>type, listener);
}
getColorMapping() {
return this.colorMapping.clone();
}
setColorMapping(mapping: ICategoricalColorMappingFunction) {
return CategoricalColumn.prototype.setColorMapping.call(this, mapping);
}
dump(toDescRef: (desc: any) => any): any {
const r = super.dump(toDescRef);
r.colorMapping = this.colorMapping.toJSON();
return r;
}
restore(dump: any, factory: ITypeFactory) {
super.restore(dump, factory);
this.colorMapping = factory.categoricalColorMappingFunction(dump.colorMapping, this.categories);
}
}