Необходимо увеличивать 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 }
    );
}

Ответы (0 шт):