Store Features
Generates necessary state, computed and methods for sorting locally entities in the store.
Requires withEntities to be present in the store.
Kind: global function
Import the withEntitiesLocalSort trait from @ngrx-traits/signals
.
import { withEntitiesLocalSort } from '@ngrx-traits/signals';
const entity = entityConfig({
entity: type<T>(),
collection: 'users'
})
const store = signalStore(
withEntities(entity),
withEntitiesLocalSort({
...entity,
defaultSort: {field: 'name', direction: 'asc'}
})
);
To use you generally need either a sort dropdown if is a list or a table where clicking on the columns headers sorts, bellow is how s used with a dropdown (you can find full source code in the examples folder in github):
<users-sort-dropdown
[sort]="store.usersSort()"
(sortChange)="store.sortUsersEntities({ sort: $event })"
/>
... show products list
You can mix this feature with other local store features like withEntitiesLocalFilter, withEntitiesLocalPagination, etc.
const productsEntityConfig = entityConfig({
entity: type<Product>(),
collection: 'products',
});
export const ProductsLocalStore = signalStore(
{ providedIn: 'root' },
withEntities(productsEntityConfig),
withCallStatus({ ...productsEntityConfig, initialValue: 'loading' }),
withEntitiesLocalPagination({
...productsEntityConfig,
pageSize: 5,
}),
withEntitiesLocalFilter({
...productsEntityConfig,
defaultFilter: { search: '' },
filterFn: (entity, filter) =>
!filter?.search ||
entity?.name.toLowerCase().includes(filter?.search.toLowerCase()),
}),
withEntitiesLocalSort({
...productsEntityConfig,
defaultSort: { field: 'name', direction: 'asc' },
}),
withEntitiesLoadingCall({
...productsEntityConfig,
fetchEntities: () => {
return inject(ProductService)
.getProducts()
.pipe(map((d) => d.resultList));
},
}),
);
To know more how it mixes and works with other local store features, check Working with Entities section.
This trait receives an object or factory to allow specific configurations:
Property | Description | Value |
---|---|---|
entity | The entity type | type<T>() |
collection | The name of the collection. Optional | string |
defaultSort | The initial sort config. | { field: string; direction: 'asc' | 'desc' | '' } |
Generates the following signals
entitiesSort: Signal<{ field: string; pageSize: direction: 'asc' | 'desc' | '' }>;
If collection provided, the following signals are generated, example: users
usersSort: Signal<{ field: string; pageSize: direction: 'asc' | 'desc' | '' }>;
Generates the following methods
sortEntities: ({sort: { field: string; pageSize: direction: 'asc' | 'desc' | ''}}) => void;
If collection provided, the following methods are generated, example: users
sortUsers: ({sort: { field: string; pageSize: direction: 'asc' | 'desc' | ''}}) => void;