Skip to content

Commit cb7947a

Browse files
committed
test: ⚗️ testing cca naksha upgrade
1 parent 2d3fc43 commit cb7947a

File tree

3 files changed

+75
-26
lines changed

3 files changed

+75
-26
lines changed

packages/naksha-mapbox-list/package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,18 @@
3434
"typescript": "^4.7.3"
3535
},
3636
"dependencies": {
37-
"@bumaga/tabs": "^0.2.0",
3837
"@biodiv-platform/naksha-commons": "*",
38+
"@bumaga/tabs": "^0.2.0",
39+
"@dnd-kit/core": "^6.3.1",
40+
"@dnd-kit/modifiers": "^9.0.0",
41+
"@dnd-kit/sortable": "^10.0.0",
42+
"@dnd-kit/utilities": "^3.2.2",
3943
"boundingbox": "^1.4.0",
4044
"clsx": "^1.1.1",
4145
"colorbrewer": "^1.5.2",
4246
"geohash": "^0.0.1",
4347
"highlight-search-result": "^1.0.4",
4448
"immer": "^9.0.15",
45-
"react-sortable-hoc": "^2.0.0",
4649
"react-tiny-popover": "^7.0.1",
4750
"react-virtual": "^2.10.4",
4851
"react-virtualized-auto-sizer": "^1.0.6",

packages/naksha-mapbox-list/src/components/sidebar/common/layer-item.tsx

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { useT } from "@biodiv-platform/naksha-commons";
22
import React, { useMemo, useState } from "react";
3-
import { SortableHandle } from "react-sortable-hoc";
43
import { RWebShare } from "react-web-share";
54
import { tw } from "twind";
5+
import { useSortable } from "@dnd-kit/sortable";
6+
import { CSS } from "@dnd-kit/utilities";
67

78
import useLayers from "../../../hooks/use-layers";
89
import { GeoserverLayer } from "../../../interfaces";
@@ -25,20 +26,14 @@ import GridLegend from "./grid-legend";
2526
import { PopoverWrapper } from "./info-popover";
2627
import 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-
3429
interface LayerItemProps {
3530
item: GeoserverLayer;
3631
extended?: boolean;
3732
}
3833

3934
declare 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>
Lines changed: 49 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,54 @@
11
import React from "react";
2-
import { SortableContainer, SortableElement } from "react-sortable-hoc";
2+
import {
3+
DndContext,
4+
closestCenter,
5+
PointerSensor,
6+
useSensor,
7+
useSensors,
8+
} from "@dnd-kit/core";
9+
import {
10+
arrayMove,
11+
SortableContext,
12+
verticalListSortingStrategy,
13+
} from "@dnd-kit/sortable";
14+
import { restrictToVerticalAxis } from "@dnd-kit/modifiers";
315

416
import LayerItem from "../common/layer-item";
517

6-
export const SelectedItem = SortableElement(({ item, extended }) => (
7-
<LayerItem item={item} extended={extended} />
8-
));
18+
interface Props {
19+
layerList: any[];
20+
setLayerList: (layers: any[]) => void;
21+
}
922

10-
export const SelectedItemList = SortableContainer(({ layerList }) => (
11-
<div>
12-
{layerList.map((item, index) => (
13-
<SelectedItem key={item.id} index={index} item={item} extended={true} />
14-
))}
15-
</div>
16-
));
23+
export default function SelectedItemList({ layerList, setLayerList }: Props) {
24+
const sensors = useSensors(useSensor(PointerSensor));
25+
26+
const handleDragEnd = (event: any) => {
27+
const { active, over } = event;
28+
if (active.id !== over?.id) {
29+
const oldIndex = layerList.findIndex((i) => i.id === active.id);
30+
const newIndex = layerList.findIndex((i) => i.id === over.id);
31+
setLayerList(arrayMove(layerList, oldIndex, newIndex));
32+
}
33+
};
34+
35+
return (
36+
<DndContext
37+
sensors={sensors}
38+
collisionDetection={closestCenter}
39+
modifiers={[restrictToVerticalAxis]}
40+
onDragEnd={handleDragEnd}
41+
>
42+
<SortableContext
43+
items={layerList.map((l) => l.id)}
44+
strategy={verticalListSortingStrategy}
45+
>
46+
<div>
47+
{layerList.map((item) => (
48+
<LayerItem key={item.id} item={item} extended />
49+
))}
50+
</div>
51+
</SortableContext>
52+
</DndContext>
53+
);
54+
}

0 commit comments

Comments
 (0)