import React, { useState } from "react"; import { DragDropContext, Droppable, DropResult } from "react-beautiful-dnd"; import Link, { EditableLink } from "components/Editor/Link"; import { useDragDrop } from "./useDragDrop"; import equal from "fast-deep-equal"; interface EditorProps { links: EditableLink[]; setLinks: React.Dispatch>; } const Editor: React.FC = ({ links, setLinks }) => { const [formState, setFormState] = useState(links); const { displayDragDrop } = useDragDrop(); const handleOnDragEnd = (result: DropResult) => { if (!result?.destination) return; const items = Array.from(formState); const [reorderedItem] = items.splice(result.source.index, 1); items.splice(result.destination.index, 0, reorderedItem); setFormState(items); }; /*note that we need to make the new links name render with nothing*/ const handleOnClickAdd = () => setFormState([ ...formState, { name: "", url: "", clicks: 0, active: true, }, ]); // useEffect(() => { // setFormState(links); // }, [links]); const onSubmit = () => { // const res = await updateLinks(formState); // setLinks(res.data); }; const didEdit = !equal(formState, links); console.log({ formState, didEdit }); return (
{/* add link button */} {displayDragDrop && ( {(provided) => (
{formState.map((link, index) => ( setFormState([ ...formState.slice(0, index), newLink, ...formState.slice(index + 1), ]) } onDelete={() => setFormState([ ...formState.slice(0, index), ...formState.slice(index + 1), ]) } /> ))} {provided.placeholder}
)}
)}
); }; export default Editor;