Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 72effbbe

Přidáno uživatelem Štěpán Červenka před téměř 4 roky(ů)

Re #8774 - Implementovat pracovní verzi grafů pro jednotku

  • moved graph loading to separate class
  • change range for line charts

Zobrazit rozdíly:

src/app/sensor/components/sensor.component.ts
4 4
import * as moment from 'moment-timezone';
5 5
import {AnalyticsService} from '../../shared/api/endpoints/services/analytics.service';
6 6
import {AggreationModel} from '../../shared/models/aggreation.model';
7
import {GraphLoader} from "../../shared/graph-loading/graphloader";
7 8

  
8 9
declare var require: any
9 10

  
......
42 43
  }
43 44

  
44 45

  
45
  getGraph(sensorId, data, interval) {
46
  /*getGraph(sensorId, data, interval) {
46 47
    let spec = this.getGraphType(sensorId);
47 48
    const vega = require('vega');
48 49
    const vegaTooltip = require('vega-tooltip');
......
54 55

  
55 56
    let handler = new vegaTooltip.Handler();
56 57

  
57
    /*const view = new vega.View(vega.parse(spec), {
58
      renderer: 'canvas',
59
      container: '#view',
60
      hover: 'true'}).runAsync();*/
61

  
62 58
    const loc = vega.locale({
63 59
      "decimal": ",",
64 60
      "thousands": "\u00a0",
......
114 110
    }
115 111

  
116 112

  
117
  }
113
  }*/
118 114

  
119 115
  showGraph() {
120 116
    let agg = 'HOUR';
......
150 146
      to: moment(range[1]).format('yyyy-MM-DD HH:mm:ssZ').slice(0, -3), interval: agg}).subscribe(
151 147
      observations => {
152 148
        if (observations){
153
          this.getGraph(this.sensorId, observations[this.sensorId].data, observations[this.sensorId].interval);
149
          GraphLoader.getGraph(this.sensorId, observations[this.sensorId].data, observations[this.sensorId].interval, "view");
154 150
        } else {
155 151
          //TODO observace null
156 152
        }
src/app/shared/graph-loading/graphloader.ts
1
declare var require: any
2

  
3
export class GraphLoader {
4

  
5

  
6
  static getGraphType(sensorId) {
7
    const lodash = require('lodash/object');
8

  
9
    if (sensorId >= 480000000 && sensorId < 490000000) {
10

  
11
      let rvalue: any = {};
12
      let base = require('/src/vega/base/default.json');
13
      let chart = require('/src/vega/body/barchart.json');
14
      let tooltip = require('/src/vega/tooltip/samm-tooltip.json')
15
      lodash.merge(rvalue, base, chart, tooltip);
16
      return rvalue;
17

  
18
    } else if ((sensorId >= 470020000 && sensorId < 470030000) || (sensorId >= 470060000 && sensorId < 470090000) ||
19
      (sensorId >= 470130000 && sensorId < 470140000) || (sensorId >= 470180000 && sensorId < 470190000)) {
20

  
21
      let rvalue: any = {};
22
      let base = require('/src/vega/base/default.json');
23
      let chart = require('/src/vega/body/windchart.json');
24
      let tooltip = require('/src/vega/tooltip/samm-tooltip.json')
25
      lodash.merge(rvalue, base, chart, tooltip);
26
      return rvalue;
27

  
28
    } else {
29

  
30
      let rvalue: any = {};
31
      let base = require('/src/vega/base/default.json');
32
      let chart = require('/src/vega/body/linechart.json');
33
      let tooltip = require('/src/vega/tooltip/samm-tooltip.json')
34
      lodash.merge(rvalue, base, chart, tooltip);
35
      return rvalue;
36

  
37
    }
38
  }
39

  
40
  static getGraph(sensorId, data, interval, element) {
41
    let spec = this.getGraphType(sensorId);
42
    const vega = require('vega');
43
    const vegaTooltip = require('vega-tooltip');
44
    const config = require('/src/vega/config.json');
45

  
46
    spec.data[0].values = data;
47
    spec.signals[0].value = interval;
48

  
49

  
50
    let handler = new vegaTooltip.Handler();
51

  
52
    const loc = vega.locale({
53
      "decimal": ",",
54
      "thousands": "\u00a0",
55
      "grouping": [3],
56
      "currency": ["", "\u00a0Kč"]
57
    },{
58
      "dateTime": "%A,%e.%B %Y, %X",
59
      "date": "%-d.%-m.%Y",
60
      "time": "%H:%M:%S",
61
      "periods": ["AM", "PM"],
62
      "days": ["neděle", "pondělí", "úterý", "středa", "čvrtek", "pátek", "sobota"],
63
      "shortDays": ["ne.", "po.", "út.", "st.", "čt.", "pá.", "so."],
64
      "months": ["leden", "únor", "březen", "duben", "květen", "červen", "červenec", "srpen", "září", "říjen", "listopad", "prosinec"],
65
      "shortMonths": ["led", "úno", "břez", "dub", "kvě", "čer", "červ", "srp", "zář", "říj", "list", "pros"]
66
    });
67

  
68
    let view = new vega.View(vega.parse(spec, config))
69
      .tooltip(handler.call)
70
      .initialize(element)
71
      .hover()
72
      .locale(loc)
73
      .runAsync();
74

  
75

  
76

  
77
  }
78

  
79
}
src/app/unit/components/unit.component.ts
5 5
import {Sensors} from '../../shared/api/endpoints/models/sensors';
6 6
import {AggreationModel} from '../../shared/models/aggreation.model';
7 7
import * as moment from 'moment-timezone';
8
import {GraphLoader} from "../../shared/graph-loading/graphloader";
8 9

  
9 10
declare var require: any
10 11

  
......
66 67
        //console.log(this.data);
67 68
        var objectKeys = Object.keys(data);
68 69
        for(const key of objectKeys ) {
69
          this.getGraph(key, data[key]["data"], data[key]["interval"]);
70
          let element = this.createView();
71
          GraphLoader.getGraph(key, data[key]["data"], data[key]["interval"], element);
72

  
70 73
        }
71 74
      })
72 75
    ).subscribe();
73 76
  }
74 77

  
75
  getGraph(sensorId, data, interval) {
78
 /* getGraph(sensorId, data, interval) {
76 79
    let spec = this.getGraphType(sensorId);
77 80
    let elementName = this.createView();
78 81
    const vega = require('vega');
......
147 150
    }
148 151

  
149 152

  
150
  }
153
  }*/
151 154

  
152 155
  createView() {
153 156
    let div = document.createElement("div");
src/vega/base/default.json
49 49
        },
50 50
        {
51 51
          "type": "formula",
52
          "expr": "datum[\"dateMinTemp\"] * 1.05",
52
          "expr": "datum[\"maxValueTemp\"] * 1.05",
53 53
          "as": "valueMax"
54 54
        }
55 55
      ]
src/vega/body/linechart.json
37 37
          "name": "yDetail",
38 38
          "type": "linear",
39 39
          "range": [390, 0],
40
          "domain": {"data": "table", "field": "value"},
40
          "domain": {"data": "range", "field": "valueMax"},
41 41
          "nice": true, "zero": true
42 42
        }
43 43
      ],

Také k dispozici: Unified diff