@flowmap.gl/layers 8.0.0-alpha.2 → 8.0.0-alpha.6
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/FlowCirclesLayer/FlowCirclesLayer.d.ts +3 -3
- package/dist/FlowCirclesLayer/FlowCirclesLayer.d.ts.map +1 -1
- package/dist/FlowCirclesLayer/FlowCirclesLayer.js +5 -5
- package/dist/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.d.ts +1 -1
- package/dist/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.d.ts.map +1 -1
- package/dist/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.js +13 -10
- package/dist/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.d.ts +1 -1
- package/dist/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.js +2 -2
- package/dist/{FlowMapLayer.d.ts → FlowmapLayer.d.ts} +22 -15
- package/dist/FlowmapLayer.d.ts.map +1 -0
- package/dist/FlowmapLayer.js +330 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/package.json +2 -2
- package/src/FlowCirclesLayer/FlowCirclesLayer.ts +5 -5
- package/src/FlowCirclesLayer/FlowCirclesLayerFragment.glsl.ts +12 -9
- package/src/FlowCirclesLayer/FlowCirclesLayerVertex.glsl.ts +1 -1
- package/src/{FlowMapLayer.ts → FlowmapLayer.ts} +85 -50
- package/src/index.ts +2 -2
- package/src/types.ts +1 -1
- package/dist/FlowMapLayer.d.ts.map +0 -1
- package/dist/FlowMapLayer.js +0 -310
|
@@ -19,51 +19,53 @@ import {ScatterplotLayer} from '@deck.gl/layers';
|
|
|
19
19
|
import {
|
|
20
20
|
colorAsRgba,
|
|
21
21
|
FlowLinesLayerAttributes,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
FlowmapData,
|
|
23
|
+
FlowmapDataAccessors,
|
|
24
|
+
FlowmapDataProvider,
|
|
25
25
|
getFlowLineAttributesByIndex,
|
|
26
|
-
|
|
26
|
+
getFlowmapColors,
|
|
27
27
|
getOuterCircleRadiusByIndex,
|
|
28
28
|
getLocationCentroidByIndex,
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
isFlowmapData,
|
|
30
|
+
isFlowmapDataProvider,
|
|
31
31
|
LayersData,
|
|
32
|
-
|
|
32
|
+
LocalFlowmapDataProvider,
|
|
33
33
|
LocationFilterMode,
|
|
34
34
|
ViewportProps,
|
|
35
|
-
|
|
36
|
-
ClusterNode,
|
|
37
|
-
AggregateFlow,
|
|
35
|
+
FlowmapAggregateAccessors,
|
|
38
36
|
} from '@flowmap.gl/data';
|
|
39
37
|
import AnimatedFlowLinesLayer from './AnimatedFlowLinesLayer';
|
|
40
38
|
import FlowCirclesLayer from './FlowCirclesLayer';
|
|
41
39
|
import FlowLinesLayer from './FlowLinesLayer';
|
|
42
40
|
import {
|
|
43
|
-
|
|
41
|
+
FlowmapLayerPickingInfo,
|
|
44
42
|
LayerProps,
|
|
45
43
|
PickingInfo,
|
|
46
44
|
PickingType,
|
|
47
45
|
} from './types';
|
|
48
46
|
|
|
49
|
-
export type
|
|
50
|
-
data
|
|
47
|
+
export type FlowmapLayerProps<L, F> = {
|
|
48
|
+
data?: FlowmapData<L, F>;
|
|
49
|
+
dataProvider?: FlowmapDataProvider<L, F>;
|
|
51
50
|
locationTotalsEnabled?: boolean;
|
|
52
51
|
adaptiveScalesEnabled?: boolean;
|
|
53
52
|
animationEnabled?: boolean;
|
|
54
53
|
clusteringEnabled?: boolean;
|
|
55
54
|
clusteringLevel?: number;
|
|
56
55
|
fadeEnabled?: boolean;
|
|
56
|
+
fadeOpacityEnabled?: boolean;
|
|
57
57
|
clusteringAuto?: boolean;
|
|
58
58
|
darkMode?: boolean;
|
|
59
59
|
fadeAmount?: number;
|
|
60
60
|
colorScheme?: string;
|
|
61
|
+
highlightColor?: string;
|
|
62
|
+
maxTopFlowsDisplayNum?: number;
|
|
61
63
|
onHover?: (
|
|
62
|
-
info:
|
|
64
|
+
info: FlowmapLayerPickingInfo<L, F> | undefined,
|
|
63
65
|
event: SourceEvent,
|
|
64
66
|
) => void;
|
|
65
|
-
onClick?: (info:
|
|
66
|
-
} & Partial<
|
|
67
|
+
onClick?: (info: FlowmapLayerPickingInfo<L, F>, event: SourceEvent) => void;
|
|
68
|
+
} & Partial<FlowmapDataAccessors<L, F>> &
|
|
67
69
|
LayerProps;
|
|
68
70
|
|
|
69
71
|
enum HighlightType {
|
|
@@ -85,15 +87,15 @@ type HighlightedFlowObject = {
|
|
|
85
87
|
type HighlightedObject = HighlightedLocationObject | HighlightedFlowObject;
|
|
86
88
|
|
|
87
89
|
type State<L, F> = {
|
|
88
|
-
accessors:
|
|
89
|
-
dataProvider:
|
|
90
|
+
accessors: FlowmapAggregateAccessors<L, F>;
|
|
91
|
+
dataProvider: FlowmapDataProvider<L, F>;
|
|
90
92
|
layersData: LayersData | undefined;
|
|
91
93
|
highlightedObject: HighlightedObject | undefined;
|
|
92
94
|
};
|
|
93
95
|
|
|
94
96
|
export type SourceEvent = {srcEvent: MouseEvent};
|
|
95
97
|
|
|
96
|
-
export default class
|
|
98
|
+
export default class FlowmapLayer<L, F> extends CompositeLayer {
|
|
97
99
|
static defaultProps = {
|
|
98
100
|
darkMode: true,
|
|
99
101
|
fadeAmount: 50,
|
|
@@ -101,16 +103,23 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
|
|
|
101
103
|
animationEnabled: false,
|
|
102
104
|
clusteringEnabled: true,
|
|
103
105
|
fadeEnabled: true,
|
|
106
|
+
fadeOpacityEnabled: false,
|
|
104
107
|
clusteringAuto: true,
|
|
105
108
|
clusteringLevel: undefined,
|
|
106
109
|
adaptiveScalesEnabled: true,
|
|
107
110
|
colorScheme: 'Teal',
|
|
111
|
+
highlightColor: 'orange',
|
|
112
|
+
maxTopFlowsDisplayNum: 5000,
|
|
108
113
|
};
|
|
109
114
|
state: State<L, F> | undefined;
|
|
110
115
|
|
|
111
|
-
public constructor(props:
|
|
116
|
+
public constructor(props: FlowmapLayerProps<L, F>) {
|
|
112
117
|
super({
|
|
113
118
|
...props,
|
|
119
|
+
dataProvider: {
|
|
120
|
+
// To avoid deck.gl props diffing on comlink worker proxy causing an exception
|
|
121
|
+
dataProvider: props.dataProvider,
|
|
122
|
+
},
|
|
114
123
|
onHover: (info: PickingInfo<any>, event: SourceEvent) => {
|
|
115
124
|
// TODO: if (lastHoverEventStartTimeRef > startTime) {
|
|
116
125
|
// // Skipping, because this is not the latest hover event
|
|
@@ -119,7 +128,7 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
|
|
|
119
128
|
this.setState({highlightedObject: this._getHighlightedObject(info)});
|
|
120
129
|
const {onHover} = props;
|
|
121
130
|
if (onHover) {
|
|
122
|
-
this.
|
|
131
|
+
this._getFlowmapLayerPickingInfo(info).then((info) =>
|
|
123
132
|
onHover(info, event),
|
|
124
133
|
);
|
|
125
134
|
}
|
|
@@ -127,7 +136,7 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
|
|
|
127
136
|
onClick: (info: PickingInfo<any>, event: SourceEvent) => {
|
|
128
137
|
const {onClick} = props;
|
|
129
138
|
if (onClick) {
|
|
130
|
-
this.
|
|
139
|
+
this._getFlowmapLayerPickingInfo(info).then((info) => {
|
|
131
140
|
if (info) {
|
|
132
141
|
onClick(info, event);
|
|
133
142
|
}
|
|
@@ -139,8 +148,8 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
|
|
|
139
148
|
|
|
140
149
|
initializeState() {
|
|
141
150
|
this.state = {
|
|
142
|
-
accessors: new
|
|
143
|
-
dataProvider: this.
|
|
151
|
+
accessors: new FlowmapAggregateAccessors<L, F>(this.props),
|
|
152
|
+
dataProvider: this._getOrMakeDataProvider(),
|
|
144
153
|
layersData: undefined,
|
|
145
154
|
highlightedObject: undefined,
|
|
146
155
|
};
|
|
@@ -148,25 +157,25 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
|
|
|
148
157
|
|
|
149
158
|
private _updateAccessors() {
|
|
150
159
|
this.state?.dataProvider?.setAccessors(this.props);
|
|
151
|
-
this.setState({accessors: new
|
|
160
|
+
this.setState({accessors: new FlowmapAggregateAccessors(this.props)});
|
|
152
161
|
}
|
|
153
162
|
|
|
154
|
-
private
|
|
155
|
-
const {data} = this.props;
|
|
156
|
-
if (
|
|
157
|
-
return
|
|
158
|
-
} else if (
|
|
159
|
-
const dataProvider = new
|
|
160
|
-
dataProvider.
|
|
163
|
+
private _getOrMakeDataProvider() {
|
|
164
|
+
const {data, dataProvider} = this.props;
|
|
165
|
+
if (isFlowmapDataProvider<L, F>(dataProvider?.dataProvider)) {
|
|
166
|
+
return dataProvider.dataProvider;
|
|
167
|
+
} else if (isFlowmapData<L, F>(data)) {
|
|
168
|
+
const dataProvider = new LocalFlowmapDataProvider<L, F>(this.props);
|
|
169
|
+
dataProvider.setFlowmapData(data);
|
|
161
170
|
return dataProvider;
|
|
162
171
|
}
|
|
163
172
|
throw new Error(
|
|
164
|
-
'
|
|
173
|
+
'FlowmapLayer: data must be a FlowmapDataProvider or FlowmapData',
|
|
165
174
|
);
|
|
166
175
|
}
|
|
167
176
|
|
|
168
177
|
private _updateDataProvider() {
|
|
169
|
-
this.setState({dataProvider: this.
|
|
178
|
+
this.setState({dataProvider: this._getOrMakeDataProvider()});
|
|
170
179
|
}
|
|
171
180
|
|
|
172
181
|
shouldUpdateState(params: Record<string, any>): boolean {
|
|
@@ -189,7 +198,7 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
|
|
|
189
198
|
}
|
|
190
199
|
|
|
191
200
|
if (changeFlags.propsChanged) {
|
|
192
|
-
this._updateAccessors();
|
|
201
|
+
// this._updateAccessors();
|
|
193
202
|
}
|
|
194
203
|
if (changeFlags.dataChanged) {
|
|
195
204
|
this._updateDataProvider();
|
|
@@ -200,8 +209,11 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
|
|
|
200
209
|
});
|
|
201
210
|
}
|
|
202
211
|
|
|
203
|
-
if (
|
|
204
|
-
|
|
212
|
+
if (
|
|
213
|
+
changeFlags.viewportChanged ||
|
|
214
|
+
changeFlags.propsOrDataChanged // TODO can we ignore accessor props changes?
|
|
215
|
+
) {
|
|
216
|
+
dataProvider.setFlowmapState(this._getFlowmapState());
|
|
205
217
|
(async () => {
|
|
206
218
|
const layersData = await dataProvider.getLayersData();
|
|
207
219
|
this.setState({layersData});
|
|
@@ -217,10 +229,13 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
|
|
|
217
229
|
clusteringEnabled,
|
|
218
230
|
clusteringLevel,
|
|
219
231
|
fadeEnabled,
|
|
232
|
+
fadeOpacityEnabled,
|
|
220
233
|
clusteringAuto,
|
|
221
234
|
darkMode,
|
|
222
235
|
fadeAmount,
|
|
223
236
|
colorScheme,
|
|
237
|
+
highlightColor,
|
|
238
|
+
maxTopFlowsDisplayNum,
|
|
224
239
|
} = this.props;
|
|
225
240
|
return {
|
|
226
241
|
locationTotalsEnabled,
|
|
@@ -229,16 +244,19 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
|
|
|
229
244
|
clusteringEnabled,
|
|
230
245
|
clusteringLevel,
|
|
231
246
|
fadeEnabled,
|
|
247
|
+
fadeOpacityEnabled,
|
|
232
248
|
clusteringAuto,
|
|
233
249
|
darkMode,
|
|
234
250
|
fadeAmount,
|
|
235
251
|
colorScheme,
|
|
252
|
+
highlightColor,
|
|
253
|
+
maxTopFlowsDisplayNum,
|
|
236
254
|
};
|
|
237
255
|
}
|
|
238
256
|
|
|
239
|
-
private
|
|
257
|
+
private _getFlowmapState() {
|
|
240
258
|
return {
|
|
241
|
-
viewport:
|
|
259
|
+
viewport: pickViewportProps(this.context.viewport),
|
|
242
260
|
filterState: {
|
|
243
261
|
selectedLocations: undefined,
|
|
244
262
|
locationFilterMode: LocationFilterMode.ALL,
|
|
@@ -248,9 +266,9 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
|
|
|
248
266
|
};
|
|
249
267
|
}
|
|
250
268
|
|
|
251
|
-
private async
|
|
269
|
+
private async _getFlowmapLayerPickingInfo(
|
|
252
270
|
info: Record<string, any>,
|
|
253
|
-
): Promise<
|
|
271
|
+
): Promise<FlowmapLayerPickingInfo<L, F> | undefined> {
|
|
254
272
|
const {index, sourceLayer} = info;
|
|
255
273
|
const {dataProvider, accessors} = this.state || {};
|
|
256
274
|
if (!dataProvider || !accessors) {
|
|
@@ -330,9 +348,25 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
|
|
|
330
348
|
) {
|
|
331
349
|
const {lineAttributes} = this.state?.layersData || {};
|
|
332
350
|
if (lineAttributes) {
|
|
351
|
+
let attrs = getFlowLineAttributesByIndex(lineAttributes, index);
|
|
352
|
+
if (this.props.fadeOpacityEnabled) {
|
|
353
|
+
attrs = {
|
|
354
|
+
...attrs,
|
|
355
|
+
attributes: {
|
|
356
|
+
...attrs.attributes,
|
|
357
|
+
getColor: {
|
|
358
|
+
...attrs.attributes.getColor,
|
|
359
|
+
value: new Uint8Array([
|
|
360
|
+
...attrs.attributes.getColor.value.slice(0, 3),
|
|
361
|
+
255, // the highlight color should be always opaque
|
|
362
|
+
]),
|
|
363
|
+
},
|
|
364
|
+
},
|
|
365
|
+
};
|
|
366
|
+
}
|
|
333
367
|
return {
|
|
334
368
|
type: HighlightType.FLOW,
|
|
335
|
-
lineAttributes:
|
|
369
|
+
lineAttributes: attrs,
|
|
336
370
|
};
|
|
337
371
|
}
|
|
338
372
|
} else if (sourceLayer instanceof FlowCirclesLayer) {
|
|
@@ -354,9 +388,9 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
|
|
|
354
388
|
const {layersData, highlightedObject} = this.state;
|
|
355
389
|
const {circleAttributes, lineAttributes} = layersData || {};
|
|
356
390
|
if (circleAttributes && lineAttributes) {
|
|
357
|
-
const
|
|
391
|
+
const flowmapColors = getFlowmapColors(this._getSettingsState());
|
|
358
392
|
const outlineColor = colorAsRgba(
|
|
359
|
-
|
|
393
|
+
flowmapColors.outlineColor || (this.props.darkMode ? '#000' : '#fff'),
|
|
360
394
|
);
|
|
361
395
|
const commonLineLayerProps = {
|
|
362
396
|
data: lineAttributes,
|
|
@@ -395,8 +429,10 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
|
|
|
395
429
|
this.getSubLayerProps({
|
|
396
430
|
id: 'circles',
|
|
397
431
|
data: circleAttributes,
|
|
398
|
-
emptyColor:
|
|
399
|
-
|
|
432
|
+
emptyColor: this.props.darkMode
|
|
433
|
+
? [0, 0, 0, 255]
|
|
434
|
+
: [255, 255, 255, 255],
|
|
435
|
+
outlineEmptyMix: 0.4,
|
|
400
436
|
}),
|
|
401
437
|
),
|
|
402
438
|
);
|
|
@@ -415,8 +451,7 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
|
|
|
415
451
|
getLineWidth: 2,
|
|
416
452
|
radiusUnits: 'pixels',
|
|
417
453
|
getRadius: (d: HighlightedLocationObject) => d.radius,
|
|
418
|
-
getLineColor: (
|
|
419
|
-
colorAsRgba('orange'),
|
|
454
|
+
getLineColor: colorAsRgba(this.props.highlightColor),
|
|
420
455
|
getPosition: (d: HighlightedLocationObject) => d.centroid,
|
|
421
456
|
}),
|
|
422
457
|
}),
|
|
@@ -430,7 +465,7 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
|
|
|
430
465
|
data: highlightedObject.lineAttributes,
|
|
431
466
|
drawOutline: true,
|
|
432
467
|
pickable: false,
|
|
433
|
-
outlineColor: colorAsRgba(
|
|
468
|
+
outlineColor: colorAsRgba(this.props.highlightColor),
|
|
434
469
|
outlineThickness: 1,
|
|
435
470
|
}),
|
|
436
471
|
}),
|
|
@@ -445,7 +480,7 @@ export default class FlowMapLayer<L, F> extends CompositeLayer {
|
|
|
445
480
|
}
|
|
446
481
|
}
|
|
447
482
|
|
|
448
|
-
function
|
|
483
|
+
function pickViewportProps(viewport: Record<string, any>): ViewportProps {
|
|
449
484
|
const {width, height, longitude, latitude, zoom, pitch, bearing} = viewport;
|
|
450
485
|
return {
|
|
451
486
|
width,
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export {default as AnimatedFlowLinesLayer} from './AnimatedFlowLinesLayer';
|
|
2
2
|
export {default as FlowLinesLayer} from './FlowLinesLayer';
|
|
3
3
|
export {default as FlowCirclesLayer} from './FlowCirclesLayer';
|
|
4
|
-
export {default as
|
|
5
|
-
export type {
|
|
4
|
+
export {default as FlowmapLayer} from './FlowmapLayer';
|
|
5
|
+
export type {FlowmapLayerProps} from './FlowmapLayer';
|
|
6
6
|
|
|
7
7
|
export * from './types';
|
package/src/types.ts
CHANGED
|
@@ -45,7 +45,7 @@ export interface FlowPickingInfo<L, F> extends PickingInfo<F | AggregateFlow> {
|
|
|
45
45
|
// object: FlowLocation;
|
|
46
46
|
// }
|
|
47
47
|
|
|
48
|
-
export type
|
|
48
|
+
export type FlowmapLayerPickingInfo<L, F> =
|
|
49
49
|
| LocationPickingInfo<L>
|
|
50
50
|
// | LocationAreaPickingInfo
|
|
51
51
|
| FlowPickingInfo<L, F>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FlowMapLayer.d.ts","sourceRoot":"","sources":["../src/FlowMapLayer.ts"],"names":[],"mappings":"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"}
|