11import { useT } from "@biodiv-platform/naksha-commons" ;
22import React , { useMemo , useState } from "react" ;
3- import { SortableHandle } from "react-sortable-hoc" ;
43import { RWebShare } from "react-web-share" ;
54import { tw } from "twind" ;
5+ import { useSortable } from "@dnd-kit/sortable" ;
6+ import { CSS } from "@dnd-kit/utilities" ;
67
78import useLayers from "../../../hooks/use-layers" ;
89import { GeoserverLayer } from "../../../interfaces" ;
@@ -25,20 +26,14 @@ import GridLegend from "./grid-legend";
2526import { PopoverWrapper } from "./info-popover" ;
2627import LayerItemStyle from "./layer-item-style" ;
2728
28- const DragHandle = SortableHandle ( ( ) => (
29- < div className = { tw `mt-1 w-6 text-center cursor-move` } >
30- < GrabberIcon />
31- </ div >
32- ) ) ;
33-
3429interface LayerItemProps {
3530 item : GeoserverLayer ;
3631 extended ?: boolean ;
3732}
3833
3934declare const window ;
4035
41- export default function LayerItem ( { item, extended } : LayerItemProps ) {
36+ export default function LayerItem ( { item, extended = false } : LayerItemProps ) {
4237 const { t } = useT ( ) ;
4338 const {
4439 layer,
@@ -50,6 +45,14 @@ export default function LayerItem({ item, extended }: LayerItemProps) {
5045 const [ isAdded , setIsAdded ] = useState ( layer . selectedIds . includes ( item . id ) ) ;
5146 const [ isLoading , setIsLoading ] = useState ( false ) ;
5247
48+ const { attributes, listeners, setNodeRef, transform, transition } =
49+ useSortable ( { id : item . id } ) ;
50+
51+ const style = {
52+ transform : CSS . Transform . toString ( transform ) ,
53+ transition,
54+ } ;
55+
5356 const shareData = useMemo (
5457 ( ) =>
5558 mp . canLayerShare
@@ -61,8 +64,7 @@ export default function LayerItem({ item, extended }: LayerItemProps) {
6164 [ item . id ]
6265 ) ;
6366
64- const onToggleLayer = async ( event ) => {
65- event . stopPropagation ( ) ;
67+ const onToggleLayer = async ( ) => {
6668 setIsLoading ( true ) ;
6769 setIsInfoBarOpen ( true ) ;
6870 layer . setSelectedFeatures ( [ ] ) ;
@@ -86,8 +88,11 @@ export default function LayerItem({ item, extended }: LayerItemProps) {
8688
8789 return (
8890 < div
91+ ref = { setNodeRef }
92+ { ...attributes }
93+ { ...listeners }
8994 className = { tw `z-20 p-3 bg-white` }
90- style = { { borderTop : "1px solid #e5e7eb" } }
95+ style = { { borderTop : "1px solid #e5e7eb" , ... style } }
9196 >
9297 < div className = { tw `flex gap-3` } >
9398 < div className = { tw `flex-shrink-0` } >
@@ -97,7 +102,11 @@ export default function LayerItem({ item, extended }: LayerItemProps) {
97102 onChange = { onToggleLayer }
98103 isLoading = { isLoading }
99104 />
100- { extended && < DragHandle /> }
105+ { extended && (
106+ < div className = { tw `mt-1 w-6 text-center cursor-move` } >
107+ < GrabberIcon />
108+ </ div >
109+ ) }
101110 </ div >
102111 < img
103112 className = { tw `flex-shrink-0 overflow-hidden h-16 w-16 p-1 mb-2 object-cover border border-gray-200 rounded` }
@@ -139,7 +148,6 @@ export default function LayerItem({ item, extended }: LayerItemProps) {
139148 children = { < ZoomExtentIcon /> }
140149 />
141150 ) }
142-
143151 < PopoverWrapper item = { item } />
144152 </ div >
145153 </ div >
0 commit comments