ソートについて
Q&A
Closed
このようなdrag and dropでできるsortがあるのですが、いまのままだと、4から0のところに持っていくと、4は0になりますが、0は4になり非常に変になります。
どのようにして解決できますでしょうか?
a[oldIndex].order = newIndex;が動かした数字が最新の数になるものなのですが、この動かす側は問題ないですが、別のものはずれてしまいます。
コメントアウトしているところも色々試しましたがうまく行かなかったです。
const onSortEnd = ({ oldIndex, newIndex }) => {
if (oldIndex !== newIndex) {
const a = [...leftTableData];
console.log('befiore items: ', a, oldIndex, newIndex);
a[oldIndex].order = newIndex;
a[newIndex].order = oldIndex;
// if (newIndex < oldIndex) {
// const filter1 = a.filter((i) => (i.order as number) < oldIndex);
// for (let i = 0; i < filter1.length; i += 1) {
// if (filter1[i].order === newIndex) {
// (filter1[i].order as number) = 0;
// } else {
// (filter1[i].order as number) += 1;
// }
// }
// // a[newIndex].order = newIndex + 1;
// }
// if (newIndex > oldIndex) {
// a[newIndex].order = newIndex - 1;
// }
console.log('befiore 1 items: ', leftTableData, oldIndex, newIndex);
const newData = arrayMoveImmutable(
([] as MockType[]).concat(a),
oldIndex,
newIndex,
).filter((el) => !!el);
console.log('befiore 2 items: ', newData, oldIndex, newIndex);
setLeftTableData(newData);
}
};
0