如何在firebase firestore中构建拖放数据



我想为我的react firebase应用程序添加实时拖放支持。现在的结构是这样的,我有"sessions"集合,在它下面有一个"ideas"集合,它有多个字段,我正在尝试添加对"idea"的拖放支持。

列名在我的情况下并不重要,当然我会一直有5列,目前我的拖放支持在没有更新firestore的情况下运行良好。在这一点上,我不确定如何构建数据。在本地,我的数据结构如下:

[[{single idea}, {single idea}], [{single idea}], [], [], [], []]

您可以将数组视为列,并且它的元素在列中排序。我试着在想法中添加列和顺序字段,但我认为不可能正确更新它。

也许我可以获得这样的数据结构:

[{col1: [{}, {},]}, {col2: [{}]}]

这就像你有一个数组,它下面有一个以列名为键值的映射,而在它下面有另一个具有概念映射的数组。同样,我不确定如何实现这样的结构,这里是我的重新排序和移动功能:

重新排序:用于对列内的元素进行排序

const reorder = (list, startIndex, endIndex) => {
const result = Array.from(list);
const [removed] = result.splice(startIndex, 1);
result.splice(endIndex, 0, removed);
console.log(result);
return result;
};

移动:将元素移动到其他列

const move = (source, destination, droppableSource, droppableDestination) => {
const sourceClone = Array.from(source);
const destClone = Array.from(destination);
const [removed] = sourceClone.splice(droppableSource.index, 1);
destClone.splice(droppableDestination.index, 0, removed);
const result = {};
result[droppableSource.droppableId] = sourceClone;
result[droppableDestination.droppableId] = destClone;
return result;
};

我建议您看看这个答案,其中有各种替代方案。

其中一个建议是创建一个具有所需顺序的数组,例如初始顺序:[1,2,3,4,5],用户移动后:[2,1,4,3,5],并将其存储在单独集合中文档内的数组中,以避免重新更新每次移动中的所有元素。

最新更新