@Ngrx/Entity
[Début de la branche step-12]
const ArrayTodos = [
{ id: 1, title: 'blabla' },
// [...]
];
const EntityTodos = {
id : { id: 1, title: 'blabla'}
};npm install @ngrx/entity --save OR yarn add @ngrx/entity --dev// [...]
import { createEntityAdapter, EntityAdapter, EntityState } from '@ngrx/entity';
export interface TodoListStateEntity extends EntityState<Todo> {
loading: boolean;
loaded: boolean;
selectedTodo: Todo;
logs: {
type: string;
message: string;
};
}
export const TodoListAdapter: EntityAdapter<Todo> = createEntityAdapter<Todo>({
sortComparer: false
});
export const initialState: TodoListStateEntity = TodoListAdapter.getInitialState({
loading: false,
loaded: false,
selectedTodo: undefined,
logs: undefined
});
/*
const initialState: TodoListState = {
data: [],
loading: false,
loaded: false,
selectedTodo: undefined,
logs: undefined
};
*/
export function todosReducer(
state = initialState,
action: TodoListModule.Actions
): TodoListStateEntity {
switch (action.type) {
// [...]
case TodoListModule.ActionTypes.SUCCESS_INIT_TODOS:
return {
...TodoListAdapter.addMany(action.payload, state),
// [...]
};
// [...]
case TodoListModule.ActionTypes.SUCCESS_CREATE_TODOS:
return {
...TodoListAdapter.addOne(action.payload, state),
// [...]
};
case TodoListModule.ActionTypes.SUCCESS_UPDATE_TODO:
const { id, ...changes } = action.payload;
return {
...TodoListAdapter.updateOne({id: id, changes: changes}, state),
// [...]
};
case TodoListModule.ActionTypes.SUCCESS_DELETE_TODO:
return {
...TodoListAdapter.removeOne(action.payload, state),
// [...]
};
// [...]
}
export const {
// select the array of todo ids
selectIds: selectTodosIds,
// select the dictionary of todo entities
selectEntities: selectTodosEntities,
// select the array of todo
selectAll: selectTodos,
selectTotal: selectTotalTodos
} = TodoListAdapter.getSelectors();Last updated