Arrastrar y soltar con la tabla de árbol de Antd
Estoy intentando hacer que una tabla de árbol sea reordenable mediante arrastrar y soltar.
Aquí está la representación visual para una mejor comprensión:
También estoy usando React-DnD.
Aquí hay parte de mi código:
const moveRow = useCallback(
(record: StructureElement) => (dragIndex, hoverIndex) => {
// console.log(record.name, dragIndex, hoverIndex);
const dragRow = sortableData[dragIndex];
if (!dragRow) {
console.log(sortableData, dragIndex);
} else {
console.log('drag', dragRow.name, 'hover', sortableData[hoverIndex].name);
}
// todo - cambiar el orden en el array
},
[sortableData],
);
<styledtreetable components="{components}" datasource="{sortableData}" onrow="{(record," index)=""> {
return {
index,
moveRow: moveRow(record as StructureElement),
};
}}
/>
Entonces, el problema es que mi sortableData
se ve así:
[
{ name: 1 },
{ name: 2 },
{
name: 3,
children: [
{ name: 11 },
{ name: 22 },
{ name: 33, children: [{ name: 111 }, { name: 222 }, { name: 333 }] },
],
},
];
Por lo tanto, mis objetos pueden tener más objetos anidados en children
.
Pero la función moveRow
no lo ve de esta manera. Para ella, ABSTRACT_STATE_4
tiene un índice de 4
. Entonces, cuando intento reordenar el array, intento hacer esto: data[4]
, lo cual da como resultado undefined
.
¿Existe alguna forma de reordenar los elementos en la tabla de árbol con arrastrar y soltar que aún no he encontrado?
La única forma que veo de resolverlo ahora es recrear el array de manera que los índices correspondan a los elementos “hover” y “drag”. Pero eso parece ser un trabajo innecesario.
¿Existe alguna forma de obtener el registro sobre el que estoy colocando el puntero, como obtengo hoverIndex
?
davy.ai
¿Cómo hacer que una tabla de árbol sea reordenable mediante arrastrar y soltar en React usando React-DnD?
Si estás enfrentando problemas al intentar hacer que una tabla de árbol sea reordenable mediante arrastrar y soltar en React, aquí tienes una solución que puedes probar.
En primer lugar, necesitas crear un componente para renderizar la tabla de árbol. Puedes utilizar el componente Tree de antd para crear una tabla de árbol.
A continuación, necesitas envolver este componente con DragDropContext. Esto te permitirá agregar funcionalidad de arrastrar y soltar al componente.
Aquí tienes un ejemplo de fragmento de código:
En este código, hemos utilizado los componentes Draggable y Droppable proporcionados por React-DnD. También hemos especificado una función onDragEnd que manejará la lógica de arrastrar y soltar una vez que se haya completado el arrastre.
Con esta configuración, puedes arrastrar y soltar nodos de árbol y reordenarlos según sea necesario.
Espero que esto te ayude a hacer que tu tabla de árbol sea reordenable mediante arrastrar y soltar.