Skip to content

Commit

Permalink
fix: Article fovorite/unfavorite duplicated effects
Browse files Browse the repository at this point in the history
  • Loading branch information
stefanoslig committed Aug 5, 2023
1 parent 953ffb5 commit 4ca2726
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 74 deletions.
1 change: 1 addition & 0 deletions libs/articles/data-access/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ export * from './lib/+state/article-edit/article-edit.actions';
export * as articleEditEffects from './lib/+state/article-edit/article-edit.effects';
export * as articleListEffects from './lib/+state/article-list/article-list.effects';
export * as articleEffects from './lib/+state/article/article.effects';
export * as articlesEffects from './lib/+state/articles.effects';
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ import { catchError, concatMap, map, of } from 'rxjs';
import { Store } from '@ngrx/store';
import { ArticlesService } from '../../services/articles.service';
import { articleListQuery } from './article-list.selectors';
import { articlesActions } from '../articles.actions';
import { ActionsService } from '../../services/actions.service';

export const setListPage$ = createEffect(
(actions$ = inject(Actions)) => {
Expand Down Expand Up @@ -48,33 +46,3 @@ export const loadArticles$ = createEffect(
},
{ functional: true },
);

export const favorite$ = createEffect(
(actions$ = inject(Actions), actionsService = inject(ActionsService)) => {
return actions$.pipe(
ofType(articlesActions.favorite),
concatMap(({ slug }) =>
actionsService.favorite(slug).pipe(
map((response) => articlesActions.favoriteSuccess({ article: response.article })),
catchError((error) => of(articlesActions.favoriteFailure(error))),
),
),
);
},
{ functional: true },
);

export const unFavorite$ = createEffect(
(actions$ = inject(Actions), actionsService = inject(ActionsService)) => {
return actions$.pipe(
ofType(articlesActions.unfavorite),
concatMap(({ slug }) =>
actionsService.unfavorite(slug).pipe(
map((response) => articlesActions.unfavoriteSuccess({ article: response.article })),
catchError((error) => of(articlesActions.unfavoriteFailure(error))),
),
),
);
},
{ functional: true },
);
Original file line number Diff line number Diff line change
@@ -1,44 +1,13 @@
import { inject } from '@angular/core';
import { Actions, concatLatestFrom, createEffect, ofType } from '@ngrx/effects';
import { catchError, concatMap, exhaustMap, map, of, tap } from 'rxjs';
import { articlesActions } from '../articles.actions';
import { ActionsService } from '../../services/actions.service';
import { articleActions } from './article.actions';
import { ArticlesService } from '../../services/articles.service';
import { formsActions, ngrxFormsQuery } from '@realworld/core/forms/src';
import { Store } from '@ngrx/store';
import { Router } from '@angular/router';

export const favorite$ = createEffect(
(actions$ = inject(Actions), actionsService = inject(ActionsService)) => {
return actions$.pipe(
ofType(articlesActions.favorite),
concatMap(({ slug }) =>
actionsService.favorite(slug).pipe(
map((response) => articlesActions.favoriteSuccess({ article: response.article })),
catchError((error) => of(articlesActions.favoriteFailure(error))),
),
),
);
},
{ functional: true },
);

export const unFavorite$ = createEffect(
(actions$ = inject(Actions), actionsService = inject(ActionsService)) => {
return actions$.pipe(
ofType(articlesActions.unfavorite),
concatMap(({ slug }) =>
actionsService.unfavorite(slug).pipe(
map((response) => articlesActions.unfavoriteSuccess({ article: response.article })),
catchError((error) => of(articlesActions.unfavoriteFailure(error))),
),
),
);
},
{ functional: true },
);

export const unFollow$ = createEffect(
(actions$ = inject(Actions), actionsService = inject(ActionsService)) => {
return actions$.pipe(
Expand Down
35 changes: 35 additions & 0 deletions libs/articles/data-access/src/lib/+state/articles.effects.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import { inject } from '@angular/core';
import { Actions, createEffect, ofType } from '@ngrx/effects';
import { catchError, concatMap, map, of } from 'rxjs';
import { articlesActions } from './articles.actions';
import { ActionsService } from '../services/actions.service';

export const favorite$ = createEffect(
(actions$ = inject(Actions), actionsService = inject(ActionsService)) => {
return actions$.pipe(
ofType(articlesActions.favorite),
concatMap(({ slug }) =>
actionsService.favorite(slug).pipe(
map((response) => articlesActions.favoriteSuccess({ article: response.article })),
catchError((error) => of(articlesActions.favoriteFailure(error))),
),
),
);
},
{ functional: true },
);

export const unFavorite$ = createEffect(
(actions$ = inject(Actions), actionsService = inject(ActionsService)) => {
return actions$.pipe(
ofType(articlesActions.unfavorite),
concatMap(({ slug }) =>
actionsService.unfavorite(slug).pipe(
map((response) => articlesActions.unfavoriteSuccess({ article: response.article })),
catchError((error) => of(articlesActions.unfavoriteFailure(error))),
),
),
);
},
{ functional: true },
);
4 changes: 2 additions & 2 deletions libs/articles/feature-article/src/lib/article.routes.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import { Routes } from '@angular/router';
import { provideEffects } from '@ngrx/effects';
import { provideState } from '@ngrx/store';
import { articleEffects, articleFeature } from '@realworld/articles/data-access';
import { articleEffects, articleFeature, articlesEffects } from '@realworld/articles/data-access';
import { ArticleGuardService } from './article-guard.service';
import { ArticleComponent } from './article.component';

export const ARTICLE_ROUTES: Routes = [
{
path: ':slug',
component: ArticleComponent,
providers: [provideState(articleFeature), provideEffects(articleEffects)],
providers: [provideState(articleFeature), provideEffects(articleEffects, articlesEffects)],
canActivate: [ArticleGuardService],
},
];
4 changes: 2 additions & 2 deletions libs/home/src/lib/home.routes.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { Routes } from '@angular/router';
import { provideEffects } from '@ngrx/effects';
import { provideState } from '@ngrx/store';
import { articleListEffects, articleListFeature } from '@realworld/articles/data-access';
import { articleListEffects, articleListFeature, articlesEffects } from '@realworld/articles/data-access';
import { HomeComponent } from './home.component';

export const HOME_ROUTES: Routes = [
{
path: '',
component: HomeComponent,
providers: [provideState(articleListFeature), provideEffects(articleListEffects)],
providers: [provideState(articleListFeature), provideEffects(articleListEffects, articlesEffects)],
},
];
15 changes: 8 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"scripts": {
"ng": "nx",
"nx": "nx",
"start": "ng serve",
"start": "nx run conduit:serve",
"build": "ng build",
"test": "ng test",
"lint": "nx workspace-lint && ng lint",
Expand Down Expand Up @@ -43,13 +43,13 @@
"@ngrx/effects": "16.0.1",
"@ngrx/router-store": "16.0.1",
"@ngrx/store": "16.0.1",
"@nx/angular": "16.3.2",
"core-js": "3.31.0",
"eslint-plugin-ngrx": "2.1.4",
"marked": "5.0.1",
"rxjs": "7.8.1",
"tslib": "2.5.3",
"zone.js": "0.13.0",
"@nx/angular": "16.3.2"
"zone.js": "0.13.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "16.0.5",
Expand All @@ -63,6 +63,9 @@
"@angular/language-service": "16.0.5",
"@ngrx/store-devtools": "16.0.1",
"@nx/cypress": "16.3.2",
"@nx/eslint-plugin": "16.3.2",
"@nx/jest": "16.3.2",
"@nx/linter": "16.3.2",
"@nx/storybook": "16.3.2",
"@nx/workspace": "16.3.2",
"@schematics/angular": "~16.0.5",
Expand All @@ -82,6 +85,7 @@
"eslint": "8.42.0",
"eslint-config-prettier": "8.5.0",
"eslint-plugin-cypress": "^2.10.3",
"eslint-plugin-rxjs": "^5.0.3",
"eslint-plugin-storybook": "^0.6.12",
"firebase-tools": "^9.0.0",
"husky": "1.3.1",
Expand All @@ -98,10 +102,7 @@
"ts-jest": "29.1.0",
"ts-node": "10.9.1",
"typescript": "5.0.4",
"webpack": "^5.76.0",
"@nx/linter": "16.3.2",
"@nx/eslint-plugin": "16.3.2",
"@nx/jest": "16.3.2"
"webpack": "^5.76.0"
},
"husky": {
"hooks": {
Expand Down

0 comments on commit 4ca2726

Please sign in to comment.