aboutsummaryrefslogtreecommitdiff
path: root/src/client/northstar/dash-fields/HistogramField.ts
blob: 076516977125563679ab93c9887ff191e5a037a0 (plain)
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
import { observable } from "mobx";
import { custom, serializable } from "serializr";
import { ColumnAttributeModel } from "../../../client/northstar/core/attribute/AttributeModel";
import { AttributeTransformationModel } from "../../../client/northstar/core/attribute/AttributeTransformationModel";
import { HistogramOperation } from "../../../client/northstar/operations/HistogramOperation";
import { ObjectField } from "../../../new_fields/ObjectField";
import { CurrentUserUtils } from "../../../server/authentication/models/current_user_utils";
import { OmitKeys } from "../../../Utils";
import { Deserializable } from "../../util/SerializationHelper";
import { Copy, ToScriptString, ToString } from "../../../new_fields/FieldSymbols";

function serialize(field: HistogramField) {
    const obj = OmitKeys(field, ['Links', 'BrushLinks', 'Result', 'BrushColors', 'FilterModels', 'FilterOperand']).omit;
    return obj;
}

function deserialize(jp: any) {
    let X: AttributeTransformationModel | undefined;
    let Y: AttributeTransformationModel | undefined;
    let V: AttributeTransformationModel | undefined;

    const schema = CurrentUserUtils.GetNorthstarSchema(jp.SchemaName);
    if (schema) {
        CurrentUserUtils.GetAllNorthstarColumnAttributes(schema).map(attr => {
            if (attr.displayName === jp.X.AttributeModel.Attribute.DisplayName) {
                X = new AttributeTransformationModel(new ColumnAttributeModel(attr), jp.X.AggregateFunction);
            }
            if (attr.displayName === jp.Y.AttributeModel.Attribute.DisplayName) {
                Y = new AttributeTransformationModel(new ColumnAttributeModel(attr), jp.Y.AggregateFunction);
            }
            if (attr.displayName === jp.V.AttributeModel.Attribute.DisplayName) {
                V = new AttributeTransformationModel(new ColumnAttributeModel(attr), jp.V.AggregateFunction);
            }
        });
        if (X && Y && V) {
            return new HistogramOperation(jp.SchemaName, X, Y, V, jp.Normalization);
        }
    }
    return HistogramOperation.Empty;
}

@Deserializable("histogramField")
export class HistogramField extends ObjectField {
    @serializable(custom(serialize, deserialize)) @observable public readonly HistoOp: HistogramOperation;
    constructor(data?: HistogramOperation) {
        super();
        this.HistoOp = data ? data : HistogramOperation.Empty;
    }

    toString(): string {
        return JSON.stringify(OmitKeys(this.HistoOp, ['Links', 'BrushLinks', 'Result', 'BrushColors', 'FilterModels', 'FilterOperand']).omit);
    }

    [Copy]() {
        // const y = this.HistoOp;
        // const z = this.HistoOp.Copy;
        return new HistogramField(HistogramOperation.Duplicate(this.HistoOp));
    }

    [ToScriptString]() {
        return this.toString();
    }
    [ToString]() {
        return this.toString();
    }
}