From ad7c6a5d7ddbc3d683ffa78a51b7ca72b59aaa7d Mon Sep 17 00:00:00 2001 From: Johannes Millan Date: Fri, 26 Jul 2019 20:21:44 +0200 Subject: [PATCH] chore: update schematics with new shorter style --- package.json | 2 +- .../jo/files/__name@dasherize__.service.ts | 24 +++--- .../files/store/__name@dasherize__.actions.ts | 83 ++++++------------- .../files/store/__name@dasherize__.effects.ts | 71 +++++++++------- .../files/store/__name@dasherize__.reducer.ts | 56 ++++++------- 5 files changed, 103 insertions(+), 133 deletions(-) diff --git a/package.json b/package.json index 518ea959fc..3e7fbe932a 100644 --- a/package.json +++ b/package.json @@ -141,9 +141,9 @@ "@angular/router": "^8.1.0", "@angular/service-worker": "^8.1.0", "@biesbjerg/ngx-translate-extract": "^2.3.4", + "@ngrx/data": "^8.1.0", "@ngrx/effects": "^8.1.0", "@ngrx/entity": "^8.1.0", - "@ngrx/data": "^8.1.0", "@ngrx/schematics": "^8.1.0", "@ngrx/store": "8.1.0", "@ngrx/store-devtools": "^8.1.0", diff --git a/tools/schematics/src/jo/files/__name@dasherize__.service.ts b/tools/schematics/src/jo/files/__name@dasherize__.service.ts index 57480b7483..9290819118 100644 --- a/tools/schematics/src/jo/files/__name@dasherize__.service.ts +++ b/tools/schematics/src/jo/files/__name@dasherize__.service.ts @@ -7,12 +7,12 @@ import { select<%= classify(name)%>ById, } from './store/<%= dasherize(name)%>.reducer'; import { - Add<%= classify(name)%>, - Delete<%= classify(name)%>, - Delete<%= classify(name)%>s, - Load<%= classify(name)%>State, - Update<%= classify(name)%>, - Upsert<%= classify(name)%>, + add<%= classify(name)%>, + delete<%= classify(name)%>, + delete<%= classify(name)%>s, + load<%= classify(name)%>State, + update<%= classify(name)%>, + upsert<%= classify(name)%>, } from './store/<%= dasherize(name)%>.actions'; import {Observable} from 'rxjs'; import {<%= classify(name)%>, <%= classify(name)%>State} from './<%= dasherize(name)%>.model'; @@ -40,11 +40,11 @@ export class <%= classify(name)%>Service { } loadState(state: <%= classify(name)%>State) { - this._store$.dispatch(new Load<%= classify(name)%>State({state})); + this._store$.dispatch(load<%= classify(name)%>State({state})); } add<%= classify(name)%>(<%= camelize(name)%>: <%= classify(name)%>) { - this._store$.dispatch(new Add<%= classify(name)%>({ + this._store$.dispatch(add<%= classify(name)%>({ <%= camelize(name)%>: { ...<%= camelize(name)%>, id: shortid() @@ -53,18 +53,18 @@ export class <%= classify(name)%>Service { } delete<%= classify(name)%>(id: string) { - this._store$.dispatch(new Delete<%= classify(name)%>({id})); + this._store$.dispatch(delete<%= classify(name)%>({id})); } delete<%= classify(name)%>s(ids: string[]) { - this._store$.dispatch(new Delete<%= classify(name)%>s({ids})); + this._store$.dispatch(delete<%= classify(name)%>s({ids})); } update<%= classify(name)%>(id: string, changes: Partial<<%= classify(name)%>>) { - this._store$.dispatch(new Update<%= classify(name)%>({<%= camelize(name)%>: {id, changes}})); + this._store$.dispatch(update<%= classify(name)%>({<%= camelize(name)%>: {id, changes}})); } upsert<%= classify(name)%>(<%= camelize(name)%>: <%= classify(name)%>) { - this._store$.dispatch(new Upsert<%= classify(name)%>({<%= camelize(name)%>})); + this._store$.dispatch(upsert<%= classify(name)%>({<%= camelize(name)%>})); } } diff --git a/tools/schematics/src/jo/files/store/__name@dasherize__.actions.ts b/tools/schematics/src/jo/files/store/__name@dasherize__.actions.ts index 3b193da270..5c2a4b6e27 100644 --- a/tools/schematics/src/jo/files/store/__name@dasherize__.actions.ts +++ b/tools/schematics/src/jo/files/store/__name@dasherize__.actions.ts @@ -1,64 +1,33 @@ -import {Action} from '@ngrx/store'; +import {createAction, props} from '@ngrx/store'; import {Update} from '@ngrx/entity'; -import {<%= classify(name)%>, <%= classify(name)%>State} from '../<%= dasherize(name)%>.model'; +import {<%= classify(name)%>, <%= classify(name)%>State } from '../<%= dasherize(name)%>.model'; -export enum <%= classify(name)%>ActionTypes { - Load<%= classify(name)%>State = '[<%= classify(name)%>] Load <%= classify(name)%> State', - Add<%= classify(name)%> = '[<%= classify(name)%>] Add <%= classify(name)%>', - Update<%= classify(name)%> = '[<%= classify(name)%>] Update <%= classify(name)%>', - Upsert<%= classify(name)%> = '[<%= classify(name)%>] Upsert <%= classify(name)%>', - Delete<%= classify(name)%> = '[<%= classify(name)%>] Delete <%= classify(name)%>', - Delete<%= classify(name)%>s = '[<%= classify(name)%>] Delete multiple <%= classify(name)%>s', -} +export const load<%= classify(name)%>State = createAction( + '[<%= classify(name)%>] Load <%= classify(name)%> State', + props<{ state: <%= classify(name)%>State }>(), +); -export class Load<%= classify(name)%>State implements Action { - readonly type = <%= classify(name)%>ActionTypes.Load<%= classify(name)%>State; +export const add<%= classify(name)%> = createAction( + '[<%= classify(name)%>] Add <%= classify(name)%>', + props<{ <%= camelize(name)%>: <%= classify(name)%> }>(), +); - constructor(public payload: { state: <%= classify(name)%>State }) { - } -} +export const update<%= classify(name)%> = createAction( + '[<%= classify(name)%>] Update <%= classify(name)%>', + props<{ <%= camelize(name)%>: Update<<%= classify(name)%>> }>(), +); -export class Add<%= classify(name)%> implements Action { - readonly type = <%= classify(name)%>ActionTypes.Add<%= classify(name)%>; +export const upsert<%= classify(name)%> = createAction( + '[<%= classify(name)%>] Upsert <%= classify(name)%>', + props<{ <%= camelize(name)%>: <%= classify(name)%> }>(), +); - constructor(public payload: { <%= camelize(name)%>: <%= classify(name)%> }) { - } -} +export const delete<%= classify(name)%> = createAction( + '[<%= classify(name)%>] Delete <%= classify(name)%>', + props<{ id: string }>(), +); -export class Update<%= classify(name)%> implements Action { - readonly type = <%= classify(name)%>ActionTypes.Update<%= classify(name)%>; - - constructor(public payload: { <%= camelize(name)%>: Update<<%= classify(name)%>> }) { - } -} - -export class Upsert<%= classify(name)%> implements Action { - readonly type = <%= classify(name)%>ActionTypes.Upsert<%= classify(name)%>; - - constructor(public payload: { <%= camelize(name)%>: <%= classify(name)%> }) { - } -} - -export class Delete<%= classify(name)%> implements Action { - readonly type = <%= classify(name)%>ActionTypes.Delete<%= classify(name)%>; - - constructor(public payload: { id: string }) { - } -} - -export class Delete<%= classify(name)%>s implements Action { - readonly type = <%= classify(name)%>ActionTypes.Delete<%= classify(name)%>s; - - constructor(public payload: { ids: string[] }) { - } -} - - -export type <%= classify(name)%>Actions = - Load<%= classify(name)%>State - | Add<%= classify(name)%> - | Update<%= classify(name)%> - | Upsert<%= classify(name)%> - | Delete<%= classify(name)%> - | Delete<%= classify(name)%>s - ; +export const delete<%= classify(name)%>s = createAction( + '[<%= classify(name)%>] Delete multiple <%= classify(name)%>s', + props<{ ids: string[] }>(), +); diff --git a/tools/schematics/src/jo/files/store/__name@dasherize__.effects.ts b/tools/schematics/src/jo/files/store/__name@dasherize__.effects.ts index 84384b1ee7..9fe06d12c5 100644 --- a/tools/schematics/src/jo/files/store/__name@dasherize__.effects.ts +++ b/tools/schematics/src/jo/files/store/__name@dasherize__.effects.ts @@ -1,43 +1,52 @@ import {Injectable} from '@angular/core'; -import {Actions, Effect, ofType} from '@ngrx/effects'; +import {Actions, createEffect, ofType} from '@ngrx/effects'; import {tap, withLatestFrom} from 'rxjs/operators'; import {select, Store} from '@ngrx/store'; -import {<%= classify(name)%>ActionTypes} from './<%= dasherize(name)%>.actions'; +import {Injectable} from '@angular/core'; +import {Actions, createEffect, ofType} from '@ngrx/effects'; +import {tap, withLatestFrom} from 'rxjs/operators'; +import {select, Store} from '@ngrx/store'; +import * as <%= camelize(name)%>Actions from './<%= dasherize(name)%>.actions'; import {select<%= classify(name)%>FeatureState} from './<%= dasherize(name)%>.reducer'; + @Injectable() export class <%= classify(name)%>Effects { - @Effect({dispatch: false}) update<%= classify(name)%>s$: any = this._actions$ - .pipe( - ofType( - <%= classify(name)%>ActionTypes.Add<%= classify(name)%>, - <%= classify(name)%>ActionTypes.Update<%= classify(name)%>, - <%= classify(name)%>ActionTypes.Upsert<%= classify(name)%>, - <%= classify(name)%>ActionTypes.Delete<%= classify(name)%>, - <%= classify(name)%>ActionTypes.Delete<%= classify(name)%>s, - ), - withLatestFrom( - this._store$.pipe(select(selectCurrentProjectId)), - this._store$.pipe(select(select<%= classify(name)%>FeatureState)), - ), - tap(this._saveToLs.bind(this)) - ); + update<%= classify(name)%>sStorage$ = createEffect(() => this._actions$.pipe( + ofType( + <%= camelize(name)%>Actions.add<%= classify(name)%>, + <%= camelize(name)%>Actions.update<%= classify(name)%>, + <%= camelize(name)%>Actions.upsert<%= classify(name)%>, + <%= camelize(name)%>Actions.delete<%= classify(name)%>, + <%= camelize(name)%>Actions.delete<%= classify(name)%>s, + ), + withLatestFrom( + this._store$.pipe(select(selectCurrentProjectId)), + this._store$.pipe(select(select<%= classify(name)%>FeatureState)), + ), + tap(this._saveToLs.bind(this)), + tap(this._updateLastActive.bind(this)), + ), {dispatch: false}); - constructor( - private _actions$: Actions, - private _store$: Store, - private _persistenceService: PersistenceService - ) { - } - - private _saveToLs([action, currentProjectId, <%= camelize(name)%>State]) { - if (currentProjectId) { - this._persistenceService.saveLastActive(); - this._persistenceService.<%= camelize(name)%>.save(currentProjectId, <%= camelize(name)%>State); - } else { - throw new Error('No current project id'); - } + + constructor( + private _actions$: Actions, + private _store$: Store, + private _persistenceService: PersistenceService, + ) { + } + + private _saveToLs([action, currentProjectId, <%= camelize(name)%>State]) { + if (currentProjectId) { + this._persistenceService.saveLastActive(); + this._persistenceService.<%= camelize(name)%>.save(currentProjectId, <%= camelize(name)%>State); + } else { + throw new Error('No current project id'); } + } + private _updateLastActive() { + this._persistenceService.saveLastActive(); + } } diff --git a/tools/schematics/src/jo/files/store/__name@dasherize__.reducer.ts b/tools/schematics/src/jo/files/store/__name@dasherize__.reducer.ts index 72a521dab0..e1d5e97fc2 100644 --- a/tools/schematics/src/jo/files/store/__name@dasherize__.reducer.ts +++ b/tools/schematics/src/jo/files/store/__name@dasherize__.reducer.ts @@ -1,7 +1,7 @@ -import { createEntityAdapter, EntityAdapter, EntityState } from '@ngrx/entity'; -import { <%= classify(name)%>Actions, <%= classify(name)%>ActionTypes } from './<%= dasherize(name) %>.actions'; +import { createEntityAdapter, EntityAdapter } from '@ngrx/entity'; +import * as <%= camelize(name)%>Actions from './<%= dasherize(name) %>.actions'; import { <%= classify(name)%>, <%= classify(name)%>State } from '../<%= dasherize(name) %>.model'; -import { createFeatureSelector, createSelector } from '@ngrx/store'; +import { Action, createReducer, createFeatureSelector, createSelector, on } from '@ngrx/store'; export const <%= underscore(name).toUpperCase()%>_FEATURE_NAME = '<%= camelize(name) %>'; @@ -20,38 +20,30 @@ export const initial<%= classify(name)%>State: <%= classify(name)%>State = adapt // additional entity state properties }); + +const _reducer = createReducer<<%= classify(name)%>State>( + initial<%= classify(name)%>State, + + on(<%= camelize(name)%>Actions.add<%= classify(name)%>, (state, {<%= camelize(name) %>}) => adapter.addOne(<%= camelize(name) %>, state)), + + on(<%= camelize(name)%>Actions.update<%= classify(name)%>, (state, {<%= camelize(name) %>}) => adapter.updateOne(<%= camelize(name) %>, state)), + + on(<%= camelize(name)%>Actions.upsert<%= classify(name)%>, (state, {<%= camelize(name) %>}) => adapter.upsertOne(<%= camelize(name) %>, state)), + + on(<%= camelize(name)%>Actions.delete<%= classify(name)%>, (state, {id}) => adapter.removeOne(id, state)), + + on(<%= camelize(name)%>Actions.delete<%= classify(name)%>s, (state, {ids}) => adapter.removeMany(ids, state)), + + on(<%= camelize(name)%>Actions.load<%= classify(name)%>State, (oldState, {state}) => ({...oldState, ...state})), +); + + + export function <%= camelize(name) %>Reducer( state = initial<%= classify(name)%>State, - action: <%= classify(name)%>Actions + action: Action, ): <%= classify(name)%>State { - switch (action.type) { - case <%= classify(name)%>ActionTypes.Add<%= classify(name)%>: { - return adapter.addOne(action.payload.<%= camelize(name) %>, state); - } - - case <%= classify(name)%>ActionTypes.Update<%= classify(name)%>: { - return adapter.updateOne(action.payload.<%= camelize(name) %>, state); - } - - case <%= classify(name)%>ActionTypes.Upsert<%= classify(name)%>: { - return adapter.upsertOne(action.payload.<%= camelize(name) %>, state); - } - - case <%= classify(name)%>ActionTypes.Delete<%= classify(name)%>: { - return adapter.removeOne(action.payload.id, state); - } - - case <%= classify(name)%>ActionTypes.Delete<%= classify(name)%>s: { - return adapter.removeMany(action.payload.ids, state); - } - - case <%= classify(name)%>ActionTypes.Load<%= classify(name)%>State: - return {...action.payload.state}; - - default: { - return state; - } - } + return _reducer(state, action); }