Строгий менеджер состояний для приложений на javascript
По умолчанию хранилище возвращает сущности в том порядке, в котором они поступили с сервера. Добавленные вами объекты помещаются в конец коллекции.
Вы можете предпочесть получение сущностей из хранилища в каком-то другом порядке, предоставив опцию sortBy, которая может основываться на ключе объекта или функции сравнения.
Akita будет хранить коллекцию в порядке, установленном вашим ключом.
Вы можете установить его один раз для всего запроса:
import { QueryConfig, Order } from '@datorama/akita';
@QueryConfig({
sortBy: 'price',
sortByOrder: Order.ASC // Order.DESC
})
export class ProductsQuery extends QueryEntity<State, Product> {
constructor(protected store: ProductsStore) {
super(store);
}
}
Или же вы можете сделать его динамичным при использовании функции selectAll()
:
this.products$ = this.sortControl.valueChanges.pipe(
startWith('title'),
switchMap((sortBy) => this.productsQuery.selectAll())
);
Функция запроса sortBy также передает все состояние в качестве третьего аргумента, давая вам возможность вернуть другую функцию sortBy в зависимости от текущего состояния. Например:
const sortBy = (a, b, state) => (state.sortyByPrice ? sortByPrice(a, b) : sortById(a, b));
// с QueryConfig
@QueryConfig({ sortBy })
// с selectAll
queryTodos.selectAll({ sortBy });