@wayz/react-gl
Version:
React Component for DeckGL, Base on AMap, Mapbox GL
91 lines (90 loc) • 3.7 kB
JavaScript
import { ArcLayer } from '@deck.gl/layers';
import { CompositeLayer } from '@deck.gl/core';
import AnimatedArcLayer from '../animate-arc-layer/animate-arc-layer';
const DEFAULT_COLOR = [250, 226, 255, 255];
const defaultProps = {
...AnimatedArcLayer.defaultProps,
// color of the source pulse
getPulseSourceColor: { type: 'accessor', value: DEFAULT_COLOR },
// color of the target pulse
getPulseTargetColor: { type: 'accessor', value: DEFAULT_COLOR },
// Width of the blob
getPulseWidth: { type: 'accessor', min: 0, value: 1 },
};
class PulseArcLayer extends CompositeLayer {
renderLayers() {
// Layer prop
const { data } = this.props;
// Rendering props underlying layer
const {
// @ts-ignore
greatCircle, widthUnits, widthMaxPixels, widthMinPixels, widthScale, animationSpeed, tailLength,
// zIndex,
} = this.props;
// Accessor props for underlying layers
const { updateTriggers, getSourceColor, getTargetColor, getSourcePosition, getTargetPosition, getPulseSourceColor, getPulseTargetColor, getWidth, getHeight, getTilt, getFrequency, getPulseWidth, } = this.props;
const LinkArcLayer = this.getSubLayerClass('link-arc', ArcLayer);
const PulseArcLayer = this.getSubLayerClass('pulse-arc', AnimatedArcLayer);
return [
new LinkArcLayer({
greatCircle,
widthUnits,
widthMaxPixels,
widthMinPixels,
widthScale,
getSourceColor,
getTargetColor,
getSourcePosition,
getTargetPosition,
getWidth,
getHeight,
getTilt,
}, this.getSubLayerProps({
id: 'link-arc',
updateTriggers: {
getSourceColor: updateTriggers.getSourceColor,
getTargetColor: updateTriggers.getTargetColor,
getSourcePosition: updateTriggers.getSourcePosition,
getTargetPosition: updateTriggers.getTargetPosition,
getWidth: updateTriggers.getWidth,
getTilt: updateTriggers.getTilt,
},
}), {
data,
}),
new PulseArcLayer({
greatCircle,
widthUnits,
widthMaxPixels,
widthMinPixels,
widthScale,
animationSpeed,
tailLength,
getSourcePosition,
getTargetPosition,
getHeight,
getTilt,
getFrequency,
}, this.getSubLayerProps({
id: 'pulse-arc',
updateTriggers: {
getSourceColor: updateTriggers.getSourceColor,
getTargetColor: updateTriggers.getTargetColor,
getSourcePosition: updateTriggers.getSourcePosition,
getTargetPosition: updateTriggers.getTargetPosition,
getWidth: updateTriggers.getWidth,
getTilt: updateTriggers.getTilt,
getFrequency: updateTriggers.getFrequency,
},
}), {
data,
getWidth: this.getSubLayerAccessor(getPulseWidth),
getSourceColor: this.getSubLayerAccessor(getPulseSourceColor),
getTargetColor: this.getSubLayerAccessor(getPulseTargetColor),
}),
];
}
}
PulseArcLayer.layerName = 'PulseArcLayer';
PulseArcLayer.defaultProps = defaultProps;
export default PulseArcLayer;