ngrx将/ array更新/更新到状态数组

时间:2017-11-12 08:41:57

标签: ngrx google-cloud-firestore angularfire5

我在Firestore中维护了一个事件数据库。我使用AngularFire5来保持事件同步到我的应用程序。

活动有很多会话,可以更新我的多个管理员和用户(评分,问题等)。

我使用ngrx存储,缩减器和效果来维持同步。我能够找出单个会话更新/删除/添加。

问题是会话的初始加载返回会话[]。除此之外,快照更改可以返回“添加”,“修改”等。和'删除'会话。如何在会话不存在时添加单个动作+减少器功能,但在会话存在时更新或删除。 (我没有在我的firebase服务中调用store.dispatch,我使用效果来管理它)

session.effect.ts

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="img">
  <img src="img.png">
  <span class="rating">
      <img src="staroff.png">
      <img src="staroff.png">
      <img src="staroff.png">
      <img src="staroff.png">
  </span>
</div>

session.reducer.ts

@Effect()
    getSession: Observable<Action> = this.actions.ofType(SessionActions.ADD_SESSION)
        .map((action: SessionActions.AddSession) => action.payload)
        .switchMap(payload => this.db.getSessions(payload)
        .map((sessions:Session[]) => new SessionActions.AddSessionSuccess(sessions))
    );

session.actions.ts

export function SessionReducer(state: Session[], action: Action) {

    // console.log('SessionsReducer :: Action Type: ' + action.type + ', Action Payload: ' + JSON.stringify(action.payload));

    switch(action.type) {
        case SessionActions.ADD_SESSION_SUCCESS:
            return [ ...state, action.payload ];
        case SessionActions.CREATE_SESSION_SUCCESS:
            return [ ...state, action.payload ];
        case SessionActions.UPDATE_SESSION_SUCCESS:
            return state.map(session => {
                return session.id === action.payload.id ? Object.assign({}, action.payload) : session;
            })
        case SessionActions.ADD_SESSION:
        case SessionActions.DELETE_SESSION_FAILURE:
            return state;
        default:
            return state;
    }
}

0 个答案:

没有答案