# Dans les reducers
### Ajout de la propriété dans l'interface du fichier reducers.ts
```
export interface CoursesState extends EntityState<Course> {
allCoursesLoaded: boolean;
}
```
### Définition de la valeur initiale
```
export const initialCoursesState: CoursesState = adapter.getInitialState({
allCoursesLoaded: false
});
```
# Dans les selectors
```
export const allCoursesLoaded = createSelector(
selectCoursesState,
coursesState => coursesState.allCoursesLoaded
);
```
# Dans les effects
```
@Effect()
loadAllCourses$ = this.actions$
.pipe(
ofType<AllCoursesRequested>(CourseActionTypes.AllCoursesRequested), //On écoute l'action AllCoursesRequested
withLatestFrom(this.store.pipe(select(allCoursesLoaded))), // On ajoute au flux la proprièté allCoursesLoaded
filter(([action, allCoursesLoaded]) => !allCoursesLoaded), // On filtre si si la requete à déjà été faite
mergeMap(() => this.coursesService.findAllCourses()), // Si ca n'est pas le cas, on fait appel au service pour l'appel API
map(courses => new AllCoursesLoaded({courses})), // On recupère la valeur retourné par le service et on la dispatch (@Effect() dispach quand l'observable emet si on lui dit pas dispatch: false)
catchError(err => {
console.log('error loading all courses ', err);
return throwError(err);
})
);
```