@flowmap.gl/data 8.0.0-alpha.2 → 8.0.0-alpha.22
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/dist/FlowmapAggregateAccessors.d.ts +16 -0
- package/dist/FlowmapAggregateAccessors.d.ts.map +1 -0
- package/dist/FlowmapAggregateAccessors.js +48 -0
- package/dist/FlowmapSelectors.d.ts +213 -0
- package/dist/FlowmapSelectors.d.ts.map +1 -0
- package/dist/FlowmapSelectors.js +861 -0
- package/dist/{FlowMapState.d.ts → FlowmapState.d.ts} +12 -8
- package/dist/FlowmapState.d.ts.map +1 -0
- package/dist/FlowmapState.js +2 -0
- package/dist/cluster/ClusterIndex.d.ts +3 -3
- package/dist/cluster/ClusterIndex.d.ts.map +1 -1
- package/dist/cluster/ClusterIndex.js +1 -1
- package/dist/cluster/cluster.d.ts +6 -5
- package/dist/cluster/cluster.d.ts.map +1 -1
- package/dist/cluster/cluster.js +76 -20
- package/dist/colors.d.ts +7 -7
- package/dist/colors.d.ts.map +1 -1
- package/dist/colors.js +55 -20
- package/dist/getViewStateForLocations.d.ts +18 -11
- package/dist/getViewStateForLocations.d.ts.map +1 -1
- package/dist/getViewStateForLocations.js +37 -23
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -6
- package/dist/provider/FlowmapDataProvider.d.ts +21 -0
- package/dist/provider/FlowmapDataProvider.d.ts.map +1 -0
- package/dist/provider/FlowmapDataProvider.js +17 -0
- package/dist/provider/LocalFlowmapDataProvider.d.ts +25 -0
- package/dist/provider/LocalFlowmapDataProvider.d.ts.map +1 -0
- package/dist/provider/LocalFlowmapDataProvider.js +111 -0
- package/dist/selector-functions.d.ts +10 -0
- package/dist/selector-functions.d.ts.map +1 -0
- package/dist/selector-functions.js +56 -0
- package/dist/types.d.ts +20 -16
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -4
- package/dist/util.d.ts +0 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +1 -4
- package/package.json +10 -12
- package/src/FlowmapAggregateAccessors.ts +67 -0
- package/src/{FlowMapSelectors.ts → FlowmapSelectors.ts} +453 -398
- package/src/{FlowMapState.ts → FlowmapState.ts} +11 -7
- package/src/cluster/ClusterIndex.ts +19 -12
- package/src/cluster/cluster.ts +96 -35
- package/src/colors.ts +70 -28
- package/src/getViewStateForLocations.ts +56 -40
- package/src/index.ts +9 -6
- package/src/provider/FlowmapDataProvider.ts +75 -0
- package/src/provider/LocalFlowmapDataProvider.ts +143 -0
- package/src/selector-functions.ts +87 -0
- package/src/types.ts +23 -19
- package/src/util.ts +0 -4
- package/dist/FlowMapAggregateAccessors.d.ts +0 -15
- package/dist/FlowMapAggregateAccessors.d.ts.map +0 -1
- package/dist/FlowMapAggregateAccessors.js +0 -43
- package/dist/FlowMapSelectors.d.ts +0 -182
- package/dist/FlowMapSelectors.d.ts.map +0 -1
- package/dist/FlowMapSelectors.js +0 -834
- package/dist/FlowMapState.d.ts.map +0 -1
- package/dist/FlowMapState.js +0 -2
- package/dist/provider/FlowMapDataProvider.d.ts +0 -16
- package/dist/provider/FlowMapDataProvider.d.ts.map +0 -1
- package/dist/provider/FlowMapDataProvider.js +0 -17
- package/dist/provider/LocalFlowMapDataProvider.d.ts +0 -20
- package/dist/provider/LocalFlowMapDataProvider.d.ts.map +0 -1
- package/dist/provider/LocalFlowMapDataProvider.js +0 -87
- package/src/FlowMapAggregateAccessors.ts +0 -60
- package/src/provider/FlowMapDataProvider.ts +0 -63
- package/src/provider/LocalFlowMapDataProvider.ts +0 -105
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalFlowmapDataProvider.d.ts","sourceRoot":"","sources":["../../src/provider/LocalFlowmapDataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,mBAAmB,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,OAAO,EACP,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACd,MAAM,UAAU,CAAC;AAClB,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,mBAAmB,EAEpB,MAAM,6BAA6B,CAAC;AAErC,MAAM,CAAC,OAAO,OAAO,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAChD,YAAW,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;IAEpC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,YAAY,CAA2B;gBAEnC,SAAS,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;IAOjD,YAAY,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;IAIlD,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;IAIpD,YAAY,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;IAItC,cAAc,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS;IAIzC,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,eAAe,IAAI,YAAY,GAAG,SAAS;IAIrC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,aAAa,GAAG,SAAS,CAAC;IAYnE,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,WAAW,GAAG,SAAS,CAAC;IAWrE,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAOhD,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;IAqBtE,oBAAoB,CACxB,EAAE,EAAE,MAAM,GAAG,MAAM,GAClB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAShC,uBAAuB,CAC3B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACtB,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAgB/B,gBAAgB,CACpB,aAAa,EAAE,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,KAAK,IAAI;CAI9D"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import FlowmapSelectors from '../FlowmapSelectors';
|
|
11
|
+
import { getViewStateForLocations, } from '../getViewStateForLocations';
|
|
12
|
+
export default class LocalFlowmapDataProvider {
|
|
13
|
+
constructor(accessors) {
|
|
14
|
+
// scope selectors to the concrete instance of FlowmapDataProvider
|
|
15
|
+
this.selectors = new FlowmapSelectors(accessors);
|
|
16
|
+
this.flowmapData = undefined;
|
|
17
|
+
this.flowmapState = undefined;
|
|
18
|
+
}
|
|
19
|
+
setAccessors(accessors) {
|
|
20
|
+
this.selectors.setAccessors(accessors);
|
|
21
|
+
}
|
|
22
|
+
setFlowmapData(flowmapData) {
|
|
23
|
+
this.flowmapData = flowmapData;
|
|
24
|
+
}
|
|
25
|
+
getSelectors() {
|
|
26
|
+
return this.selectors;
|
|
27
|
+
}
|
|
28
|
+
getFlowmapData() {
|
|
29
|
+
return this.flowmapData;
|
|
30
|
+
}
|
|
31
|
+
setFlowmapState(flowmapState) {
|
|
32
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
+
this.flowmapState = flowmapState;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
getFlowmapState() {
|
|
37
|
+
return this.flowmapState;
|
|
38
|
+
}
|
|
39
|
+
getFlowByIndex(idx) {
|
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
if (!this.flowmapState || !this.flowmapData) {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
const flows = this.selectors.getFlowsForFlowmapLayer(this.flowmapState, this.flowmapData);
|
|
45
|
+
return flows === null || flows === void 0 ? void 0 : flows[idx];
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
// TODO: this is unreliable, should replace by unqiue ID
|
|
49
|
+
getLocationByIndex(idx) {
|
|
50
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
51
|
+
if (!this.flowmapState || !this.flowmapData) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
const locations = this.selectors.getLocationsForFlowmapLayer(this.flowmapState, this.flowmapData);
|
|
55
|
+
return locations === null || locations === void 0 ? void 0 : locations[idx];
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
getLayersData() {
|
|
59
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
+
if (!this.flowmapState || !this.flowmapData) {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
return this.selectors.getLayersData(this.flowmapState, this.flowmapData);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
getLocationById(id) {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
68
|
+
if (!this.flowmapState || !this.flowmapData) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
const clusterIndex = this.selectors.getClusterIndex(this.flowmapState, this.flowmapData);
|
|
72
|
+
if (clusterIndex) {
|
|
73
|
+
const cluster = clusterIndex.getClusterById(id);
|
|
74
|
+
if (cluster) {
|
|
75
|
+
return cluster;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const locationsById = this.selectors.getLocationsById(this.flowmapState, this.flowmapData);
|
|
79
|
+
return locationsById === null || locationsById === void 0 ? void 0 : locationsById.get(id);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
getTotalsForLocation(id) {
|
|
83
|
+
var _a;
|
|
84
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
85
|
+
if (!this.flowmapState || !this.flowmapData) {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
return (_a = this.selectors
|
|
89
|
+
.getLocationTotals(this.flowmapState, this.flowmapData)) === null || _a === void 0 ? void 0 : _a.get(id);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
getViewportForLocations(dims, opts) {
|
|
93
|
+
var _a;
|
|
94
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
95
|
+
if (!((_a = this.flowmapData) === null || _a === void 0 ? void 0 : _a.locations)) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
// @ts-ignore
|
|
99
|
+
return getViewStateForLocations(this.flowmapData.locations, (loc) => [
|
|
100
|
+
this.selectors.accessors.getLocationLon(loc),
|
|
101
|
+
this.selectors.accessors.getLocationLat(loc),
|
|
102
|
+
], dims, opts);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
updateLayersData(setLayersData) {
|
|
106
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
107
|
+
setLayersData(yield this.getLayersData());
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYWxGbG93bWFwRGF0YVByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpZGVyL0xvY2FsRmxvd21hcERhdGFQcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZQSxPQUFPLGdCQUFnQixNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFFTCx3QkFBd0IsR0FDekIsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxNQUFNLENBQUMsT0FBTyxPQUFPLHdCQUF3QjtJQU8zQyxZQUFZLFNBQXFDO1FBQy9DLGtFQUFrRTtRQUNsRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksZ0JBQWdCLENBQU8sU0FBUyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFxQztRQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsY0FBYyxDQUFDLFdBQThCO1FBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFSyxlQUFlLENBQUMsWUFBMEI7O1lBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ25DLENBQUM7S0FBQTtJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVLLGNBQWMsQ0FBQyxHQUFXOztZQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVB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QyxFQUNELElBQUksRUFDSixJQUFJLENBQ0wsQ0FBQzs7S0FDSDtJQUVLLGdCQUFnQixDQUNwQixhQUEyRDs7WUFFM0QsYUFBYSxDQUFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDNUMsQ0FBQztLQUFBO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBGbG93bWFwRGF0YVByb3ZpZGVyIGZyb20gJy4vRmxvd21hcERhdGFQcm92aWRlcic7XG5pbXBvcnQgdHlwZSB7XG4gIENsdXN0ZXIsXG4gIENsdXN0ZXJOb2RlLFxuICBGbG93bWFwRGF0YSxcbiAgRmxvd21hcERhdGFBY2Nlc3NvcnMsXG4gIExheWVyc0RhdGEsXG4gIExvY2F0aW9uVG90YWxzLFxuICBWaWV3cG9ydFByb3BzLFxuICBBZ2dyZWdhdGVGbG93LFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0Zsb3dtYXBTdGF0ZX0gZnJvbSAnLi4vRmxvd21hcFN0YXRlJztcbmltcG9ydCBGbG93bWFwU2VsZWN0b3JzIGZyb20gJy4uL0Zsb3dtYXBTZWxlY3RvcnMnO1xuaW1wb3J0IHtcbiAgR2V0Vmlld1N0YXRlT3B0aW9ucyxcbiAgZ2V0Vmlld1N0YXRlRm9yTG9jYXRpb25zLFxufSBmcm9tICcuLi9nZXRWaWV3U3RhdGVGb3JMb2NhdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2NhbEZsb3dtYXBEYXRhUHJvdmlkZXI8TCwgRj5cbiAgaW1wbGVtZW50cyBGbG93bWFwRGF0YVByb3ZpZGVyPEwsIEY+XG57XG4gIHByaXZhdGUgc2VsZWN0b3JzOiBGbG93bWFwU2VsZWN0b3JzPEwsIEY+O1xuICBwcml2YXRlIGZsb3dtYXBEYXRhOiBGbG93bWFwRGF0YTxMLCBGPiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBmbG93bWFwU3RhdGU6IEZsb3dtYXBTdGF0ZSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihhY2Nlc3NvcnM6IEZsb3dtYXBEYXRhQWNjZXNzb3JzPEwsIEY+KSB7XG4gICAgLy8gc2NvcGUgc2VsZWN0b3JzIHRvIHRoZSBjb25jcmV0ZSBpbnN0YW5jZSBvZiBGbG93bWFwRGF0YVByb3ZpZGVyXG4gICAgdGhpcy5zZWxlY3RvcnMgPSBuZXcgRmxvd21hcFNlbGVjdG9yczxMLCBGPihhY2Nlc3NvcnMpO1xuICAgIHRoaXMuZmxvd21hcERhdGEgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mbG93bWFwU3RhdGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBzZXRBY2Nlc3NvcnMoYWNjZXNzb3JzOiBGbG93bWFwRGF0YUFjY2Vzc29yczxMLCBGPikge1xuICAgIHRoaXMuc2VsZWN0b3JzLnNldEFjY2Vzc29ycyhhY2Nlc3NvcnMpO1xuICB9XG5cbiAgc2V0Rmxvd21hcERhdGEoZmxvd21hcERhdGE6IEZsb3dtYXBEYXRhPEwsIEY+KTogdm9pZCB7XG4gICAgdGhpcy5mbG93bWFwRGF0YSA9IGZsb3dtYXBEYXRhO1xuICB9XG5cbiAgZ2V0U2VsZWN0b3JzKCk6IEZsb3dtYXBTZWxlY3RvcnM8TCwgRj4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9ycztcbiAgfVxuXG4gIGdldEZsb3dtYXBEYXRhKCk6IEZsb3dtYXBEYXRhPEwsIEY+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5mbG93bWFwRGF0YTtcbiAgfVxuXG4gIGFzeW5jIHNldEZsb3dtYXBTdGF0ZShmbG93bWFwU3RhdGU6IEZsb3dtYXBTdGF0ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZmxvd21hcFN0YXRlID0gZmxvd21hcFN0YXRlO1xuICB9XG5cbiAgZ2V0Rmxvd21hcFN0YXRlKCk6IEZsb3dtYXBTdGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd21hcFN0YXRlO1xuICB9XG5cbiAgYXN5bmMgZ2V0Rmxvd0J5SW5kZXgoaWR4OiBudW1iZXIpOiBQcm9taXNlPEYgfCBBZ2dyZWdhdGVGbG93IHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLmZsb3dtYXBTdGF0ZSB8fCAhdGhpcy5mbG93bWFwRGF0YSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZmxvd3MgPSB0aGlzLnNlbGVjdG9ycy5nZXRGbG93c0ZvckZsb3dtYXBMYXllcihcbiAgICAgIHRoaXMuZmxvd21hcFN0YXRlLFxuICAgICAgdGhpcy5mbG93bWFwRGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmbG93cz8uW2lkeF07XG4gIH1cblxuICAvLyBUT0RPOiB0aGlzIGlzIHVucmVsaWFibGUsIHNob3VsZCByZXBsYWNlIGJ5IHVucWl1ZSBJRFxuICBhc3luYyBnZXRMb2NhdGlvbkJ5SW5kZXgoaWR4OiBudW1iZXIpOiBQcm9taXNlPEwgfCBDbHVzdGVyTm9kZSB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5mbG93bWFwU3RhdGUgfHwgIXRoaXMuZmxvd21hcERhdGEpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGxvY2F0aW9ucyA9IHRoaXMuc2VsZWN0b3JzLmdldExvY2F0aW9uc0ZvckZsb3dtYXBMYXllcihcbiAgICAgIHRoaXMuZmxvd21hcFN0YXRlLFxuICAgICAgdGhpcy5mbG93bWFwRGF0YSxcbiAgICApO1xuICAgIHJldHVybiBsb2NhdGlvbnM/LltpZHhdO1xuICB9XG5cbiAgYXN5bmMgZ2V0TGF5ZXJzRGF0YSgpOiBQcm9taXNlPExheWVyc0RhdGEgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMuZmxvd21hcFN0YXRlIHx8ICF0aGlzLmZsb3dtYXBEYXRhKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZWxlY3RvcnMuZ2V0TGF5ZXJzRGF0YSh0aGlzLmZsb3dtYXBTdGF0ZSwgdGhpcy5mbG93bWFwRGF0YSk7XG4gIH1cblxuICBhc3luYyBnZXRMb2NhdGlvbkJ5SWQoaWQ6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TCB8IENsdXN0ZXIgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMuZmxvd21hcFN0YXRlIHx8ICF0aGlzLmZsb3dtYXBEYXRhKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBjbHVzdGVySW5kZXggPSB0aGlzLnNlbGVjdG9ycy5nZXRDbHVzdGVySW5kZXgoXG4gICAgICB0aGlzLmZsb3dtYXBTdGF0ZSxcbiAgICAgIHRoaXMuZmxvd21hcERhdGEsXG4gICAgKTtcbiAgICBpZiAoY2x1c3RlckluZGV4KSB7XG4gICAgICBjb25zdCBjbHVzdGVyID0gY2x1c3RlckluZGV4LmdldENsdXN0ZXJCeUlkKGlkKTtcbiAgICAgIGlmIChjbHVzdGVyKSB7XG4gICAgICAgIHJldHVybiBjbHVzdGVyO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBsb2NhdGlvbnNCeUlkID0gdGhpcy5zZWxlY3RvcnMuZ2V0TG9jYXRpb25zQnlJZChcbiAgICAgIHRoaXMuZmxvd21hcFN0YXRlLFxuICAgICAgdGhpcy5mbG93bWFwRGF0YSxcbiAgICApO1xuICAgIHJldHVybiBsb2NhdGlvbnNCeUlkPy5nZXQoaWQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VG90YWxzRm9yTG9jYXRpb24oXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgKTogUHJvbWlzZTxMb2NhdGlvblRvdGFscyB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5mbG93bWFwU3RhdGUgfHwgIXRoaXMuZmxvd21hcERhdGEpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlbGVjdG9yc1xuICAgICAgLmdldExvY2F0aW9uVG90YWxzKHRoaXMuZmxvd21hcFN0YXRlLCB0aGlzLmZsb3dtYXBEYXRhKVxuICAgICAgPy5nZXQoaWQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Vmlld3BvcnRGb3JMb2NhdGlvbnMoXG4gICAgZGltczogW251bWJlciwgbnVtYmVyXSxcbiAgICBvcHRzPzogR2V0Vmlld1N0YXRlT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxWaWV3cG9ydFByb3BzIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLmZsb3dtYXBEYXRhPy5sb2NhdGlvbnMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gZ2V0Vmlld1N0YXRlRm9yTG9jYXRpb25zKFxuICAgICAgdGhpcy5mbG93bWFwRGF0YS5sb2NhdGlvbnMsXG4gICAgICAobG9jKSA9PiBbXG4gICAgICAgIHRoaXMuc2VsZWN0b3JzLmFjY2Vzc29ycy5nZXRMb2NhdGlvbkxvbihsb2MpLFxuICAgICAgICB0aGlzLnNlbGVjdG9ycy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25MYXQobG9jKSxcbiAgICAgIF0sXG4gICAgICBkaW1zLFxuICAgICAgb3B0cyxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlTGF5ZXJzRGF0YShcbiAgICBzZXRMYXllcnNEYXRhOiAobGF5ZXJzRGF0YTogTGF5ZXJzRGF0YSB8IHVuZGVmaW5lZCkgPT4gdm9pZCxcbiAgKSB7XG4gICAgc2V0TGF5ZXJzRGF0YShhd2FpdCB0aGlzLmdldExheWVyc0RhdGEoKSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ClusterLevel, LocationAccessors, ViewportProps } from './types';
|
|
2
|
+
import { ClusterIndex, LocationWeightGetter } from './cluster/ClusterIndex';
|
|
3
|
+
export declare const getViewportBoundingBox: (viewport: ViewportProps, maxLocationCircleSize?: number) => [number, number, number, number];
|
|
4
|
+
export declare const getFlowThicknessScale: (magnitudeExtent: [number, number] | undefined) => import("d3-scale").ScaleLinear<number, number, never> | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* Adding meaningful cluster names.
|
|
7
|
+
* NOTE: this will mutate the nodes in clusterIndex
|
|
8
|
+
*/
|
|
9
|
+
export declare function addClusterNames<L, F>(clusterIndex: ClusterIndex<F>, clusterLevels: ClusterLevel[], locationsById: Map<string | number, L>, locationAccessors: LocationAccessors<L>, getLocationWeight: LocationWeightGetter): void;
|
|
10
|
+
//# sourceMappingURL=selector-functions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector-functions.d.ts","sourceRoot":"","sources":["../src/selector-functions.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EAEZ,iBAAiB,EACjB,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAC,YAAY,EAAE,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAK1E,eAAO,MAAM,sBAAsB,aACvB,aAAa,qCAEtB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAQjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,oBACf,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,sEAa9C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAClC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,EAC7B,aAAa,EAAE,YAAY,EAAE,EAC7B,aAAa,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,EACtC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC,EACvC,iBAAiB,EAAE,oBAAoB,GACtC,IAAI,CAkCN"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { WebMercatorViewport } from '@math.gl/web-mercator';
|
|
2
|
+
import { isCluster, } from './types';
|
|
3
|
+
import { scaleLinear } from 'd3-scale';
|
|
4
|
+
import { descending } from 'd3-array';
|
|
5
|
+
// TODO: use re-reselect
|
|
6
|
+
export const getViewportBoundingBox = (viewport, maxLocationCircleSize = 0) => {
|
|
7
|
+
const pad = maxLocationCircleSize;
|
|
8
|
+
const bounds = new WebMercatorViewport(Object.assign(Object.assign({}, viewport), { width: viewport.width + pad * 2, height: viewport.height + pad * 2 })).getBounds();
|
|
9
|
+
return [bounds[0][0], bounds[0][1], bounds[1][0], bounds[1][1]];
|
|
10
|
+
};
|
|
11
|
+
export const getFlowThicknessScale = (magnitudeExtent) => {
|
|
12
|
+
if (!magnitudeExtent)
|
|
13
|
+
return undefined;
|
|
14
|
+
return scaleLinear()
|
|
15
|
+
.range([0.025, 0.5])
|
|
16
|
+
.domain([
|
|
17
|
+
0,
|
|
18
|
+
// should support diff mode too
|
|
19
|
+
Math.max.apply(null, magnitudeExtent.map((x) => Math.abs(x || 0))),
|
|
20
|
+
]);
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Adding meaningful cluster names.
|
|
24
|
+
* NOTE: this will mutate the nodes in clusterIndex
|
|
25
|
+
*/
|
|
26
|
+
export function addClusterNames(clusterIndex, clusterLevels, locationsById, locationAccessors, getLocationWeight) {
|
|
27
|
+
const { getLocationId, getLocationName, getLocationClusterName } = locationAccessors;
|
|
28
|
+
const getName = (id) => {
|
|
29
|
+
const loc = locationsById.get(id);
|
|
30
|
+
if (loc) {
|
|
31
|
+
return getLocationName ? getLocationName(loc) : getLocationId(loc) || id;
|
|
32
|
+
}
|
|
33
|
+
return `"${id}"`;
|
|
34
|
+
};
|
|
35
|
+
for (const level of clusterLevels) {
|
|
36
|
+
for (const node of level.nodes) {
|
|
37
|
+
// Here mutating the nodes (adding names)
|
|
38
|
+
if (isCluster(node)) {
|
|
39
|
+
const leaves = clusterIndex.expandCluster(node);
|
|
40
|
+
leaves.sort((a, b) => descending(getLocationWeight(a), getLocationWeight(b)));
|
|
41
|
+
if (getLocationClusterName) {
|
|
42
|
+
node.name = getLocationClusterName(leaves);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const topId = leaves[0];
|
|
46
|
+
const otherId = leaves.length === 2 ? leaves[1] : undefined;
|
|
47
|
+
node.name = `"${getName(topId)}" and ${otherId ? `"${getName(otherId)}"` : `${leaves.length - 1} others`}`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
node.name = getName(node.id);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0b3ItZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NlbGVjdG9yLWZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBRUwsU0FBUyxHQUdWLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFckMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVwQyx3QkFBd0I7QUFFeEIsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FDcEMsUUFBdUIsRUFDdkIscUJBQXFCLEdBQUcsQ0FBQyxFQUNTLEVBQUU7SUFDcEMsTUFBTSxHQUFHLEdBQUcscUJBQXFCLENBQUM7SUFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxtQkFBbUIsaUNBQ2pDLFFBQVEsS0FDWCxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUMvQixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUNqQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQ25DLGVBQTZDLEVBQzdDLEVBQUU7SUFDRixJQUFJLENBQUMsZUFBZTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3ZDLE9BQU8sV0FBVyxFQUFFO1NBQ2pCLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNuQixNQUFNLENBQUM7UUFDTixDQUFDO1FBQ0QsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUNaLElBQUksRUFDSixlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBcUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDakU7S0FDRixDQUFDLENBQUM7QUFDUCxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixZQUE2QixFQUM3QixhQUE2QixFQUM3QixhQUFzQyxFQUN0QyxpQkFBdUMsRUFDdkMsaUJBQXVDO0lBRXZDLE1BQU0sRUFBQyxhQUFhLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFDLEdBQzVELGlCQUFpQixDQUFDO0lBQ3BCLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBbUIsRUFBRSxFQUFFO1FBQ3RDLE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEMsSUFBSSxHQUFHLEVBQUU7WUFDUCxPQUFPLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzFFO1FBQ0QsT0FBTyxJQUFJLEVBQUUsR0FBRyxDQUFDO0lBQ25CLENBQUMsQ0FBQztJQUNGLEtBQUssTUFBTSxLQUFLLElBQUksYUFBYSxFQUFFO1FBQ2pDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtZQUM5Qix5Q0FBeUM7WUFDekMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ25CLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRWhELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDbkIsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3ZELENBQUM7Z0JBRUYsSUFBSSxzQkFBc0IsRUFBRTtvQkFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDNUM7cUJBQU07b0JBQ0wsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQzVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQzVCLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsU0FDMUQsRUFBRSxDQUFDO2lCQUNKO2FBQ0Y7aUJBQU07Z0JBQ0osSUFBWSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0Y7S0FDRjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1dlYk1lcmNhdG9yVmlld3BvcnR9IGZyb20gJ0BtYXRoLmdsL3dlYi1tZXJjYXRvcic7XG5pbXBvcnQge1xuICBDbHVzdGVyTGV2ZWwsXG4gIGlzQ2x1c3RlcixcbiAgTG9jYXRpb25BY2Nlc3NvcnMsXG4gIFZpZXdwb3J0UHJvcHMsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtzY2FsZUxpbmVhcn0gZnJvbSAnZDMtc2NhbGUnO1xuaW1wb3J0IHtDbHVzdGVySW5kZXgsIExvY2F0aW9uV2VpZ2h0R2V0dGVyfSBmcm9tICcuL2NsdXN0ZXIvQ2x1c3RlckluZGV4JztcbmltcG9ydCB7ZGVzY2VuZGluZ30gZnJvbSAnZDMtYXJyYXknO1xuXG4vLyBUT0RPOiB1c2UgcmUtcmVzZWxlY3RcblxuZXhwb3J0IGNvbnN0IGdldFZpZXdwb3J0Qm91bmRpbmdCb3ggPSAoXG4gIHZpZXdwb3J0OiBWaWV3cG9ydFByb3BzLFxuICBtYXhMb2NhdGlvbkNpcmNsZVNpemUgPSAwLFxuKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4ge1xuICBjb25zdCBwYWQgPSBtYXhMb2NhdGlvbkNpcmNsZVNpemU7XG4gIGNvbnN0IGJvdW5kcyA9IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KHtcbiAgICAuLi52aWV3cG9ydCxcbiAgICB3aWR0aDogdmlld3BvcnQud2lkdGggKyBwYWQgKiAyLFxuICAgIGhlaWdodDogdmlld3BvcnQuaGVpZ2h0ICsgcGFkICogMixcbiAgfSkuZ2V0Qm91bmRzKCk7XG4gIHJldHVybiBbYm91bmRzWzBdWzBdLCBib3VuZHNbMF1bMV0sIGJvdW5kc1sxXVswXSwgYm91bmRzWzFdWzFdXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGbG93VGhpY2tuZXNzU2NhbGUgPSAoXG4gIG1hZ25pdHVkZUV4dGVudDogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCxcbikgPT4ge1xuICBpZiAoIW1hZ25pdHVkZUV4dGVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHNjYWxlTGluZWFyKClcbiAgICAucmFuZ2UoWzAuMDI1LCAwLjVdKVxuICAgIC5kb21haW4oW1xuICAgICAgMCxcbiAgICAgIC8vIHNob3VsZCBzdXBwb3J0IGRpZmYgbW9kZSB0b29cbiAgICAgIE1hdGgubWF4LmFwcGx5KFxuICAgICAgICBudWxsLFxuICAgICAgICBtYWduaXR1ZGVFeHRlbnQubWFwKCh4OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IE1hdGguYWJzKHggfHwgMCkpLFxuICAgICAgKSxcbiAgICBdKTtcbn07XG5cbi8qKlxuICogQWRkaW5nIG1lYW5pbmdmdWwgY2x1c3RlciBuYW1lcy5cbiAqIE5PVEU6IHRoaXMgd2lsbCBtdXRhdGUgdGhlIG5vZGVzIGluIGNsdXN0ZXJJbmRleFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQ2x1c3Rlck5hbWVzPEwsIEY+KFxuICBjbHVzdGVySW5kZXg6IENsdXN0ZXJJbmRleDxGPixcbiAgY2x1c3RlckxldmVsczogQ2x1c3RlckxldmVsW10sXG4gIGxvY2F0aW9uc0J5SWQ6IE1hcDxzdHJpbmcgfCBudW1iZXIsIEw+LFxuICBsb2NhdGlvbkFjY2Vzc29yczogTG9jYXRpb25BY2Nlc3NvcnM8TD4sXG4gIGdldExvY2F0aW9uV2VpZ2h0OiBMb2NhdGlvbldlaWdodEdldHRlcixcbik6IHZvaWQge1xuICBjb25zdCB7Z2V0TG9jYXRpb25JZCwgZ2V0TG9jYXRpb25OYW1lLCBnZXRMb2NhdGlvbkNsdXN0ZXJOYW1lfSA9XG4gICAgbG9jYXRpb25BY2Nlc3NvcnM7XG4gIGNvbnN0IGdldE5hbWUgPSAoaWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGxvYyA9IGxvY2F0aW9uc0J5SWQuZ2V0KGlkKTtcbiAgICBpZiAobG9jKSB7XG4gICAgICByZXR1cm4gZ2V0TG9jYXRpb25OYW1lID8gZ2V0TG9jYXRpb25OYW1lKGxvYykgOiBnZXRMb2NhdGlvbklkKGxvYykgfHwgaWQ7XG4gICAgfVxuICAgIHJldHVybiBgXCIke2lkfVwiYDtcbiAgfTtcbiAgZm9yIChjb25zdCBsZXZlbCBvZiBjbHVzdGVyTGV2ZWxzKSB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIGxldmVsLm5vZGVzKSB7XG4gICAgICAvLyBIZXJlIG11dGF0aW5nIHRoZSBub2RlcyAoYWRkaW5nIG5hbWVzKVxuICAgICAgaWYgKGlzQ2x1c3Rlcihub2RlKSkge1xuICAgICAgICBjb25zdCBsZWF2ZXMgPSBjbHVzdGVySW5kZXguZXhwYW5kQ2x1c3Rlcihub2RlKTtcblxuICAgICAgICBsZWF2ZXMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICBkZXNjZW5kaW5nKGdldExvY2F0aW9uV2VpZ2h0KGEpLCBnZXRMb2NhdGlvbldlaWdodChiKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGdldExvY2F0aW9uQ2x1c3Rlck5hbWUpIHtcbiAgICAgICAgICBub2RlLm5hbWUgPSBnZXRMb2NhdGlvbkNsdXN0ZXJOYW1lKGxlYXZlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdG9wSWQgPSBsZWF2ZXNbMF07XG4gICAgICAgICAgY29uc3Qgb3RoZXJJZCA9IGxlYXZlcy5sZW5ndGggPT09IDIgPyBsZWF2ZXNbMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgbm9kZS5uYW1lID0gYFwiJHtnZXROYW1lKHRvcElkKX1cIiBhbmQgJHtcbiAgICAgICAgICAgIG90aGVySWQgPyBgXCIke2dldE5hbWUob3RoZXJJZCl9XCJgIDogYCR7bGVhdmVzLmxlbmd0aCAtIDF9IG90aGVyc2BcbiAgICAgICAgICB9YDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKG5vZGUgYXMgYW55KS5uYW1lID0gZ2V0TmFtZShub2RlLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export declare type
|
|
2
|
-
locations: L
|
|
3
|
-
flows: F
|
|
1
|
+
export declare type FlowmapData<L, F> = {
|
|
2
|
+
locations: Iterable<L> | undefined;
|
|
3
|
+
flows: Iterable<F> | undefined;
|
|
4
|
+
clusterLevels?: ClusterLevels;
|
|
4
5
|
};
|
|
5
6
|
export interface ViewState {
|
|
6
7
|
latitude: number;
|
|
@@ -13,18 +14,19 @@ export interface ViewState {
|
|
|
13
14
|
export declare type FlowAccessor<F, T> = (flow: F) => T;
|
|
14
15
|
export declare type LocationAccessor<L, T> = (location: L) => T;
|
|
15
16
|
export interface FlowAccessors<F> {
|
|
16
|
-
getFlowOriginId: FlowAccessor<F, string>;
|
|
17
|
-
getFlowDestId: FlowAccessor<F, string>;
|
|
17
|
+
getFlowOriginId: FlowAccessor<F, string | number>;
|
|
18
|
+
getFlowDestId: FlowAccessor<F, string | number>;
|
|
18
19
|
getFlowMagnitude: FlowAccessor<F, number>;
|
|
19
20
|
getFlowTime?: FlowAccessor<F, Date>;
|
|
20
21
|
}
|
|
21
22
|
export interface LocationAccessors<L> {
|
|
22
|
-
getLocationId: LocationAccessor<L, string>;
|
|
23
|
+
getLocationId: LocationAccessor<L, string | number>;
|
|
23
24
|
getLocationName?: LocationAccessor<L, string>;
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
getLocationLat: LocationAccessor<L, number>;
|
|
26
|
+
getLocationLon: LocationAccessor<L, number>;
|
|
27
|
+
getLocationClusterName?: (locationIds: (string | number)[]) => string;
|
|
26
28
|
}
|
|
27
|
-
export declare type
|
|
29
|
+
export declare type FlowmapDataAccessors<L, F> = LocationAccessors<L> & FlowAccessors<F>;
|
|
28
30
|
export interface LocationTotals {
|
|
29
31
|
incomingCount: number;
|
|
30
32
|
outgoingCount: number;
|
|
@@ -39,9 +41,9 @@ export interface ViewportProps {
|
|
|
39
41
|
height: number;
|
|
40
42
|
latitude: number;
|
|
41
43
|
longitude: number;
|
|
42
|
-
zoom
|
|
43
|
-
bearing
|
|
44
|
-
pitch
|
|
44
|
+
zoom?: number;
|
|
45
|
+
bearing?: number;
|
|
46
|
+
pitch?: number;
|
|
45
47
|
altitude?: number;
|
|
46
48
|
maxZoom?: number;
|
|
47
49
|
minZoom?: number;
|
|
@@ -53,9 +55,10 @@ export interface ViewportProps {
|
|
|
53
55
|
transitionEasing?: any;
|
|
54
56
|
}
|
|
55
57
|
export interface ClusterNode {
|
|
56
|
-
id: string;
|
|
58
|
+
id: string | number;
|
|
57
59
|
zoom: number;
|
|
58
|
-
|
|
60
|
+
lat: number;
|
|
61
|
+
lon: number;
|
|
59
62
|
}
|
|
60
63
|
export interface ClusterLevel {
|
|
61
64
|
zoom: number;
|
|
@@ -69,8 +72,8 @@ export interface Cluster extends ClusterNode {
|
|
|
69
72
|
export declare function isCluster(c: ClusterNode): c is Cluster;
|
|
70
73
|
export declare function isLocationClusterNode<L>(l: L | ClusterNode): l is ClusterNode;
|
|
71
74
|
export interface AggregateFlow {
|
|
72
|
-
origin: string;
|
|
73
|
-
dest: string;
|
|
75
|
+
origin: string | number;
|
|
76
|
+
dest: string | number;
|
|
74
77
|
count: number;
|
|
75
78
|
aggregate: true;
|
|
76
79
|
}
|
|
@@ -108,6 +111,7 @@ export interface FlowLinesLayerAttributes {
|
|
|
108
111
|
export interface LayersData {
|
|
109
112
|
circleAttributes: FlowCirclesLayerAttributes;
|
|
110
113
|
lineAttributes: FlowLinesLayerAttributes;
|
|
114
|
+
locationLabels?: string[];
|
|
111
115
|
}
|
|
112
116
|
export declare type LayersDataAttrValues<T> = {
|
|
113
117
|
value: T;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI;IAC9B,SAAS,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI;IAC9B,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACnC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAC/B,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,oBAAY,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;AAChD,oBAAY,gBAAgB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC;AAExD,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,eAAe,EAAE,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAClD,aAAa,EAAE,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAChD,gBAAgB,EAAE,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;CAErC;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,aAAa,EAAE,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACpD,eAAe,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9C,cAAc,EAAE,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5C,cAAc,EAAE,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5C,sBAAsB,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC;CAIvE;AAED,oBAAY,oBAAoB,CAAC,CAAC,EAAE,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAC3D,aAAa,CAAC,CAAC,CAAC,CAAC;AAEnB,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAQD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,GAAG,CAAC;IAC7B,sBAAsB,CAAC,EAAE,GAAG,CAAC;IAC7B,gBAAgB,CAAC,EAAE,GAAG,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,oBAAY,aAAa,GAAG,YAAY,EAAE,CAAC;AAG3C,MAAM,WAAW,OAAQ,SAAQ,WAAW;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,IAAI,OAAO,CAGtD;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,WAAW,CAG7E;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,IAAI,IAAI,aAAa,CAQvB;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;IAC7C,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IACpB,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;CACvC;AAED,oBAAY,kBAAkB;IAC5B,GAAG,QAAQ;IACX,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE;QACV,WAAW,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAChD,QAAQ,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAC3C,WAAW,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAChD,YAAY,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAC;KAClD,CAAC;CACH;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE;QACV,iBAAiB,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACtD,iBAAiB,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACtD,YAAY,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACjD,QAAQ,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAC3C,kBAAkB,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACvD,aAAa,CAAC,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAC;KACpD,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,gBAAgB,EAAE,0BAA0B,CAAC;IAC7C,cAAc,EAAE,wBAAwB,CAAC;IACzC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,oBAAY,oBAAoB,CAAC,CAAC,IAAI;IAAC,KAAK,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,CAAC"}
|
package/dist/types.js
CHANGED
|
@@ -8,9 +8,9 @@ export function isLocationClusterNode(l) {
|
|
|
8
8
|
}
|
|
9
9
|
export function isAggregateFlow(flow) {
|
|
10
10
|
return (flow &&
|
|
11
|
-
flow.origin !== undefined &&
|
|
12
|
-
flow.dest !== undefined &&
|
|
13
|
-
flow.count !== undefined &&
|
|
11
|
+
// flow.origin !== undefined &&
|
|
12
|
+
// flow.dest !== undefined &&
|
|
13
|
+
// flow.count !== undefined &&
|
|
14
14
|
(flow.aggregate ? true : false));
|
|
15
15
|
}
|
|
16
16
|
export var LocationFilterMode;
|
|
@@ -20,4 +20,4 @@ export var LocationFilterMode;
|
|
|
20
20
|
LocationFilterMode["OUTGOING"] = "OUTGOING";
|
|
21
21
|
LocationFilterMode["BETWEEN"] = "BETWEEN";
|
|
22
22
|
})(LocationFilterMode || (LocationFilterMode = {}));
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0dBLE1BQU0sVUFBVSxTQUFTLENBQUMsQ0FBYztJQUN0QyxNQUFNLEVBQUMsUUFBUSxFQUFDLEdBQUcsQ0FBWSxDQUFDO0lBQ2hDLE9BQU8sUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUksQ0FBa0I7SUFDekQsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLENBQWdCLENBQUM7SUFDaEMsT0FBTyxJQUFJLEtBQUssU0FBUyxDQUFDO0FBQzVCLENBQUM7QUFTRCxNQUFNLFVBQVUsZUFBZSxDQUM3QixJQUF5QjtJQUV6QixPQUFPLENBQ0wsSUFBSTtRQUNKLCtCQUErQjtRQUMvQiw2QkFBNkI7UUFDN0IsOEJBQThCO1FBQzlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FDaEMsQ0FBQztBQUNKLENBQUM7QUFPRCxNQUFNLENBQU4sSUFBWSxrQkFLWDtBQUxELFdBQVksa0JBQWtCO0lBQzVCLGlDQUFXLENBQUE7SUFDWCwyQ0FBcUIsQ0FBQTtJQUNyQiwyQ0FBcUIsQ0FBQTtJQUNyQix5Q0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQUs3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEZsb3dtYXBEYXRhPEwsIEY+ID0ge1xuICBsb2NhdGlvbnM6IEl0ZXJhYmxlPEw+IHwgdW5kZWZpbmVkO1xuICBmbG93czogSXRlcmFibGU8Rj4gfCB1bmRlZmluZWQ7XG4gIGNsdXN0ZXJMZXZlbHM/OiBDbHVzdGVyTGV2ZWxzO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBWaWV3U3RhdGUge1xuICBsYXRpdHVkZTogbnVtYmVyO1xuICBsb25naXR1ZGU6IG51bWJlcjtcbiAgem9vbTogbnVtYmVyO1xuICBiZWFyaW5nPzogbnVtYmVyO1xuICBwaXRjaD86IG51bWJlcjtcbiAgYWx0aXR1ZGU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIEZsb3dBY2Nlc3NvcjxGLCBUPiA9IChmbG93OiBGKSA9PiBUOyAvLyBvYmplY3RJbmZvPzogQWNjZXNzb3JPYmplY3RJbmZvLFxuZXhwb3J0IHR5cGUgTG9jYXRpb25BY2Nlc3NvcjxMLCBUPiA9IChsb2NhdGlvbjogTCkgPT4gVDtcblxuZXhwb3J0IGludGVyZmFjZSBGbG93QWNjZXNzb3JzPEY+IHtcbiAgZ2V0Rmxvd09yaWdpbklkOiBGbG93QWNjZXNzb3I8Riwgc3RyaW5nIHwgbnVtYmVyPjtcbiAgZ2V0Rmxvd0Rlc3RJZDogRmxvd0FjY2Vzc29yPEYsIHN0cmluZyB8IG51bWJlcj47XG4gIGdldEZsb3dNYWduaXR1ZGU6IEZsb3dBY2Nlc3NvcjxGLCBudW1iZXI+O1xuICBnZXRGbG93VGltZT86IEZsb3dBY2Nlc3NvcjxGLCBEYXRlPjsgLy8gVE9ETzogdXNlIG51bWJlciBpbnN0ZWFkIG9mIERhdGVcbiAgLy8gZ2V0Rmxvd0NvbG9yPzogRmxvd0FjY2Vzc29yPHN0cmluZyB8IHVuZGVmaW5lZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYXRpb25BY2Nlc3NvcnM8TD4ge1xuICBnZXRMb2NhdGlvbklkOiBMb2NhdGlvbkFjY2Vzc29yPEwsIHN0cmluZyB8IG51bWJlcj47XG4gIGdldExvY2F0aW9uTmFtZT86IExvY2F0aW9uQWNjZXNzb3I8TCwgc3RyaW5nPjtcbiAgZ2V0TG9jYXRpb25MYXQ6IExvY2F0aW9uQWNjZXNzb3I8TCwgbnVtYmVyPjtcbiAgZ2V0TG9jYXRpb25Mb246IExvY2F0aW9uQWNjZXNzb3I8TCwgbnVtYmVyPjtcbiAgZ2V0TG9jYXRpb25DbHVzdGVyTmFtZT86IChsb2NhdGlvbklkczogKHN0cmluZyB8IG51bWJlcilbXSkgPT4gc3RyaW5nO1xuICAvLyBnZXRMb2NhdGlvblRvdGFsSW4/OiBMb2NhdGlvbkFjY2Vzc29yPG51bWJlcj47XG4gIC8vIGdldExvY2F0aW9uVG90YWxPdXQ/OiBMb2NhdGlvbkFjY2Vzc29yPG51bWJlcj47XG4gIC8vIGdldExvY2F0aW9uVG90YWxJbnRlcm5hbD86IExvY2F0aW9uQWNjZXNzb3I8bnVtYmVyPjtcbn1cblxuZXhwb3J0IHR5cGUgRmxvd21hcERhdGFBY2Nlc3NvcnM8TCwgRj4gPSBMb2NhdGlvbkFjY2Vzc29yczxMPiAmXG4gIEZsb3dBY2Nlc3NvcnM8Rj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYXRpb25Ub3RhbHMge1xuICBpbmNvbWluZ0NvdW50OiBudW1iZXI7XG4gIG91dGdvaW5nQ291bnQ6IG51bWJlcjtcbiAgaW50ZXJuYWxDb3VudDogbnVtYmVyO1xufVxuXG4vLyBleHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uc1RvdGFscyB7XG4vLyAgIGluY29taW5nOiB7W2lkOiBzdHJpbmddOiBudW1iZXJ9O1xuLy8gICBvdXRnb2luZzoge1tpZDogc3RyaW5nXTogbnVtYmVyfTtcbi8vICAgaW50ZXJuYWw6IHtbaWQ6IHN0cmluZ106IG51bWJlcn07XG4vLyB9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ291bnRCeVRpbWUge1xuICB0aW1lOiBEYXRlO1xuICBjb3VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdwb3J0UHJvcHMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgbGF0aXR1ZGU6IG51bWJlcjtcbiAgbG9uZ2l0dWRlOiBudW1iZXI7XG4gIHpvb20/OiBudW1iZXI7XG4gIGJlYXJpbmc/OiBudW1iZXI7XG4gIHBpdGNoPzogbnVtYmVyO1xuICBhbHRpdHVkZT86IG51bWJlcjtcbiAgbWF4Wm9vbT86IG51bWJlcjtcbiAgbWluWm9vbT86IG51bWJlcjtcbiAgbWF4UGl0Y2g/OiBudW1iZXI7XG4gIG1pblBpdGNoPzogbnVtYmVyO1xuICB0cmFuc2l0aW9uRHVyYXRpb24/OiBudW1iZXIgfCAnYXV0byc7XG4gIHRyYW5zaXRpb25JbnRlcnBvbGF0b3I/OiBhbnk7XG4gIHRyYW5zaXRpb25JbnRlcnJ1cHRpb24/OiBhbnk7XG4gIHRyYW5zaXRpb25FYXNpbmc/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2x1c3Rlck5vZGUge1xuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICB6b29tOiBudW1iZXI7XG4gIGxhdDogbnVtYmVyO1xuICBsb246IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbHVzdGVyTGV2ZWwge1xuICB6b29tOiBudW1iZXI7XG4gIG5vZGVzOiBDbHVzdGVyTm9kZVtdO1xufVxuXG5leHBvcnQgdHlwZSBDbHVzdGVyTGV2ZWxzID0gQ2x1c3RlckxldmVsW107XG5cbi8vIG5vbi1sZWFmIGNsdXN0ZXIgbm9kZVxuZXhwb3J0IGludGVyZmFjZSBDbHVzdGVyIGV4dGVuZHMgQ2x1c3Rlck5vZGUge1xuICBuYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbjogc3RyaW5nW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NsdXN0ZXIoYzogQ2x1c3Rlck5vZGUpOiBjIGlzIENsdXN0ZXIge1xuICBjb25zdCB7Y2hpbGRyZW59ID0gYyBhcyBDbHVzdGVyO1xuICByZXR1cm4gY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoID4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTG9jYXRpb25DbHVzdGVyTm9kZTxMPihsOiBMIHwgQ2x1c3Rlck5vZGUpOiBsIGlzIENsdXN0ZXJOb2RlIHtcbiAgY29uc3Qge3pvb219ID0gbCBhcyBDbHVzdGVyTm9kZTtcbiAgcmV0dXJuIHpvb20gIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZ2dyZWdhdGVGbG93IHtcbiAgb3JpZ2luOiBzdHJpbmcgfCBudW1iZXI7XG4gIGRlc3Q6IHN0cmluZyB8IG51bWJlcjtcbiAgY291bnQ6IG51bWJlcjtcbiAgYWdncmVnYXRlOiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBZ2dyZWdhdGVGbG93KFxuICBmbG93OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuKTogZmxvdyBpcyBBZ2dyZWdhdGVGbG93IHtcbiAgcmV0dXJuIChcbiAgICBmbG93ICYmXG4gICAgLy8gZmxvdy5vcmlnaW4gIT09IHVuZGVmaW5lZCAmJlxuICAgIC8vIGZsb3cuZGVzdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgLy8gZmxvdy5jb3VudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgKGZsb3cuYWdncmVnYXRlID8gdHJ1ZSA6IGZhbHNlKVxuICApO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDb3VudHNNYXBSZWR1Y2U8RiwgVCA9IGFueT4ge1xuICBtYXA6IChmbG93OiBGKSA9PiBUO1xuICByZWR1Y2U6IChhY2N1bXVsYXRlZDogVCwgdmFsOiBUKSA9PiBUO1xufVxuXG5leHBvcnQgZW51bSBMb2NhdGlvbkZpbHRlck1vZGUge1xuICBBTEwgPSAnQUxMJyxcbiAgSU5DT01JTkcgPSAnSU5DT01JTkcnLFxuICBPVVRHT0lORyA9ICdPVVRHT0lORycsXG4gIEJFVFdFRU4gPSAnQkVUV0VFTicsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NpcmNsZXNMYXllckF0dHJpYnV0ZXMge1xuICBsZW5ndGg6IG51bWJlcjtcbiAgYXR0cmlidXRlczoge1xuICAgIGdldFBvc2l0aW9uOiBMYXllcnNEYXRhQXR0clZhbHVlczxGbG9hdDMyQXJyYXk+O1xuICAgIGdldENvbG9yOiBMYXllcnNEYXRhQXR0clZhbHVlczxVaW50OEFycmF5PjtcbiAgICBnZXRJblJhZGl1czogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgICBnZXRPdXRSYWRpdXM6IExheWVyc0RhdGFBdHRyVmFsdWVzPEZsb2F0MzJBcnJheT47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0xpbmVzTGF5ZXJBdHRyaWJ1dGVzIHtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIGF0dHJpYnV0ZXM6IHtcbiAgICBnZXRTb3VyY2VQb3NpdGlvbjogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgICBnZXRUYXJnZXRQb3NpdGlvbjogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgICBnZXRUaGlja25lc3M6IExheWVyc0RhdGFBdHRyVmFsdWVzPEZsb2F0MzJBcnJheT47XG4gICAgZ2V0Q29sb3I6IExheWVyc0RhdGFBdHRyVmFsdWVzPFVpbnQ4QXJyYXk+O1xuICAgIGdldEVuZHBvaW50T2Zmc2V0czogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgICBnZXRTdGFnZ2VyaW5nPzogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXllcnNEYXRhIHtcbiAgY2lyY2xlQXR0cmlidXRlczogRmxvd0NpcmNsZXNMYXllckF0dHJpYnV0ZXM7XG4gIGxpbmVBdHRyaWJ1dGVzOiBGbG93TGluZXNMYXllckF0dHJpYnV0ZXM7XG4gIGxvY2F0aW9uTGFiZWxzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCB0eXBlIExheWVyc0RhdGFBdHRyVmFsdWVzPFQ+ID0ge3ZhbHVlOiBUOyBzaXplOiBudW1iZXJ9O1xuIl19
|
package/dist/util.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { defaultMemoize } from 'reselect';
|
|
2
|
-
export declare function flatMap<S, T>(xs: S[], f: (item: S) => T | T[]): T[];
|
|
3
2
|
export declare const createDebugSelector: import("reselect").CreateSelectorFunction<(...args: unknown[]) => unknown, typeof defaultMemoize, [equalityCheckOrOptions?: import("reselect").EqualityFn | import("reselect").DefaultMemoizeOptions | undefined], {
|
|
4
3
|
clearCache: () => void;
|
|
5
4
|
}>;
|
package/dist/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,cAAc,EAAC,MAAM,UAAU,CAAC;AAE/D,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,cAAc,EAAC,MAAM,UAAU,CAAC;AAE/D,eAAO,MAAM,mBAAmB;;EAQ9B,CAAC"}
|
package/dist/util.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import { createSelectorCreator, defaultMemoize } from 'reselect';
|
|
2
|
-
export function flatMap(xs, f) {
|
|
3
|
-
return xs.reduce((acc, x) => acc.concat(f(x)), []);
|
|
4
|
-
}
|
|
5
2
|
export const createDebugSelector = createSelectorCreator(defaultMemoize, {
|
|
6
3
|
equalityCheck: (previousVal, currentVal) => {
|
|
7
4
|
const rv = currentVal === previousVal;
|
|
@@ -11,4 +8,4 @@ export const createDebugSelector = createSelectorCreator(defaultMemoize, {
|
|
|
11
8
|
return rv;
|
|
12
9
|
},
|
|
13
10
|
});
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxjQUFjLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFL0QsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcscUJBQXFCLENBQUMsY0FBYyxFQUFFO0lBQ3ZFLGFBQWEsRUFBRSxDQUFDLFdBQWdCLEVBQUUsVUFBZSxFQUFFLEVBQUU7UUFDbkQsTUFBTSxFQUFFLEdBQUcsVUFBVSxLQUFLLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1AsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUN6RDtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztDQUNGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3JlYXRlU2VsZWN0b3JDcmVhdG9yLCBkZWZhdWx0TWVtb2l6ZX0gZnJvbSAncmVzZWxlY3QnO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRGVidWdTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yQ3JlYXRvcihkZWZhdWx0TWVtb2l6ZSwge1xuICBlcXVhbGl0eUNoZWNrOiAocHJldmlvdXNWYWw6IGFueSwgY3VycmVudFZhbDogYW55KSA9PiB7XG4gICAgY29uc3QgcnYgPSBjdXJyZW50VmFsID09PSBwcmV2aW91c1ZhbDtcbiAgICBpZiAoIXJ2KSB7XG4gICAgICBjb25zb2xlLmxvZygnU2VsZWN0b3IgcGFyYW0gdmFsdWUgY2hhbmdlZCcsIGN1cnJlbnRWYWwpO1xuICAgIH1cbiAgICByZXR1cm4gcnY7XG4gIH0sXG59KTtcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flowmap.gl/data",
|
|
3
|
-
"version": "8.0.0-alpha.
|
|
3
|
+
"version": "8.0.0-alpha.22",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"module": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -13,16 +13,14 @@
|
|
|
13
13
|
"prepare": "yarn build"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"
|
|
17
|
-
"d3-
|
|
18
|
-
"d3-
|
|
19
|
-
"d3-
|
|
20
|
-
"d3-
|
|
21
|
-
"d3-
|
|
22
|
-
"d3-
|
|
23
|
-
"d3-
|
|
24
|
-
"d3-time": "^3.0.0",
|
|
25
|
-
"d3-time-format": "^4.0.0",
|
|
16
|
+
"d3-array": "2 - 3",
|
|
17
|
+
"d3-color": "2 - 3",
|
|
18
|
+
"d3-geo": "2 - 3",
|
|
19
|
+
"d3-interpolate": "2 - 3",
|
|
20
|
+
"d3-scale": "3 - 4",
|
|
21
|
+
"d3-scale-chromatic": "2 - 3",
|
|
22
|
+
"d3-time": "2 - 3",
|
|
23
|
+
"d3-time-format": "3 - 4",
|
|
26
24
|
"kdbush": "^3.0.0",
|
|
27
25
|
"reselect": "^4.0.0",
|
|
28
26
|
"seedrandom": "^3.0.5"
|
|
@@ -42,7 +40,7 @@
|
|
|
42
40
|
"@types/mapbox__geo-viewport": "^0.4.1",
|
|
43
41
|
"@types/seedrandom": "^3.0.1"
|
|
44
42
|
},
|
|
45
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "f063293ea0ee062e84e9b0fecb475b704847376e",
|
|
46
44
|
"publishConfig": {
|
|
47
45
|
"access": "public"
|
|
48
46
|
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AggregateFlow,
|
|
3
|
+
ClusterNode,
|
|
4
|
+
FlowmapDataAccessors,
|
|
5
|
+
isAggregateFlow,
|
|
6
|
+
isCluster,
|
|
7
|
+
isLocationClusterNode,
|
|
8
|
+
} from './types';
|
|
9
|
+
|
|
10
|
+
export default class FlowmapAggregateAccessors<L, F> {
|
|
11
|
+
private accessors: FlowmapDataAccessors<L, F>;
|
|
12
|
+
constructor(accessors: FlowmapDataAccessors<L, F>) {
|
|
13
|
+
this.accessors = accessors;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
setAccessors(accessors: FlowmapDataAccessors<L, F>) {
|
|
17
|
+
this.accessors = accessors;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
getFlowmapDataAccessors() {
|
|
21
|
+
return this.accessors;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
getLocationId = (location: L | ClusterNode): string | number =>
|
|
25
|
+
isLocationClusterNode(location)
|
|
26
|
+
? location.id
|
|
27
|
+
: this.accessors.getLocationId(location);
|
|
28
|
+
|
|
29
|
+
getLocationName = (location: L | ClusterNode): string => {
|
|
30
|
+
let name;
|
|
31
|
+
if (isLocationClusterNode(location) && isCluster(location)) {
|
|
32
|
+
name = location.name;
|
|
33
|
+
} else if (this.accessors.getLocationName) {
|
|
34
|
+
name = this.accessors.getLocationName(location as L);
|
|
35
|
+
}
|
|
36
|
+
if (!name) name = `${this.getLocationId(location)}`;
|
|
37
|
+
return name;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
getLocationLat = (location: L | ClusterNode): number =>
|
|
41
|
+
isLocationClusterNode(location)
|
|
42
|
+
? location.lat
|
|
43
|
+
: this.accessors.getLocationLat(location);
|
|
44
|
+
|
|
45
|
+
getLocationLon = (location: L | ClusterNode): number =>
|
|
46
|
+
isLocationClusterNode(location)
|
|
47
|
+
? location.lon
|
|
48
|
+
: this.accessors.getLocationLon(location);
|
|
49
|
+
|
|
50
|
+
getFlowOriginId = (f: F | AggregateFlow) => {
|
|
51
|
+
return isAggregateFlow(f) ? f.origin : this.accessors.getFlowOriginId(f);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
getFlowDestId = (f: F | AggregateFlow) => {
|
|
55
|
+
return isAggregateFlow(f) ? f.dest : this.accessors.getFlowDestId(f);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
getFlowMagnitude = (f: F | AggregateFlow) => {
|
|
59
|
+
return isAggregateFlow(f) ? f.count : this.accessors.getFlowMagnitude(f);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// Note: Aggregate flows have no time
|
|
63
|
+
getFlowTime = (f: F) => {
|
|
64
|
+
const {getFlowTime} = this.accessors;
|
|
65
|
+
return getFlowTime ? getFlowTime(f) : undefined;
|
|
66
|
+
};
|
|
67
|
+
}
|