import React, {useEffect, useMemo, useState} from 'react';
import { zindexmarker } from '../zindex';
const {
css,
physics,
} = window.popmotionXL;
function renderMarker({ level }, { width, highlight }) {
let color1;
if (level === 5) {
color1 = '#ec4e4e';
} else if (level === 6) {
color1 = '#1296db';
} else {
color1 = '#1296db';
}
if(level === 5){
return `
`;
}else if(level === 4){
return `
`;
}else{
return `
`;
}
}
const dist1 = 22000 * 22000;
const dist2 = 8000 * 8000;
function AdcdMarker({ data, dispatch, setting, zoom, distSq, layerVisible }) {
const highlight = setting;
let zindexOffset = 1;
if (!data.status) {
zindexOffset = 0;
} else if (data.alarm) {
zindexOffset = 2;
}
useEffect(() => {
//console.log("zoom change",zoom);
}, [zoom]);
useEffect(() => {
const width = 12;
const placeholder = document.getElementById(`marker_tuxiang_${data.id}`);
if (!placeholder) {
return;
}
const ratio = highlight ? 1.2 : 1.0;
const svgMarker = renderMarker(data, { width: width * ratio, highlight });
placeholder.innerHTML = svgMarker;
if (!highlight) {
const el = placeholder.firstChild;
const marker = el.nextSibling;
const markerSVG = marker.querySelector('svg');
const markerRenderer = css(markerSVG, {
enableHardwareAcceleration: false
});
const markerGrowSize = 1.2;
const markerScale = physics({
from: 1,
to: markerGrowSize,
velocity: 20,
spring: 300,
friction: 0.8,
onUpdate: (x) => markerRenderer.set('scale', x),
});
const zindex = zindexmarker.tuxiang + zindexOffset;
marker.addEventListener('mouseenter', () => {
if (placeholder.parentNode.style.zIndex); {
placeholder.parentNode.style.zIndex = zindex + zindexmarker.hilightPlus;
}
markerScale.props.from = 1;
markerScale.props.to = markerGrowSize;
markerScale.start();
});
marker.addEventListener('mouseleave', () => {
if (placeholder.parentNode.style.zIndex); {
placeholder.parentNode.style.zIndex = zindex;
}
markerScale.props.from = markerGrowSize;
markerScale.props.to = 1;
markerScale.start();
});
}
return () => {
placeholder.innerHTML = '';
}
}, [ highlight, zoom, layerVisible ]);
const showPop = () => {
dispatch.runtime.setFeaturePop({
id: data.id,
type: 'adcd',
data,
lgtd: data.lgtd,
lttd: data.lttd,
elev: data.elev,
})
}
let markerZoom;
if (highlight) {
markerZoom = 2;
} else if (zoom) {
markerZoom = (zoom - 10) * 0.5;
} else {
markerZoom = (dist1 - distSq) / (dist1 - dist2) * 2 + 1;
}
if (markerZoom < 1) {
markerZoom = 1;
} else if (markerZoom > 2.5) {
markerZoom = 2.5;
} else {
markerZoom = parseFloat(markerZoom.toFixed(1));
}
return (
<>
{
( (zoom > 8 || distSq < dist2 || highlight) && (data.level === 5 || data.level === 4) &&
// isShow
true
) && (
<>
1 ? ' scale(' + markerZoom + ')' : ''}`,
lineHeight: 1,
zIndex: data.level === 4?6:4,//zindexmarker.tuxiang + zindexOffset + (highlight ? zindexmarker.hilightPlus : 0)
}}
// onClick={showPop}
>
{data?.NAME}
>
)
}
{
( (zoom > 12 || distSq < dist2 || highlight) && data.level === 6 &&
// isShow
true
) && (
<>
1 ? ' scale(' + markerZoom + ')' : ''}`,
lineHeight: 1,
zIndex: 2,//zindexmarker.tuxiang + zindexOffset + (highlight ? zindexmarker.hilightPlus : 0)
}}
// onClick={showPop}
>
{data?.NAME}
>
)
}
>
)
}
export default React.memo(AdcdMarker);