@kepler.gl/utils 3.0.0 → 3.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +14 -10
- package/dist/aggregate-utils.d.ts +0 -3
- package/dist/aggregate-utils.js +0 -75
- package/dist/arrow-data-container.d.ts +0 -54
- package/dist/arrow-data-container.js +0 -360
- package/dist/color-utils.d.ts +0 -51
- package/dist/color-utils.js +0 -161
- package/dist/data-container-interface.d.ts +0 -133
- package/dist/data-container-interface.js +0 -6
- package/dist/data-container-utils.d.ts +0 -30
- package/dist/data-container-utils.js +0 -88
- package/dist/data-row.d.ts +0 -59
- package/dist/data-row.js +0 -126
- package/dist/data-scale-utils.d.ts +0 -23
- package/dist/data-scale-utils.js +0 -62
- package/dist/data-utils.d.ts +0 -103
- package/dist/data-utils.js +0 -502
- package/dist/dataset-utils.d.ts +0 -116
- package/dist/dataset-utils.js +0 -614
- package/dist/dom-to-image.d.ts +0 -73
- package/dist/dom-to-image.js +0 -489
- package/dist/dom-utils.d.ts +0 -23
- package/dist/dom-utils.js +0 -434
- package/dist/effect-utils.d.ts +0 -23
- package/dist/effect-utils.js +0 -196
- package/dist/export-map-html.d.ts +0 -9
- package/dist/export-map-html.js +0 -28
- package/dist/export-utils.d.ts +0 -53
- package/dist/export-utils.js +0 -262
- package/dist/filter-utils.d.ts +0 -326
- package/dist/filter-utils.js +0 -1333
- package/dist/format.d.ts +0 -1
- package/dist/format.js +0 -17
- package/dist/gl-utils.d.ts +0 -1
- package/dist/gl-utils.js +0 -35
- package/dist/h3-utils.d.ts +0 -21
- package/dist/h3-utils.js +0 -81
- package/dist/index.d.ts +0 -36
- package/dist/index.js +0 -772
- package/dist/indexed-data-container.d.ts +0 -34
- package/dist/indexed-data-container.js +0 -254
- package/dist/locale-utils.d.ts +0 -2
- package/dist/locale-utils.js +0 -54
- package/dist/map-info-utils.d.ts +0 -1
- package/dist/map-info-utils.js +0 -15
- package/dist/map-style-utils/mapbox-gl-style-editor.d.ts +0 -65
- package/dist/map-style-utils/mapbox-gl-style-editor.js +0 -218
- package/dist/map-style-utils/mapbox-utils.d.ts +0 -9
- package/dist/map-style-utils/mapbox-utils.js +0 -48
- package/dist/map-utils.d.ts +0 -9
- package/dist/map-utils.js +0 -65
- package/dist/mapbox-utils.d.ts +0 -7
- package/dist/mapbox-utils.js +0 -22
- package/dist/noop.d.ts +0 -1
- package/dist/noop.js +0 -11
- package/dist/notifications-utils.d.ts +0 -42
- package/dist/notifications-utils.js +0 -85
- package/dist/observe-dimensions.d.ts +0 -15
- package/dist/observe-dimensions.js +0 -151
- package/dist/plot.d.ts +0 -6
- package/dist/plot.js +0 -31
- package/dist/projection-utils.d.ts +0 -21
- package/dist/projection-utils.js +0 -100
- package/dist/row-data-container.d.ts +0 -31
- package/dist/row-data-container.js +0 -252
- package/dist/searcher-utils.d.ts +0 -1
- package/dist/searcher-utils.js +0 -28
- package/dist/split-map-utils.d.ts +0 -32
- package/dist/split-map-utils.js +0 -114
- package/dist/time.d.ts +0 -16
- package/dist/time.js +0 -89
- package/dist/utils.d.ts +0 -116
- package/dist/utils.js +0 -305
package/dist/export-utils.js
DELETED
@@ -1,262 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
-
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
6
|
-
value: true
|
7
|
-
});
|
8
|
-
exports.isMSEdge = isMSEdge;
|
9
|
-
exports.getScaleFromImageSize = getScaleFromImageSize;
|
10
|
-
exports.calculateExportImageSize = calculateExportImageSize;
|
11
|
-
exports.convertToPng = convertToPng;
|
12
|
-
exports.dataURItoBlob = dataURItoBlob;
|
13
|
-
exports.downloadFile = downloadFile;
|
14
|
-
exports.exportImage = exportImage;
|
15
|
-
exports.exportToJsonString = exportToJsonString;
|
16
|
-
exports.getMapJSON = getMapJSON;
|
17
|
-
exports.exportJson = exportJson;
|
18
|
-
exports.exportHtml = exportHtml;
|
19
|
-
exports.exportMap = exportMap;
|
20
|
-
exports["default"] = exports.DEFAULT_EXPORT_JSON_SETTINGS = exports.DEFAULT_DATA_NAME = exports.DEFAULT_JSON_NAME = exports.DEFAULT_HTML_NAME = exports.DEFAULT_IMAGE_NAME = void 0;
|
21
|
-
|
22
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
23
|
-
|
24
|
-
var _window = require("global/window");
|
25
|
-
|
26
|
-
var _lodash = _interopRequireDefault(require("lodash.get"));
|
27
|
-
|
28
|
-
var _constants = require("@kepler.gl/constants");
|
29
|
-
|
30
|
-
var _domToImage = _interopRequireDefault(require("./dom-to-image"));
|
31
|
-
|
32
|
-
var _utils = require("./utils");
|
33
|
-
|
34
|
-
var _exportMapHtml = require("./export-map-html");
|
35
|
-
|
36
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
37
|
-
|
38
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
39
|
-
|
40
|
-
/**
|
41
|
-
* Default file names
|
42
|
-
*/
|
43
|
-
var DEFAULT_IMAGE_NAME = 'kepler.gl.png';
|
44
|
-
exports.DEFAULT_IMAGE_NAME = DEFAULT_IMAGE_NAME;
|
45
|
-
var DEFAULT_HTML_NAME = 'kepler.gl.html';
|
46
|
-
exports.DEFAULT_HTML_NAME = DEFAULT_HTML_NAME;
|
47
|
-
var DEFAULT_JSON_NAME = 'kepler.gl.json';
|
48
|
-
exports.DEFAULT_JSON_NAME = DEFAULT_JSON_NAME;
|
49
|
-
var DEFAULT_DATA_NAME = 'kepler.gl';
|
50
|
-
/**
|
51
|
-
* Default json export settings
|
52
|
-
*/
|
53
|
-
|
54
|
-
exports.DEFAULT_DATA_NAME = DEFAULT_DATA_NAME;
|
55
|
-
var DEFAULT_EXPORT_JSON_SETTINGS = {
|
56
|
-
hasData: true
|
57
|
-
};
|
58
|
-
exports.DEFAULT_EXPORT_JSON_SETTINGS = DEFAULT_EXPORT_JSON_SETTINGS;
|
59
|
-
var defaultResolution = _constants.OneXResolutionOption;
|
60
|
-
var defaultRatio = _constants.FourByThreeRatioOption;
|
61
|
-
|
62
|
-
function isMSEdge(window) {
|
63
|
-
// @ts-ignore msSaveOrOpenBlob was a proprietary addition to the Navigator object, added by Microsoft for Internet Explorer.
|
64
|
-
return Boolean(window.navigator && window.navigator.msSaveOrOpenBlob);
|
65
|
-
}
|
66
|
-
|
67
|
-
function getScaleFromImageSize() {
|
68
|
-
var imageW = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
69
|
-
var imageH = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
70
|
-
var mapW = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
71
|
-
var mapH = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
|
72
|
-
|
73
|
-
if ([imageW, imageH, mapW, mapH].some(function (d) {
|
74
|
-
return d <= 0;
|
75
|
-
})) {
|
76
|
-
return 1;
|
77
|
-
}
|
78
|
-
|
79
|
-
var base = imageW / imageH > 1 ? imageW : imageH;
|
80
|
-
var mapBase = imageW / imageH > 1 ? mapW : mapH;
|
81
|
-
return base / mapBase;
|
82
|
-
}
|
83
|
-
|
84
|
-
function calculateExportImageSize(_ref) {
|
85
|
-
var mapW = _ref.mapW,
|
86
|
-
mapH = _ref.mapH,
|
87
|
-
ratio = _ref.ratio,
|
88
|
-
resolution = _ref.resolution;
|
89
|
-
|
90
|
-
if (mapW <= 0 || mapH <= 0) {
|
91
|
-
return null;
|
92
|
-
}
|
93
|
-
|
94
|
-
var ratioItem = _constants.EXPORT_IMG_RATIO_OPTIONS.find(function (op) {
|
95
|
-
return op.id === ratio;
|
96
|
-
}) || defaultRatio;
|
97
|
-
var resolutionItem = _constants.EXPORT_IMG_RESOLUTION_OPTIONS.find(function (op) {
|
98
|
-
return op.id === resolution;
|
99
|
-
}) || defaultResolution;
|
100
|
-
|
101
|
-
var _resolutionItem$getSi = resolutionItem.getSize(mapW, mapH),
|
102
|
-
scaledWidth = _resolutionItem$getSi.width,
|
103
|
-
scaledHeight = _resolutionItem$getSi.height;
|
104
|
-
|
105
|
-
var _ratioItem$getSize = ratioItem.getSize(scaledWidth, scaledHeight),
|
106
|
-
imageW = _ratioItem$getSize.width,
|
107
|
-
imageH = _ratioItem$getSize.height;
|
108
|
-
|
109
|
-
var _ref2 = ratioItem.id === _constants.EXPORT_IMG_RATIOS.CUSTOM ? {
|
110
|
-
scale: undefined
|
111
|
-
} : resolutionItem,
|
112
|
-
scale = _ref2.scale;
|
113
|
-
|
114
|
-
return {
|
115
|
-
scale: scale,
|
116
|
-
imageW: imageW,
|
117
|
-
imageH: imageH
|
118
|
-
};
|
119
|
-
}
|
120
|
-
|
121
|
-
function convertToPng(sourceElem, options) {
|
122
|
-
return _domToImage["default"].toPng(sourceElem, options);
|
123
|
-
}
|
124
|
-
|
125
|
-
function dataURItoBlob(dataURI) {
|
126
|
-
var binary = (0, _window.atob)(dataURI.split(',')[1]); // separate out the mime component
|
127
|
-
|
128
|
-
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; // write the bytes of the string to an ArrayBuffer
|
129
|
-
|
130
|
-
var ab = new _window.ArrayBuffer(binary.length); // create a view into the buffer
|
131
|
-
|
132
|
-
var ia = new _window.Uint8Array(ab);
|
133
|
-
|
134
|
-
for (var i = 0; i < binary.length; i++) {
|
135
|
-
ia[i] = binary.charCodeAt(i);
|
136
|
-
}
|
137
|
-
|
138
|
-
return new _window.Blob([ab], {
|
139
|
-
type: mimeString
|
140
|
-
});
|
141
|
-
}
|
142
|
-
|
143
|
-
function downloadFile(fileBlob, fileName) {
|
144
|
-
if (isMSEdge(window)) {
|
145
|
-
window.navigator.msSaveOrOpenBlob(fileBlob, fileName);
|
146
|
-
} else {
|
147
|
-
var url = _window.URL.createObjectURL(fileBlob);
|
148
|
-
|
149
|
-
var link = _window.document.createElement('a');
|
150
|
-
|
151
|
-
link.setAttribute('href', url);
|
152
|
-
link.setAttribute('download', fileName);
|
153
|
-
|
154
|
-
_window.document.body.appendChild(link); // in some cases where maps are embedded, e.g. need to
|
155
|
-
// create and dispatch an event so that the browser downloads
|
156
|
-
// the file instead of navigating to the url
|
157
|
-
|
158
|
-
|
159
|
-
var evt = new MouseEvent('click', {
|
160
|
-
view: window,
|
161
|
-
bubbles: false,
|
162
|
-
cancelable: true
|
163
|
-
});
|
164
|
-
link.dispatchEvent(evt);
|
165
|
-
|
166
|
-
_window.document.body.removeChild(link);
|
167
|
-
|
168
|
-
_window.URL.revokeObjectURL(url);
|
169
|
-
}
|
170
|
-
}
|
171
|
-
/**
|
172
|
-
* Whether color is rgb
|
173
|
-
* @returns
|
174
|
-
*/
|
175
|
-
|
176
|
-
|
177
|
-
function exportImage(uiStateExportImage) {
|
178
|
-
var filename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_IMAGE_NAME;
|
179
|
-
var imageDataUri = uiStateExportImage.imageDataUri;
|
180
|
-
|
181
|
-
if (imageDataUri) {
|
182
|
-
var file = dataURItoBlob(imageDataUri);
|
183
|
-
downloadFile(file, filename);
|
184
|
-
}
|
185
|
-
}
|
186
|
-
|
187
|
-
function exportToJsonString(data) {
|
188
|
-
try {
|
189
|
-
return JSON.stringify(data);
|
190
|
-
} catch (e) {
|
191
|
-
if (e instanceof TypeError) return e.message; // Non-Standard Error Object Property
|
192
|
-
|
193
|
-
return e.description;
|
194
|
-
}
|
195
|
-
}
|
196
|
-
|
197
|
-
function getMapJSON(state) {
|
198
|
-
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_EXPORT_JSON_SETTINGS;
|
199
|
-
var hasData = options.hasData;
|
200
|
-
var schema = state.visState.schema;
|
201
|
-
|
202
|
-
if (!hasData) {
|
203
|
-
return schema.getConfigToSave(state);
|
204
|
-
}
|
205
|
-
|
206
|
-
var mapToSave = schema.save(state); // add file name if title is not provided
|
207
|
-
|
208
|
-
var title = (0, _lodash["default"])(mapToSave, ['info', 'title']);
|
209
|
-
|
210
|
-
if (!title || !title.length) {
|
211
|
-
mapToSave = (0, _utils.set)(['info', 'title'], "keplergl_".concat((0, _utils.generateHashId)(6)), mapToSave);
|
212
|
-
}
|
213
|
-
|
214
|
-
return mapToSave;
|
215
|
-
}
|
216
|
-
|
217
|
-
function exportJson(state) {
|
218
|
-
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
219
|
-
var map = getMapJSON(state, options);
|
220
|
-
map.info.source = 'kepler.gl';
|
221
|
-
var fileBlob = new _window.Blob([exportToJsonString(map)], {
|
222
|
-
type: 'application/json'
|
223
|
-
});
|
224
|
-
var fileName = state.appName ? "".concat(state.appName, ".json") : DEFAULT_JSON_NAME;
|
225
|
-
downloadFile(fileBlob, fileName);
|
226
|
-
}
|
227
|
-
|
228
|
-
function exportHtml(state, options) {
|
229
|
-
var userMapboxToken = options.userMapboxToken,
|
230
|
-
exportMapboxAccessToken = options.exportMapboxAccessToken,
|
231
|
-
mode = options.mode;
|
232
|
-
|
233
|
-
var data = _objectSpread(_objectSpread({}, getMapJSON(state)), {}, {
|
234
|
-
mapboxApiAccessToken: (userMapboxToken || '') !== '' ? userMapboxToken : exportMapboxAccessToken,
|
235
|
-
mode: mode
|
236
|
-
});
|
237
|
-
|
238
|
-
var fileBlob = new _window.Blob([(0, _exportMapHtml.exportMapToHTML)(data)], {
|
239
|
-
type: 'text/html'
|
240
|
-
});
|
241
|
-
downloadFile(fileBlob, state.appName ? "".concat(state.appName, ".html") : DEFAULT_HTML_NAME);
|
242
|
-
}
|
243
|
-
|
244
|
-
function exportMap(state) {
|
245
|
-
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_EXPORT_JSON_SETTINGS;
|
246
|
-
var imageDataUri = state.uiState.exportImage.imageDataUri;
|
247
|
-
var thumbnail = imageDataUri ? dataURItoBlob(imageDataUri) : null;
|
248
|
-
var mapToSave = getMapJSON(state, options);
|
249
|
-
return {
|
250
|
-
map: mapToSave,
|
251
|
-
thumbnail: thumbnail
|
252
|
-
};
|
253
|
-
}
|
254
|
-
|
255
|
-
var exporters = {
|
256
|
-
exportImage: exportImage,
|
257
|
-
exportJson: exportJson,
|
258
|
-
exportHtml: exportHtml
|
259
|
-
};
|
260
|
-
var _default = exporters;
|
261
|
-
exports["default"] = _default;
|
262
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9leHBvcnQtdXRpbHMudHMiXSwibmFtZXMiOlsiREVGQVVMVF9JTUFHRV9OQU1FIiwiREVGQVVMVF9IVE1MX05BTUUiLCJERUZBVUxUX0pTT05fTkFNRSIsIkRFRkFVTFRfREFUQV9OQU1FIiwiREVGQVVMVF9FWFBPUlRfSlNPTl9TRVRUSU5HUyIsImhhc0RhdGEiLCJkZWZhdWx0UmVzb2x1dGlvbiIsIk9uZVhSZXNvbHV0aW9uT3B0aW9uIiwiZGVmYXVsdFJhdGlvIiwiRm91ckJ5VGhyZWVSYXRpb09wdGlvbiIsImlzTVNFZGdlIiwid2luZG93IiwiQm9vbGVhbiIsIm5hdmlnYXRvciIsIm1zU2F2ZU9yT3BlbkJsb2IiLCJnZXRTY2FsZUZyb21JbWFnZVNpemUiLCJpbWFnZVciLCJpbWFnZUgiLCJtYXBXIiwibWFwSCIsInNvbWUiLCJkIiwiYmFzZSIsIm1hcEJhc2UiLCJjYWxjdWxhdGVFeHBvcnRJbWFnZVNpemUiLCJyYXRpbyIsInJlc29sdXRpb24iLCJyYXRpb0l0ZW0iLCJFWFBPUlRfSU1HX1JBVElPX09QVElPTlMiLCJmaW5kIiwib3AiLCJpZCIsInJlc29sdXRpb25JdGVtIiwiRVhQT1JUX0lNR19SRVNPTFVUSU9OX09QVElPTlMiLCJnZXRTaXplIiwic2NhbGVkV2lkdGgiLCJ3aWR0aCIsInNjYWxlZEhlaWdodCIsImhlaWdodCIsIkVYUE9SVF9JTUdfUkFUSU9TIiwiQ1VTVE9NIiwic2NhbGUiLCJ1bmRlZmluZWQiLCJjb252ZXJ0VG9QbmciLCJzb3VyY2VFbGVtIiwib3B0aW9ucyIsImRvbXRvaW1hZ2UiLCJ0b1BuZyIsImRhdGFVUkl0b0Jsb2IiLCJkYXRhVVJJIiwiYmluYXJ5Iiwic3BsaXQiLCJtaW1lU3RyaW5nIiwiYWIiLCJBcnJheUJ1ZmZlciIsImxlbmd0aCIsImlhIiwiVWludDhBcnJheSIsImkiLCJjaGFyQ29kZUF0IiwiQmxvYiIsInR5cGUiLCJkb3dubG9hZEZpbGUiLCJmaWxlQmxvYiIsImZpbGVOYW1lIiwidXJsIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwibGluayIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImV2dCIsIk1vdXNlRXZlbnQiLCJ2aWV3IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJkaXNwYXRjaEV2ZW50IiwicmVtb3ZlQ2hpbGQiLCJyZXZva2VPYmplY3RVUkwiLCJleHBvcnRJbWFnZSIsInVpU3RhdGVFeHBvcnRJbWFnZSIsImZpbGVuYW1lIiwiaW1hZ2VEYXRhVXJpIiwiZmlsZSIsImV4cG9ydFRvSnNvblN0cmluZyIsImRhdGEiLCJKU09OIiwic3RyaW5naWZ5IiwiZSIsIlR5cGVFcnJvciIsIm1lc3NhZ2UiLCJkZXNjcmlwdGlvbiIsImdldE1hcEpTT04iLCJzdGF0ZSIsInNjaGVtYSIsInZpc1N0YXRlIiwiZ2V0Q29uZmlnVG9TYXZlIiwibWFwVG9TYXZlIiwic2F2ZSIsInRpdGxlIiwiZXhwb3J0SnNvbiIsIm1hcCIsImluZm8iLCJzb3VyY2UiLCJhcHBOYW1lIiwiZXhwb3J0SHRtbCIsInVzZXJNYXBib3hUb2tlbiIsImV4cG9ydE1hcGJveEFjY2Vzc1Rva2VuIiwibW9kZSIsIm1hcGJveEFwaUFjY2Vzc1Rva2VuIiwiZXhwb3J0TWFwIiwidWlTdGF0ZSIsInRodW1ibmFpbCIsImV4cG9ydGVycyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQTs7QUFDQTs7QUFFQTs7QUFTQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ08sSUFBTUEsa0JBQWtCLEdBQUcsZUFBM0I7O0FBQ0EsSUFBTUMsaUJBQWlCLEdBQUcsZ0JBQTFCOztBQUNBLElBQU1DLGlCQUFpQixHQUFHLGdCQUExQjs7QUFDQSxJQUFNQyxpQkFBaUIsR0FBRyxXQUExQjtBQUVQO0FBQ0E7QUFDQTs7O0FBQ08sSUFBTUMsNEJBQTRCLEdBQUc7QUFDMUNDLEVBQUFBLE9BQU8sRUFBRTtBQURpQyxDQUFyQzs7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RCxFQUFRbkQsT0FBUixDQUE1QjtBQUVBLFNBQU87QUFDTDJELElBQUFBLEdBQUcsRUFBRUosU0FEQTtBQUVMZSxJQUFBQSxTQUFTLEVBQVRBO0FBRkssR0FBUDtBQUlEOztBQUVELElBQU1DLFNBQVMsR0FBRztBQUNoQmxDLEVBQUFBLFdBQVcsRUFBWEEsV0FEZ0I7QUFFaEJxQixFQUFBQSxVQUFVLEVBQVZBLFVBRmdCO0FBR2hCSyxFQUFBQSxVQUFVLEVBQVZBO0FBSGdCLENBQWxCO2VBTWVRLFMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0Jsb2IsIFVSTCwgYXRvYiwgVWludDhBcnJheSwgQXJyYXlCdWZmZXIsIGRvY3VtZW50fSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLmdldCc7XG5cbmltcG9ydCB7XG4gIEVYUE9SVF9JTUdfUkVTT0xVVElPTl9PUFRJT05TLFxuICBFWFBPUlRfSU1HX1JBVElPX09QVElPTlMsXG4gIFJFU09MVVRJT05TLFxuICBFWFBPUlRfSU1HX1JBVElPUyxcbiAgRm91ckJ5VGhyZWVSYXRpb09wdGlvbixcbiAgT25lWFJlc29sdXRpb25PcHRpb24sXG4gIEV4cG9ydEltYWdlXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCBkb210b2ltYWdlIGZyb20gJy4vZG9tLXRvLWltYWdlJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHNldH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge2V4cG9ydE1hcFRvSFRNTH0gZnJvbSAnLi9leHBvcnQtbWFwLWh0bWwnO1xuXG4vKipcbiAqIERlZmF1bHQgZmlsZSBuYW1lc1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTUFHRV9OQU1FID0gJ2tlcGxlci5nbC5wbmcnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSFRNTF9OQU1FID0gJ2tlcGxlci5nbC5odG1sJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0pTT05fTkFNRSA9ICdrZXBsZXIuZ2wuanNvbic7XG5leHBvcnQgY29uc3QgREVGQVVMVF9EQVRBX05BTUUgPSAna2VwbGVyLmdsJztcblxuLyoqXG4gKiBEZWZhdWx0IGpzb24gZXhwb3J0IHNldHRpbmdzXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9KU09OX1NFVFRJTkdTID0ge1xuICBoYXNEYXRhOiB0cnVlXG59O1xuXG5jb25zdCBkZWZhdWx0UmVzb2x1dGlvbiA9IE9uZVhSZXNvbHV0aW9uT3B0aW9uO1xuXG5jb25zdCBkZWZhdWx0UmF0aW8gPSBGb3VyQnlUaHJlZVJhdGlvT3B0aW9uO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNNU0VkZ2Uod2luZG93OiBXaW5kb3cpOiBib29sZWFuIHtcbiAgLy8gQHRzLWlnbm9yZSBtc1NhdmVPck9wZW5CbG9iIHdhcyBhIHByb3ByaWV0YXJ5IGFkZGl0aW9uIHRvIHRoZSBOYXZpZ2F0b3Igb2JqZWN0LCBhZGRlZCBieSBNaWNyb3NvZnQgZm9yIEludGVybmV0IEV4cGxvcmVyLlxuICByZXR1cm4gQm9vbGVhbih3aW5kb3cubmF2aWdhdG9yICYmIHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2FsZUZyb21JbWFnZVNpemUoaW1hZ2VXID0gMCwgaW1hZ2VIID0gMCwgbWFwVyA9IDAsIG1hcEggPSAwKSB7XG4gIGlmIChbaW1hZ2VXLCBpbWFnZUgsIG1hcFcsIG1hcEhdLnNvbWUoZCA9PiBkIDw9IDApKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBjb25zdCBiYXNlID0gaW1hZ2VXIC8gaW1hZ2VIID4gMSA/IGltYWdlVyA6IGltYWdlSDtcbiAgY29uc3QgbWFwQmFzZSA9IGltYWdlVyAvIGltYWdlSCA+IDEgPyBtYXBXIDogbWFwSDtcbiAgcmV0dXJuIGJhc2UgLyBtYXBCYXNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlRXhwb3J0SW1hZ2VTaXplKHtcbiAgbWFwVyxcbiAgbWFwSCxcbiAgcmF0aW8sXG4gIHJlc29sdXRpb25cbn06IHtcbiAgbWFwVzogbnVtYmVyO1xuICBtYXBIOiBudW1iZXI7XG4gIHJhdGlvOiBrZXlvZiB0eXBlb2YgRVhQT1JUX0lNR19SQVRJT1M7XG4gIHJlc29sdXRpb246IGtleW9mIHR5cGVvZiBSRVNPTFVUSU9OUztcbn0pIHtcbiAgaWYgKG1hcFcgPD0gMCB8fCBtYXBIIDw9IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHJhdGlvSXRlbSA9IEVYUE9SVF9JTUdfUkFUSU9fT1BUSU9OUy5maW5kKG9wID0+IG9wLmlkID09PSByYXRpbykgfHwgZGVmYXVsdFJhdGlvO1xuXG4gIGNvbnN0IHJlc29sdXRpb25JdGVtID1cbiAgICBFWFBPUlRfSU1HX1JFU09MVVRJT05fT1BUSU9OUy5maW5kKG9wID0+IG9wLmlkID09PSByZXNvbHV0aW9uKSB8fCBkZWZhdWx0UmVzb2x1dGlvbjtcblxuICBjb25zdCB7d2lkdGg6IHNjYWxlZFdpZHRoLCBoZWlnaHQ6IHNjYWxlZEhlaWdodH0gPSByZXNvbHV0aW9uSXRlbS5nZXRTaXplKG1hcFcsIG1hcEgpO1xuXG4gIGNvbnN0IHt3aWR0aDogaW1hZ2VXLCBoZWlnaHQ6IGltYWdlSH0gPSByYXRpb0l0ZW0uZ2V0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTtcblxuICBjb25zdCB7c2NhbGV9ID0gcmF0aW9JdGVtLmlkID09PSBFWFBPUlRfSU1HX1JBVElPUy5DVVNUT00gPyB7c2NhbGU6IHVuZGVmaW5lZH0gOiByZXNvbHV0aW9uSXRlbTtcblxuICByZXR1cm4ge1xuICAgIHNjYWxlLFxuICAgIGltYWdlVyxcbiAgICBpbWFnZUhcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb1BuZyhzb3VyY2VFbGVtOiBIVE1MRWxlbWVudCwgb3B0aW9ucykge1xuICByZXR1cm4gZG9tdG9pbWFnZS50b1BuZyhzb3VyY2VFbGVtLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGFVUkl0b0Jsb2IoZGF0YVVSSTogc3RyaW5nKTogQmxvYiB7XG4gIGNvbnN0IGJpbmFyeSA9IGF0b2IoZGF0YVVSSS5zcGxpdCgnLCcpWzFdKTtcblxuICAvLyBzZXBhcmF0ZSBvdXQgdGhlIG1pbWUgY29tcG9uZW50XG4gIGNvbnN0IG1pbWVTdHJpbmcgPSBkYXRhVVJJXG4gICAgLnNwbGl0KCcsJylbMF1cbiAgICAuc3BsaXQoJzonKVsxXVxuICAgIC5zcGxpdCgnOycpWzBdO1xuXG4gIC8vIHdyaXRlIHRoZSBieXRlcyBvZiB0aGUgc3RyaW5nIHRvIGFuIEFycmF5QnVmZmVyXG4gIGNvbnN0IGFiID0gbmV3IEFycmF5QnVmZmVyKGJpbmFyeS5sZW5ndGgpO1xuXG4gIC8vIGNyZWF0ZSBhIHZpZXcgaW50byB0aGUgYnVmZmVyXG4gIGNvbnN0IGlhID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYmluYXJ5Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWFbaV0gPSBiaW5hcnkuY2hhckNvZGVBdChpKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgQmxvYihbYWJdLCB7dHlwZTogbWltZVN0cmluZ30pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRGaWxlKGZpbGVCbG9iOiBCbG9iLCBmaWxlTmFtZTogc3RyaW5nKSB7XG4gIGlmIChpc01TRWRnZSh3aW5kb3cpKSB7XG4gICAgKHdpbmRvdy5uYXZpZ2F0b3IgYXMgYW55KS5tc1NhdmVPck9wZW5CbG9iKGZpbGVCbG9iLCBmaWxlTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlQmxvYik7XG5cbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKTtcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlTmFtZSk7XG5cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgIC8vIGluIHNvbWUgY2FzZXMgd2hlcmUgbWFwcyBhcmUgZW1iZWRkZWQsIGUuZy4gbmVlZCB0b1xuICAgIC8vIGNyZWF0ZSBhbmQgZGlzcGF0Y2ggYW4gZXZlbnQgc28gdGhhdCB0aGUgYnJvd3NlciBkb3dubG9hZHNcbiAgICAvLyB0aGUgZmlsZSBpbnN0ZWFkIG9mIG5hdmlnYXRpbmcgdG8gdGhlIHVybFxuICAgIGNvbnN0IGV2dCA9IG5ldyBNb3VzZUV2ZW50KCdjbGljaycsIHtcbiAgICAgIHZpZXc6IHdpbmRvdyxcbiAgICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGxpbmsuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICB9XG59XG5cbi8qKlxuICogV2hldGhlciBjb2xvciBpcyByZ2JcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRJbWFnZSh1aVN0YXRlRXhwb3J0SW1hZ2U6IEV4cG9ydEltYWdlLCBmaWxlbmFtZSA9IERFRkFVTFRfSU1BR0VfTkFNRSkge1xuICBjb25zdCB7aW1hZ2VEYXRhVXJpfSA9IHVpU3RhdGVFeHBvcnRJbWFnZTtcbiAgaWYgKGltYWdlRGF0YVVyaSkge1xuICAgIGNvbnN0IGZpbGUgPSBkYXRhVVJJdG9CbG9iKGltYWdlRGF0YVVyaSk7XG4gICAgZG93bmxvYWRGaWxlKGZpbGUsIGZpbGVuYW1lKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0VG9Kc29uU3RyaW5nKGRhdGEpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIFR5cGVFcnJvcikgcmV0dXJuIGUubWVzc2FnZTtcbiAgICAvLyBOb24tU3RhbmRhcmQgRXJyb3IgT2JqZWN0IFByb3BlcnR5XG4gICAgcmV0dXJuIChlIGFzIGFueSkuZGVzY3JpcHRpb247XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcEpTT04oc3RhdGUsIG9wdGlvbnMgPSBERUZBVUxUX0VYUE9SVF9KU09OX1NFVFRJTkdTKSB7XG4gIGNvbnN0IHtoYXNEYXRhfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHNjaGVtYSA9IHN0YXRlLnZpc1N0YXRlLnNjaGVtYTtcblxuICBpZiAoIWhhc0RhdGEpIHtcbiAgICByZXR1cm4gc2NoZW1hLmdldENvbmZpZ1RvU2F2ZShzdGF0ZSk7XG4gIH1cblxuICBsZXQgbWFwVG9TYXZlID0gc2NoZW1hLnNhdmUoc3RhdGUpO1xuICAvLyBhZGQgZmlsZSBuYW1lIGlmIHRpdGxlIGlzIG5vdCBwcm92aWRlZFxuICBjb25zdCB0aXRsZSA9IGdldChtYXBUb1NhdmUsIFsnaW5mbycsICd0aXRsZSddKTtcbiAgaWYgKCF0aXRsZSB8fCAhdGl0bGUubGVuZ3RoKSB7XG4gICAgbWFwVG9TYXZlID0gc2V0KFsnaW5mbycsICd0aXRsZSddLCBga2VwbGVyZ2xfJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLCBtYXBUb1NhdmUpO1xuICB9XG4gIHJldHVybiBtYXBUb1NhdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRKc29uKHN0YXRlLCBvcHRpb25zOiBhbnkgPSB7fSkge1xuICBjb25zdCBtYXAgPSBnZXRNYXBKU09OKHN0YXRlLCBvcHRpb25zKTtcbiAgbWFwLmluZm8uc291cmNlID0gJ2tlcGxlci5nbCc7XG4gIGNvbnN0IGZpbGVCbG9iID0gbmV3IEJsb2IoW2V4cG9ydFRvSnNvblN0cmluZyhtYXApXSwge3R5cGU6ICdhcHBsaWNhdGlvbi9qc29uJ30pO1xuICBjb25zdCBmaWxlTmFtZSA9IHN0YXRlLmFwcE5hbWUgPyBgJHtzdGF0ZS5hcHBOYW1lfS5qc29uYCA6IERFRkFVTFRfSlNPTl9OQU1FO1xuICBkb3dubG9hZEZpbGUoZmlsZUJsb2IsIGZpbGVOYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydEh0bWwoc3RhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3Qge3VzZXJNYXBib3hUb2tlbiwgZXhwb3J0TWFwYm94QWNjZXNzVG9rZW4sIG1vZGV9ID0gb3B0aW9ucztcblxuICBjb25zdCBkYXRhID0ge1xuICAgIC4uLmdldE1hcEpTT04oc3RhdGUpLFxuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuOlxuICAgICAgKHVzZXJNYXBib3hUb2tlbiB8fCAnJykgIT09ICcnID8gdXNlck1hcGJveFRva2VuIDogZXhwb3J0TWFwYm94QWNjZXNzVG9rZW4sXG4gICAgbW9kZVxuICB9O1xuXG4gIGNvbnN0IGZpbGVCbG9iID0gbmV3IEJsb2IoW2V4cG9ydE1hcFRvSFRNTChkYXRhKV0sIHt0eXBlOiAndGV4dC9odG1sJ30pO1xuICBkb3dubG9hZEZpbGUoZmlsZUJsb2IsIHN0YXRlLmFwcE5hbWUgPyBgJHtzdGF0ZS5hcHBOYW1lfS5odG1sYCA6IERFRkFVTFRfSFRNTF9OQU1FKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydE1hcChzdGF0ZSwgb3B0aW9ucyA9IERFRkFVTFRfRVhQT1JUX0pTT05fU0VUVElOR1MpIHtcbiAgY29uc3Qge2ltYWdlRGF0YVVyaX0gPSBzdGF0ZS51aVN0YXRlLmV4cG9ydEltYWdlO1xuICBjb25zdCB0aHVtYm5haWw6IEJsb2IgfCBudWxsID0gaW1hZ2VEYXRhVXJpID8gZGF0YVVSSXRvQmxvYihpbWFnZURhdGFVcmkpIDogbnVsbDtcbiAgY29uc3QgbWFwVG9TYXZlID0gZ2V0TWFwSlNPTihzdGF0ZSwgb3B0aW9ucyk7XG5cbiAgcmV0dXJuIHtcbiAgICBtYXA6IG1hcFRvU2F2ZSxcbiAgICB0aHVtYm5haWxcbiAgfTtcbn1cblxuY29uc3QgZXhwb3J0ZXJzID0ge1xuICBleHBvcnRJbWFnZSxcbiAgZXhwb3J0SnNvbixcbiAgZXhwb3J0SHRtbFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZXhwb3J0ZXJzO1xuIl19
|
package/dist/filter-utils.d.ts
DELETED
@@ -1,326 +0,0 @@
|
|
1
|
-
import { VisState } from '@kepler.gl/schemas';
|
2
|
-
import { Millisecond, Field, ParsedFilter, Filter, FilterBase, PolygonFilter, FieldDomain, TimeRangeFieldDomain, HistogramBin, Feature, FeatureValue, LineChart, TimeRangeFilter, RangeFieldDomain, FilterDatasetOpt, FilterRecord } from '@kepler.gl/types';
|
3
|
-
import { DataContainerInterface } from './data-container-interface';
|
4
|
-
export declare const durationSecond = 1000;
|
5
|
-
export declare const durationMinute: number;
|
6
|
-
export declare const durationHour: number;
|
7
|
-
export declare const durationDay: number;
|
8
|
-
export declare const durationWeek: number;
|
9
|
-
export declare const durationYear: number;
|
10
|
-
export declare type FilterResult = {
|
11
|
-
filteredIndexForDomain?: number[];
|
12
|
-
filteredIndex?: number[];
|
13
|
-
};
|
14
|
-
export declare type FilterChanged = {
|
15
|
-
[key in keyof FilterRecord]: {
|
16
|
-
[key: string]: 'added' | 'deleted' | 'name_changed' | 'value_changed' | 'dataId_changed';
|
17
|
-
} | null;
|
18
|
-
};
|
19
|
-
export declare type dataValueAccessor = (data: {
|
20
|
-
index: number;
|
21
|
-
}) => number | null;
|
22
|
-
export declare const TimestampStepMap: {
|
23
|
-
max: number;
|
24
|
-
step: number;
|
25
|
-
}[];
|
26
|
-
export declare const histogramBins = 30;
|
27
|
-
export declare const enlargedHistogramBins = 100;
|
28
|
-
export declare const FILTER_UPDATER_PROPS: {
|
29
|
-
dataId: "dataId";
|
30
|
-
name: "name";
|
31
|
-
layerId: "layerId";
|
32
|
-
};
|
33
|
-
export declare const LIMITED_FILTER_EFFECT_PROPS: {
|
34
|
-
name: "name";
|
35
|
-
};
|
36
|
-
export declare const FILTER_COMPONENTS: {
|
37
|
-
select: string;
|
38
|
-
multiSelect: string;
|
39
|
-
timeRange: string;
|
40
|
-
range: string;
|
41
|
-
polygon: string;
|
42
|
-
};
|
43
|
-
export declare const DEFAULT_FILTER_STRUCTURE: {
|
44
|
-
dataId: never[];
|
45
|
-
freeze: boolean;
|
46
|
-
id: null;
|
47
|
-
enabled: boolean;
|
48
|
-
fixedDomain: boolean;
|
49
|
-
view: "side";
|
50
|
-
isAnimating: boolean;
|
51
|
-
animationWindow: "free";
|
52
|
-
speed: number;
|
53
|
-
name: never[];
|
54
|
-
type: null;
|
55
|
-
fieldIdx: never[];
|
56
|
-
domain: null;
|
57
|
-
value: null;
|
58
|
-
plotType: "histogram";
|
59
|
-
yAxis: null;
|
60
|
-
interval: null;
|
61
|
-
gpu: boolean;
|
62
|
-
};
|
63
|
-
export declare const FILTER_ID_LENGTH = 4;
|
64
|
-
export declare const LAYER_FILTERS: "polygon"[];
|
65
|
-
/**
|
66
|
-
* Generates a filter with a dataset id as dataId
|
67
|
-
*/
|
68
|
-
export declare function getDefaultFilter({ dataId, id }?: {
|
69
|
-
dataId?: string | null | string[];
|
70
|
-
id?: string;
|
71
|
-
}): FilterBase<LineChart>;
|
72
|
-
/**
|
73
|
-
* Check if a filter is valid based on the given dataId
|
74
|
-
* @param filter to validate
|
75
|
-
* @param datasetId id to validate filter against
|
76
|
-
* @return true if a filter is valid, false otherwise
|
77
|
-
*/
|
78
|
-
export declare function shouldApplyFilter(filter: Filter, datasetId: string): boolean;
|
79
|
-
interface KeplerTableModel<K, L> {
|
80
|
-
id: string;
|
81
|
-
getColumnFieldIdx(columnName: string): number;
|
82
|
-
filterTable(filters: Filter[], layers: L[], opt?: FilterDatasetOpt): K;
|
83
|
-
getColumnFilterProps(columnName: string): Field['filterProps'] | null | undefined;
|
84
|
-
dataContainer: DataContainerInterface;
|
85
|
-
filterTableCPU(filters: Filter[], layers: L[]): K;
|
86
|
-
}
|
87
|
-
/**
|
88
|
-
* Validates and modifies polygon filter structure
|
89
|
-
* @param dataset
|
90
|
-
* @param filter
|
91
|
-
* @param layers
|
92
|
-
* @return - {filter, dataset}
|
93
|
-
*/
|
94
|
-
export declare function validatePolygonFilter<K extends KeplerTableModel<K, L>, L extends {
|
95
|
-
id: string;
|
96
|
-
}>(dataset: K, filter: PolygonFilter, layers: L[]): {
|
97
|
-
filter: PolygonFilter | null;
|
98
|
-
dataset: K;
|
99
|
-
};
|
100
|
-
/**
|
101
|
-
* Default validate filter function
|
102
|
-
* @param dataset
|
103
|
-
* @param filter
|
104
|
-
* @return - {filter, dataset}
|
105
|
-
*/
|
106
|
-
export declare function validateFilter<K extends KeplerTableModel<K, L>, L>(dataset: K, filter: ParsedFilter): {
|
107
|
-
filter: Filter | null;
|
108
|
-
dataset: K;
|
109
|
-
};
|
110
|
-
/**
|
111
|
-
* Validate saved filter config with new data,
|
112
|
-
* calculate domain and fieldIdx based new fields and data
|
113
|
-
*
|
114
|
-
* @param dataset
|
115
|
-
* @param filter - filter to be validate
|
116
|
-
* @param layers - layers
|
117
|
-
* @return validated filter
|
118
|
-
*/
|
119
|
-
export declare function validateFilterWithData<K extends KeplerTableModel<K, L>, L>(dataset: K, filter: ParsedFilter, layers: L[]): {
|
120
|
-
filter: Filter;
|
121
|
-
dataset: K;
|
122
|
-
};
|
123
|
-
/**
|
124
|
-
* Get default filter prop based on field type
|
125
|
-
*
|
126
|
-
* @param field
|
127
|
-
* @param fieldDomain
|
128
|
-
* @returns default filter
|
129
|
-
*/
|
130
|
-
export declare function getFilterProps(field: Field, fieldDomain: FieldDomain): Partial<Filter> & {
|
131
|
-
fieldType: string;
|
132
|
-
};
|
133
|
-
export declare const getPolygonFilterFunctor: (layer: any, filter: any, dataContainer: any) => (data: any) => any;
|
134
|
-
/**
|
135
|
-
* @param param An object that represents a row record.
|
136
|
-
* @param param.index Index of the row in data container.
|
137
|
-
* @returns Returns true to keep the element, or false otherwise.
|
138
|
-
*/
|
139
|
-
declare type filterFunction = (data: {
|
140
|
-
index: number;
|
141
|
-
}) => boolean;
|
142
|
-
/**
|
143
|
-
* @param field dataset Field
|
144
|
-
* @param dataId Dataset id
|
145
|
-
* @param filter Filter object
|
146
|
-
* @param layers list of layers to filter upon
|
147
|
-
* @param dataContainer Data container
|
148
|
-
* @return filterFunction
|
149
|
-
*/
|
150
|
-
export declare function getFilterFunction<L extends {
|
151
|
-
config: {
|
152
|
-
dataId: string | null;
|
153
|
-
};
|
154
|
-
id: string;
|
155
|
-
}>(field: Field | null, dataId: string, filter: Filter, layers: L[], dataContainer: DataContainerInterface): filterFunction;
|
156
|
-
export declare function updateFilterDataId(dataId: string | string[]): FilterBase<LineChart>;
|
157
|
-
export declare function filterDataByFilterTypes({ dynamicDomainFilters, cpuFilters, filterFuncs }: {
|
158
|
-
dynamicDomainFilters: Filter[] | null;
|
159
|
-
cpuFilters: Filter[] | null;
|
160
|
-
filterFuncs: {
|
161
|
-
[key: string]: filterFunction;
|
162
|
-
};
|
163
|
-
}, dataContainer: DataContainerInterface): FilterResult;
|
164
|
-
/**
|
165
|
-
* Get a record of filters based on domain type and gpu / cpu
|
166
|
-
*/
|
167
|
-
export declare function getFilterRecord(dataId: string, filters: Filter[], opt?: FilterDatasetOpt): FilterRecord;
|
168
|
-
/**
|
169
|
-
* Compare filter records to get what has changed
|
170
|
-
*/
|
171
|
-
export declare function diffFilters(filterRecord: FilterRecord, oldFilterRecord?: FilterRecord | {}): FilterChanged;
|
172
|
-
/**
|
173
|
-
* Call by parsing filters from URL
|
174
|
-
* Check if value of filter within filter domain, if not adjust it to match
|
175
|
-
* filter domain
|
176
|
-
*
|
177
|
-
* @returns value - adjusted value to match filter or null to remove filter
|
178
|
-
*/
|
179
|
-
export declare function adjustValueToFilterDomain(value: Filter['value'], { domain, type }: {
|
180
|
-
domain: any;
|
181
|
-
type: any;
|
182
|
-
}): any;
|
183
|
-
/**
|
184
|
-
* Calculate numeric domain and suitable step
|
185
|
-
*/
|
186
|
-
export declare function getNumericFieldDomain(dataContainer: DataContainerInterface, valueAccessor: dataValueAccessor): RangeFieldDomain;
|
187
|
-
/**
|
188
|
-
* Calculate step size for range and timerange filter
|
189
|
-
*/
|
190
|
-
export declare function getNumericStepSize(diff: number): number;
|
191
|
-
/**
|
192
|
-
* Calculate timestamp domain and suitable step
|
193
|
-
*/
|
194
|
-
export declare function getTimestampFieldDomain(dataContainer: DataContainerInterface, valueAccessor: dataValueAccessor): TimeRangeFieldDomain;
|
195
|
-
export declare function histogramConstruct(domain: [number, number], mappedValue: (Millisecond | number)[], bins: number): HistogramBin[];
|
196
|
-
/**
|
197
|
-
* Calculate histogram from domain and array of values
|
198
|
-
*/
|
199
|
-
export declare function getHistogram(domain: [number, number], mappedValue: (Millisecond | number)[]): {
|
200
|
-
histogram: HistogramBin[];
|
201
|
-
enlargedHistogram: HistogramBin[];
|
202
|
-
};
|
203
|
-
/**
|
204
|
-
* round number based on step
|
205
|
-
*
|
206
|
-
* @param {Number} val
|
207
|
-
* @param {Number} step
|
208
|
-
* @param {string} bound
|
209
|
-
* @returns {Number} rounded number
|
210
|
-
*/
|
211
|
-
export declare function formatNumberByStep(val: number, step: number, bound: 'floor' | 'ceil'): number;
|
212
|
-
export declare function isInRange(val: any, domain: number[]): boolean;
|
213
|
-
/**
|
214
|
-
* Determines whether a point is within the provided polygon
|
215
|
-
*
|
216
|
-
* @param point as input search [lat, lng]
|
217
|
-
* @param polygon Points must be within these (Multi)Polygon(s)
|
218
|
-
* @return {boolean}
|
219
|
-
*/
|
220
|
-
export declare function isInPolygon(point: number[], polygon: any): boolean;
|
221
|
-
export declare function getTimeWidgetTitleFormatter(domain: [number, number]): string | null;
|
222
|
-
/**
|
223
|
-
* Sanity check on filters to prepare for save
|
224
|
-
* @type {typeof import('./filter-utils').isFilterValidToSave}
|
225
|
-
*/
|
226
|
-
export declare function isFilterValidToSave(filter: any): boolean;
|
227
|
-
/**
|
228
|
-
* Sanity check on filters to prepare for save
|
229
|
-
* @type {typeof import('./filter-utils').isValidFilterValue}
|
230
|
-
*/
|
231
|
-
export declare function isValidFilterValue(type: string | null, value: any): boolean;
|
232
|
-
export declare function getColumnFilterProps<K extends KeplerTableModel<K, L>, L>(filter: Filter, dataset: K): {
|
233
|
-
lineChart: LineChart;
|
234
|
-
yAxs: Field;
|
235
|
-
} | {};
|
236
|
-
export declare function getDefaultFilterPlotType(filter: Filter): string | null;
|
237
|
-
/**
|
238
|
-
*
|
239
|
-
* @param datasetIds list of dataset ids to be filtered
|
240
|
-
* @param datasets all datasets
|
241
|
-
* @param filters all filters to be applied to datasets
|
242
|
-
* @return datasets - new updated datasets
|
243
|
-
*/
|
244
|
-
export declare function applyFiltersToDatasets<K extends KeplerTableModel<K, L>, L extends {
|
245
|
-
config: {
|
246
|
-
dataId: string | null;
|
247
|
-
};
|
248
|
-
}>(datasetIds: string[], datasets: {
|
249
|
-
[id: string]: K;
|
250
|
-
}, filters: Filter[], layers?: L[]): {
|
251
|
-
[id: string]: K;
|
252
|
-
};
|
253
|
-
/**
|
254
|
-
* Applies a new field name value to fielter and update both filter and dataset
|
255
|
-
* @param filter - to be applied the new field name on
|
256
|
-
* @param dataset - dataset the field belongs to
|
257
|
-
* @param fieldName - field.name
|
258
|
-
* @param filterDatasetIndex - field.name
|
259
|
-
* @param option
|
260
|
-
* @return - {filter, datasets}
|
261
|
-
*/
|
262
|
-
export declare function applyFilterFieldName<K extends KeplerTableModel<K, L>, L>(filter: Filter, dataset: K, fieldName: string, filterDatasetIndex?: number, option?: {
|
263
|
-
mergeDomain: boolean;
|
264
|
-
}): {
|
265
|
-
filter: Filter | null;
|
266
|
-
dataset: K;
|
267
|
-
};
|
268
|
-
/**
|
269
|
-
* Merge one filter with other filter prop domain
|
270
|
-
*/
|
271
|
-
export declare function mergeFilterDomainStep(filter: Filter, filterProps?: Partial<Filter>): (Filter & {
|
272
|
-
step?: number;
|
273
|
-
}) | null;
|
274
|
-
/**
|
275
|
-
* Generates polygon filter
|
276
|
-
*/
|
277
|
-
export declare const featureToFilterValue: (feature: Feature, filterId: string, properties?: {} | undefined) => FeatureValue;
|
278
|
-
export declare const getFilterIdInFeature: (f: FeatureValue) => string;
|
279
|
-
/**
|
280
|
-
* Generates polygon filter
|
281
|
-
*/
|
282
|
-
export declare function generatePolygonFilter<L extends {
|
283
|
-
config: {
|
284
|
-
dataId: string | null;
|
285
|
-
label: string;
|
286
|
-
};
|
287
|
-
id: string;
|
288
|
-
}>(layers: L[], feature: Feature): PolygonFilter;
|
289
|
-
/**
|
290
|
-
* Run filter entirely on CPU
|
291
|
-
*/
|
292
|
-
interface StateType<K extends KeplerTableModel<K, L>, L> {
|
293
|
-
layers: L[];
|
294
|
-
filters: Filter[];
|
295
|
-
datasets: {
|
296
|
-
[id: string]: K;
|
297
|
-
};
|
298
|
-
}
|
299
|
-
export declare function filterDatasetCPU<T extends StateType<K, L>, K extends KeplerTableModel<K, L>, L>(state: T, dataId: string): T;
|
300
|
-
/**
|
301
|
-
* Validate parsed filters with datasets and add filterProps to field
|
302
|
-
*/
|
303
|
-
declare type MinVisStateForFilter = Pick<VisState, 'layers' | 'datasets' | 'isMergingDatasets'>;
|
304
|
-
export declare function validateFiltersUpdateDatasets<S extends MinVisStateForFilter, K extends KeplerTableModel<K, L>, L extends {
|
305
|
-
config: {
|
306
|
-
dataId: string | null;
|
307
|
-
label: string;
|
308
|
-
};
|
309
|
-
id: string;
|
310
|
-
}>(state: S, filtersToValidate?: ParsedFilter[]): {
|
311
|
-
validated: Filter[];
|
312
|
-
failed: Filter[];
|
313
|
-
updatedDatasets: S['datasets'];
|
314
|
-
};
|
315
|
-
export declare function getFilterPlot<K extends KeplerTableModel<K, L>, L>(filter: Filter, dataset: K): {
|
316
|
-
lineChart: LineChart;
|
317
|
-
yAxs: Field;
|
318
|
-
} | {};
|
319
|
-
/**
|
320
|
-
* Retrieve interval bins for time filter
|
321
|
-
*/
|
322
|
-
export declare function getIntervalBins(filter: TimeRangeFilter): any;
|
323
|
-
export declare function isValidTimeDomain(domain: any): boolean;
|
324
|
-
export declare function getTimeWidgetHintFormatter(domain: [number, number]): string | undefined;
|
325
|
-
export declare function isSideFilter(filter: Filter): boolean;
|
326
|
-
export {};
|