Добрый день, пытаюсь сделать drag and drop в react с помощью dnd-react
Есть массив в state:
const cards = [
{id:1 ,name: 'Product A', image: 'pic-001.jpg', entries: [{entry: 'nature', idEntry: f1fz2},{entry: wisdom, idEntry:52f55}],
{id:2 ,name: 'Product B', image: 'pic-002.jpg', entries: [{entry: 'global', idEntry: z2lz1},{entry: eye, idEntry:71d42}],
{id:3 ,name: 'Product C', image: 'pic-003.jpg', entries: [{entry: 'local', idEntry: e34z2},{entry: fridge, idEntry:92f12}],
]
Таким образом я меняю местами карточки
updateCardPosition(cardId, afterId) {
if (cardId !== afterId) {
let cardIndex = this.state.cards.findIndex((card)=>card.id == cardId);
console.log('gj', cardIndex)
let card = this.state.cards[cardIndex];
let afterIndex = this.state.cards.findIndex((card)=>card.id == afterId);
this.setState(update(this.state, {
cards: {
$splice: [
[cardIndex, 1],
[afterIndex, 0, card]
]
}
}));
}
}
Но еще мне нужно менять местами entry в entries, с получением индексов проблем нету( хотя что-то мне подсказывает, что код очень не красив), но как сделать замену в setState?
У меня есть функция
updateEntryPosition(Id, afterId) {
let cardIndex; // индекс карточки в которой меняют положение записи
let entryIndex; // текущий индекс записи
let afterIndex; // будущий индекс записи
this.state.cards.map(card => card.entries.findIndex((entry) => entry.idEntry == Id)).forEach((item,index) => (item>=0) ? [entryIndex, cardIndex]=[item,index] : 0)
this.state.cards.map(card => card.entries.findIndex((entry) => entry.idEntry == afterId)).forEach(item => (item>=0) ? afterIndex=item : 0)
}
this.setState(update(this.state, {
????
}));
}