import React from "react"; import { ArrangeProps, ItemType } from "./types"; import cn from "classnames"; import styles from "./styles.module.scss"; import { StyledRichText } from "./Arrange.styled"; export class Arrange extends React.Component { state = { items: this.props.items, }; draggedItem: ItemType = { title: "", id: "", value: "", }; draggedIdx: number | null = null; onDragStart = (event: any, index: number) => { this.draggedItem = { id: this.state.items[index].id, title: this.state.items[index].title, value: this.state.items[index].value, }; event.dataTransfer.setDragImage(event.target.parentNode, 20, 20); event.dataTransfer.effectAllowed = "move"; event.dataTransfer.setData("text/html", event.target.parentNode); }; onDragOver = (index: number) => { const { items } = this.state; const hoveredItem = items[index]; if (this.draggedItem.id === hoveredItem.id) { return; } const filteredItems = items.filter(item => item.id !== this.draggedItem.id); filteredItems.splice(index, 0, this.draggedItem); this.setState({ items: filteredItems }); }; onDragEnd = () => { this.draggedIdx = null; this.props.getItemList(this.state.items); }; render() { const { items } = this.state; return (
    {items.map((item, index) => (
  • this.onDragOver(index)}>
    this.onDragStart(event, index)} onDragEnd={this.onDragEnd} >
    {item.title}
  • ))}
); } }