Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | 151x 151x 151x 151x 755x | import { useState } from "react";
import {
UseFormGetValues,
UseFormSetValue,
UseFormRegister,
FieldValues,
UseFieldArrayRemove,
UseFieldArrayMove,
} from "react-hook-form";
import {
DndContext,
closestCenter,
PointerSensor,
useSensor,
useSensors,
DragEndEvent,
} from "@dnd-kit/core";
import {
arrayMove,
SortableContext,
horizontalListSortingStrategy,
} from "@dnd-kit/sortable";
import Screenshot from "./Screenshot";
type Props = {
screenshots: Array<{ id: string }>;
screenshotUrls: Array<string>;
getValues: UseFormGetValues<FieldValues>;
removeScreenshotUrl: UseFieldArrayRemove;
setValue: UseFormSetValue<FieldValues>;
register: UseFormRegister<FieldValues>;
setImage: (arg: File) => void;
moveScreenshotUrl: UseFieldArrayMove;
};
function ScreenshotList({
screenshots,
screenshotUrls,
getValues,
removeScreenshotUrl,
setValue,
register,
setImage,
moveScreenshotUrl,
}: Props) {
const [items, setItems] = useState(screenshots);
const sensors = useSensors(useSensor(PointerSensor));
const handleDragEnd = (e: DragEndEvent) => {
const { active, over } = e;
if (active && over && active?.id !== over?.id) {
const oldIndex = items.findIndex((item) => item.id === active.id);
const newIndex = items.findIndex((item) => item.id === over.id);
moveScreenshotUrl(oldIndex, newIndex);
setItems((items) => {
return arrayMove(items, oldIndex, newIndex);
});
}
};
return (
<DndContext
sensors={sensors}
collisionDetection={closestCenter}
onDragEnd={handleDragEnd}
>
<SortableContext items={items} strategy={horizontalListSortingStrategy}>
<div className="p-listing-images">
{items.map((field, index) => (
<Screenshot
key={field.id}
field={field}
index={index}
screenshotUrls={screenshotUrls}
getValues={getValues}
removeScreenshotUrl={removeScreenshotUrl}
setValue={setValue}
register={register}
setImage={setImage}
/>
))}
</div>
</SortableContext>
</DndContext>
);
}
export default ScreenshotList;
|