Как обновить порядок сущностей в NGRX? угловой 9

Я создаю приложение, в котором у меня есть N столбцов (N списков элементов), и с помощью перетаскивания из углового материала я могу перемещать элементы между ними. Я также использую в своем приложении NGRX и EntityAdapter.

Я хотел бы спросить, как я могу правильно обновить порядок элементов при перемещении объекта?

Пример: перемещение первого элемента из столбца «Задачи». этот предмет следует положить между почистить зубы и собрать продукты. введите здесь описание изображения

Сейчас я знаю, как обновить столбец каждого элемента моего списка. Единственное, чего я не знаю, так это как поставить его в правильном порядке (сортировка по умолчанию, поэтому, вероятно, по идентификатору)

Интерфейс элемента:

export interface Item{
 id:string;
 title:string;
 columnId:string;
}

диспетчерское действие для обновления columnId:

  drop(event: CdkDragDrop<string[]>) {
        const droppedItem: SavedJob = event.item.data;
        const previousColumn = event.previousContainer.id;
        const currentColumn = event.container.id;
        this.store.dispatch(
            updateColumn({
                updates: {
                    id: droppedItem.id,
                    changes: {
                        columnId: currentColumn
                    }
                }
            })
        );

редуктор:

on(SavedJobsActions.updateColumn,(state,action)=>{
        return savedJobsAdapter.updateOne(action.updates,{
            ...state,
            entities:{
                ...state.entities,
                [action.updates.id]:{
                    ...state.entities[action.updates.id]
                }
            }
            }
        )
    })

Как мне правильно обновить как columnId, так и порядок каждого элемента? Я знаю, что должен добавить ключ порядка для каждого элемента, но тогда может быть сложно обновить значение порядка для каждого столбца.


person Mateusz    schedule 07.10.2020    source источник
comment
В документах есть немного информации о добавлении sortComparer. Возможно, это имело бы для вас какую-то ценность.   -  person R. Richards    schedule 07.10.2020
comment
Здравствуйте, я знаю sortComparer, но мне интересно, как обновить остальные значения? Каждый элемент в каждом столбце получил порядок: 1,2,3 и т.д. и как обрабатывать это обновление заказа?   -  person Mateusz    schedule 07.10.2020


Ответы (1)


См. https://ngrx.io/guide/entity/adapter: sortComparer: Функция сравнения, используемая для сортировки коллекции. Функция сравнения необходима только в том случае, если коллекцию необходимо отсортировать перед отображением. Установите значение false, чтобы оставить коллекцию несортированной, что более эффективно при операциях CRUD.

Поэтому, если вы вставите новое значение, весь ваш словарь должен быть отсортирован, если вы предоставите sortComparer. В противном случае, я полагаю, по умолчанию используется идентификатор. Реализация Comparer зависит от того, как вы хотите сортировать, но это должно выглядеть примерно так (при условии, что columnId никогда не равен нулю).

createEntityAdapter({
   sortComparer: (item1: Item, item2: Item) => item1.columnId.localeCompare(item2.columnId),
})
person Loop    schedule 05.04.2021