• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

openwisp / netjsongraph.js / 16582217787

28 Jul 2025 10:59PM UTC coverage: 80.832% (+2.0%) from 78.786%
16582217787

push

github

web-flow
[change] Uniform geojson map rendering #395

Closes #395

449 of 599 branches covered (74.96%)

Branch coverage included in aggregate %.

140 of 187 new or added lines in 7 files covered. (74.87%)

4 existing lines in 3 files now uncovered.

795 of 940 relevant lines covered (84.57%)

7.27 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

82.72
/src/js/netjsongraph.update.js
1
import NetJSONGraphUtil from "./netjsongraph.util";
2

3
class NetJSONGraphUpdate extends NetJSONGraphUtil {
4
  /**
5
   * @function
6
   * @name searchElements
7
   * Add search function for new data.
8
   *
9
   * @param  {string}         url      listen url
10
   *
11
   * @this   {object}         NetJSONGraph object
12
   *
13
   * @return {function}       searchFunc
14
   */
15

16
  searchElements(url) {
17
    const self = this;
3✔
18
    const searchHistory = {
3✔
19
      "": {
20
        data: {...self.data},
21
        param: [...self.JSONParam],
22
      },
23
    };
24

25
    window.history.pushState({searchValue: ""}, "");
3✔
26

27
    window.onpopstate = (event) => {
3✔
28
      if (searchHistory[event.state.searchValue]) {
×
29
        self.utils.JSONDataUpdate.call(
×
30
          self,
31
          searchHistory[event.state.searchValue].data,
32
        ).then(() => {
33
          self.JSONParam = searchHistory[event.state.searchValue].param;
×
34
        });
35
      } else {
36
        self.utils.JSONDataUpdate.call(self, url + event.state.searchValue);
×
37
      }
38
    };
39

40
    // eslint-disable-next-line consistent-return
41
    return function searchFunc(key, override = true, isRaw = true) {
3✔
42
      const searchValue = key.trim();
3✔
43

44
      if (
3✔
45
        !window.history.state ||
9✔
46
        (window.history.state &&
47
          window.history.state.searchValue !== searchValue)
48
      ) {
49
        window.history.pushState({searchValue}, "");
2✔
50
        return self.utils.JSONDataUpdate.call(
2✔
51
          self,
52
          url + searchValue,
53
          override,
54
          isRaw,
55
        ).then(() => {
56
          searchHistory[searchValue] = {
2✔
57
            data: {...self.data},
58
            param: [...self.JSONParam],
59
          };
60
        });
61
      }
62
    };
63
  }
64

65
  /**
66
   * @function
67
   * @name JSONDataUpdate
68
   * Callback function executed when data update. Update Information and view.
69
   *
70
   * @param  {object|string}  Data     JSON data or url.
71
   * @param  {boolean}        override If old data need to be overrided? True defaultly. (Attention: Only 'map' render can set it `false`!)
72
   * @param  {boolean}        isRaw    If the data need to deal with the configuration? True defaultly.
73
   *
74
   * @this   {object}         NetJSONGraph object
75
   *
76
   * @returns {object}        promise
77
   */
78

79
  JSONDataUpdate(Data, override = true, isRaw = true) {
8✔
80
    const self = this;
11✔
81
    self.config.onUpdate.call(self);
11✔
82

83
    return self.utils.paginatedDataParse
11✔
84
      .call(self, Data)
85
      .then((JSONData) => {
86
        function update() {
87
          // override data.
88
          if (override) {
9✔
89
            self.JSONParam = [Data];
5✔
90
            self.utils.overrideData(JSONData, self);
5✔
91
          }
92
          // append data.
93
          else {
94
            self.JSONParam.push(Data);
4✔
95
            if (self.config.render === self.utils.mapRender) {
4✔
96
              self.utils.appendData(JSONData, self);
2✔
97
            } else {
98
              self.utils.addData(JSONData, self);
2✔
99
            }
100
          }
101
          // update metadata
102
          if (self.utils.isNetJSON(self.data)) {
3!
103
            self.utils.updateMetadata.call(self);
3✔
104
          }
105
        }
106
        if (isRaw) {
11✔
107
          if (self.utils.isNetJSON(self.data)) {
8!
108
            self.config.prepareData.call(self, JSONData);
8✔
109
          }
110

111
          if (self.config.dealDataByWorker) {
8✔
112
            self.utils.dealDataByWorker.call(
3✔
113
              self,
114
              JSONData,
115
              self.config.dealDataByWorker,
116
              update,
117
            );
118
          } else {
119
            update();
5✔
120
          }
121
        } else {
122
          update();
3✔
123
        }
124

125
        return JSONData;
1✔
126
      })
127
      .catch((error) => {
128
        console.error(error);
10✔
129
      });
130
  }
131

132
  /**
133
   * @function
134
   * @name dealDataByWorker
135
   * Deal JSONData by WebWorker.
136
   *
137
   * @param  {object}    JSONData     NetJSONData
138
   * @param  {string}    workerFile   url
139
   * @param  {function}  callback     override data and render defaultly.
140
   *
141
   * @this   {object}    self        NetJSONGraph object
142
   *
143
   */
144

145
  dealDataByWorker(JSONData, workerFile, callback) {
146
    const worker = new Worker(workerFile);
6✔
147
    const self = this;
6✔
148

149
    worker.postMessage(JSONData);
6✔
150

151
    worker.addEventListener("error", (e) => {
2✔
152
      console.error(e);
×
153
      console.error("Error in dealing JSONData!");
×
154
    });
155
    worker.addEventListener("message", (e) => {
2✔
156
      if (callback) {
2✔
157
        callback();
1✔
158
      } else {
159
        self.utils.overrideData(e.data, self);
1✔
NEW
160
        if (self.utils.isNetJSON(self.data)) {
×
161
          self.utils.updateMetadata.call(self);
×
162
        }
163
      }
164
    });
165
  }
166

167
  /**
168
   * @function
169
   * @name overrideData
170
   * Override old data and render.
171
   *
172
   * @param  {object}         JSONData   Data
173
   * @param  {object}         self      NetJSONGraph object
174
   *
175
   */
176
  overrideData(JSONData, self) {
177
    self.data = JSONData;
6✔
178
    if (!self.utils.isNetJSON(self.data)) {
6✔
179
      self.leaflet.geoJSON.removeFrom(self.leaflet);
1✔
180
    }
181
    self.utils.render();
4✔
182
    self.config.afterUpdate.call(self);
3✔
183
  }
184
}
185

186
export default NetJSONGraphUpdate;
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc