Oauth &引用;“无限微调器添加到购物车对话框”;会话超时后+&引用;“空车”;重新登录后(进程计数:-1)

Oauth &引用;“无限微调器添加到购物车对话框”;会话超时后+&引用;“空车”;重新登录后(进程计数:-1),oauth,ngrx-effects,spartacus-storefront,Oauth,Ngrx Effects,Spartacus Storefront,正如在会话超时后Spartacus存储库的开放问题中所述,“添加到购物车对话框”在微调器处于活动状态时保持打开状态 此外,当您再次登录时(会话超时将您重定向到/login页面后),购物车不会按其应有的方式显示(显示一个空购物车)。 我假设这是因为操作CART\u ADD\u ENTRY\u FAIL将进程计数减至-1,然后LOAD\u CART操作失败 为了解决这个bug,我制作了一个自定义效果,它可以监听以下操作: CART\u添加\u条目\u失败 CART\u更新\u条目\u失败 CART

正如在会话超时后Spartacus存储库的开放问题中所述,“添加到购物车对话框”在微调器处于活动状态时保持打开状态

此外,当您再次登录时(会话超时将您重定向到/login页面后),购物车不会按其应有的方式显示(显示一个空购物车)。 我假设这是因为操作
CART\u ADD\u ENTRY\u FAIL
将进程计数减至-1,然后
LOAD\u CART
操作失败

为了解决这个bug,我制作了一个自定义效果,它可以监听以下操作:

  • CART\u添加\u条目\u失败
  • CART\u更新\u条目\u失败
  • CART\u删除\u条目\u失败
当调度的操作为
CART\u ADD\u ENTRY\u FAIL
时,我使用方法
modalService.closeActiveModal()
关闭“活动模式”。最后,效果返回
RESET\u CART\u DETAILS
操作,将值“0”分配给
processesCount

该效果还会侦听
CART\u UPDATE\u ENTRY\u FAIL
CART\u REMOVE\u ENTRY\u FAIL
操作,因为它们还扩展了
EntityProcessesDecrementAction
,使进程计数在会话超时后为-1

❓: 这是个好办法吗?我应该删除购物车而不是重置购物车详细信息吗

欢迎提出任何建议

自定义效果代码

import { Actions, Effect, ofType } from '@ngrx/effects';
import { CartActions } from '@spartacus/core';
import { ModalService } from '@spartacus/storefront';
import { map } from 'rxjs/operators';

@Injectable()
export class CustomCartEntryEffects {
  @Effect()
  resetCartDetailsWhenEntryActionFail$ = this.actions$.pipe(
    ofType(
      CartActions.CART_ADD_ENTRY_FAIL,
      CartActions.CART_UPDATE_ENTRY_FAIL,
      CartActions.CART_REMOVE_ENTRY_FAIL
    ),
    map((action: any) => {
      if (action.type === CartActions.CART_ADD_ENTRY_FAIL) {
        this.modalService.closeActiveModal();
      }
      return new CartActions.ResetCartDetails();
    })
  );

  constructor(private actions$: Actions, private modalService: ModalService) {}
}