Необходимо увеличивать like или dislike для каждой картинки, но сейчас происходит увеличение общее а не для каждой картинки индивидуально по id
dogs-list.component.ts
public onIncreaseRaiting(dog: DogDTO): void {
this._dogStoreFacade.increaseDogRating(dog);
};
public onDecreaseRating(dog: DogDTO): void {
this._dogStoreFacade.decreaseDogRating(dog);
};
dog.facade.ts
public increaseDogRating(dog : DogDTO): void {
this._dogStore.dispatch(dogActions.increaseDogRatingRequest({ dog }));
};
public decreaseDogRating(dog: DogDTO): void {
this._dogStore.dispatch(dogActions.decreaseDogRatingRequest({ dog }));
};
dog.actions.ts
export const increaseDogRatingRequest = createAction(
DogActionsType.INCREASE_DOG_RATING_REQUEST,
props<{ dog: DogDTO }>(),
);
export const increaseDogRatingSuccess = createAction(
DogActionsType.INCREASE_DOG_RATING_SUCCESS,
props<{ dog: DogDTO }>(),
);
export const decreaseDogRatingRequest = createAction(
DogActionsType.DECREASE_DOG_RATING_REQUEST,
props<{ dog: DogDTO }>(),
)
export const decreaseDogRatingSuccess = createAction(
DogActionsType.DECREASE_DOG_RATING_SUCCESS,
props<{ dog: DogDTO }>(),
);
dog.reducer.ts
const _dogReduserInternal = createReducer(
INITIAL_DOG_STATE,
on(dogActions.increaseDogRatingSuccess, (state, { dog }) => {
const currentDog = dog;
let like = currentDog.rating.like + 1;
let dislike = currentDog.rating.dislike;
return Object.assign({}, state, {
rating: {
like: like,
dislike: dislike,
}
})
}),
on(dogActions.decreaseDogRatingSuccess, (state, { dog }) => {
const currentDog = dog;
let like = currentDog.rating.like;
let dislike = currentDog.rating.dislike + 1;
return Object.assign({}, state, {
rating: {
like: like,
dislike: dislike,
}
})
}),
);
dog.state.ts
export const INITIAL_DOG_STATE: DogState = {
dogs: [],
rating: {
like: 0,
dislike: 0
},
}
dog.effects.ts
export class DogEffects {
increaseRating$: Observable<Action> = createEffect(() => this._actions$
.pipe(
ofType(dogActions.DogActionsType.INCREASE_DOG_RATING_REQUEST),
switchMap((action: any) => {
return this._facadeService.updateDogRating(action.dog)
.pipe(
map(() => dogActions.increaseDogRatingSuccess({ dog: action.dog })),
catchError((error) => of(sharedActions.setErrorMessage(error))),
)
}
)
),
{ useEffectsErrorHandler: false }
);
decreaseRating$: Observable<Action> = createEffect(() => this._actions$
.pipe(
ofType(dogActions.DogActionsType.DECREASE_DOG_RATING_REQUEST),
switchMap((action: any) => {
return this._facadeService.updateDogRating(action.dog)
.pipe(
map(() => dogActions.decreaseDogRatingSuccess({ dog: action.dog
})),
catchError((error) => of(sharedActions.setErrorMessage(error))),
)
}
)
),
{ useEffectsErrorHandler: false }
);
}