From 1307ff407e127ce9be8c6031b867679cc7f908a7 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 14 Jan 2020 11:55:41 +0700 Subject: [PATCH] refactored stickers --- src/containers/map/Map/index.tsx | 1 - src/containers/map/Sticker/index.tsx | 34 ++++++++------------------- src/containers/map/Stickers/index.tsx | 15 ++++++------ 3 files changed, 18 insertions(+), 32 deletions(-) diff --git a/src/containers/map/Map/index.tsx b/src/containers/map/Map/index.tsx index f775db1..1671d2d 100644 --- a/src/containers/map/Map/index.tsx +++ b/src/containers/map/Map/index.tsx @@ -68,7 +68,6 @@ const MapUnconnected: React.FC = ({ void; index: number; @@ -28,7 +27,6 @@ const getX = e => : { pageX: e.pageX, pageY: e.pageY }; const Sticker: React.FC = ({ - map, sticker, index, mapSetSticker, @@ -60,11 +58,11 @@ const Sticker: React.FC = ({ const onDragStart = React.useCallback(() => { layer.dragging.disable(); - map.dragging.disable(); - map.disableClicks(); + MainMap.dragging.disable(); + MainMap.disableClicks(); setDragging(true); - }, [setDragging, layer, map]); + }, [setDragging, layer, MainMap]); const onDragStop = React.useCallback( event => { @@ -80,16 +78,16 @@ const Sticker: React.FC = ({ }); layer.dragging.enable(); - map.dragging.enable(); + MainMap.dragging.enable(); - setTimeout(map.enableClicks, 100); + setTimeout(MainMap.enableClicks, 100); }, - [setDragging, layer, map, sticker, angle] + [setDragging, layer, MainMap, sticker, angle] ); const onMoveStarted = React.useCallback(() => { - map.disableClicks(); - }, [onChange, sticker, map]); + MainMap.disableClicks(); + }, [onChange, sticker, MainMap]); const onMoveFinished = React.useCallback( event => { @@ -100,9 +98,9 @@ const Sticker: React.FC = ({ latlng: target.getLatLng(), }); - map.enableClicks(); + MainMap.enableClicks(); }, - [onChange, sticker, map] + [onChange, sticker, MainMap] ); const onDrag = React.useCallback( @@ -132,18 +130,6 @@ const Sticker: React.FC = ({ updateAngle(sticker.angle); angle.current = sticker.angle; }, [sticker.angle]) - // Updates html element accroding to current angle - // React.useEffect(() => { - // if (!stickerImage.current || !stickerArrow.current) return; - - // const x = Math.cos(angle + Math.PI) * 56 - 30; - // const y = Math.sin(angle + Math.PI) * 56 - 30; - - // stickerImage.current.style.left = String(6 + x); - // stickerImage.current.style.top = String(6 + y); - - // stickerArrow.current.style.transform = `rotate(${angle + Math.PI}rad)`; - // }, [stickerArrow, stickerImage, angle]); // Attaches onMoveFinished event to item React.useEffect(() => { diff --git a/src/containers/map/Stickers/index.tsx b/src/containers/map/Stickers/index.tsx index 6756bec..bd6fa33 100644 --- a/src/containers/map/Stickers/index.tsx +++ b/src/containers/map/Stickers/index.tsx @@ -3,32 +3,33 @@ import { IStickerDump } from '~/redux/map/types'; import { FeatureGroup, Map } from 'leaflet'; import { Sticker } from '~/containers/map/Sticker'; import { mapSetSticker, mapDropSticker } from '~/redux/map/actions'; -import { MapContainer } from '~/constants/map'; +import { MapContainer, MainMap } from '~/constants/map'; interface IProps { stickers: IStickerDump[]; is_editing: boolean; - map: MapContainer; mapSetSticker: typeof mapSetSticker; mapDropSticker: typeof mapDropSticker; } const Stickers: React.FC = React.memo( - ({ stickers, is_editing, map, mapSetSticker, mapDropSticker }) => { + ({ stickers, is_editing, mapSetSticker, mapDropSticker }) => { const [layer, setLayer] = React.useState(null); React.useEffect(() => { - if (!map) return; + if (!MainMap) return; - setLayer(new FeatureGroup().addTo(map)); - }, [map]); + const item = new FeatureGroup().addTo(MainMap.stickerLayer); + setLayer(item); + + return () => MainMap.stickerLayer.removeLayer(item); + }, [MainMap]); return (
{layer && stickers.map((sticker, index) => (