Поток:
После успешного входа пользователя приложение должно загрузить пользователей Vendor и перейти к VendorID
Пример: myUrl.com / vendor / ID
Различные случаи, которые я пытаюсь поддержать:
1.Пользователь добавляет URL-адрес с идентификатором поставщика:
Приложение перезагрузит поставщика
2.После входа в систему
приложение загрузит поставщика и перейдет к URL
3.При обновлении
Приложение будет перезагружать Vendor и перемещаться только в том случае, если URL-адрес VendorID уже не существует (таким образом, пользователь останется на той же странице, на которой он уже находится)
Моя проблема:
Когда пользователь обновляет приложение, он будет повторно перемещен к корневому поставщику (не хорошо, я хочу, чтобы он оставался на своей странице, переход только по логину)
Код, который я пробовал до сих пор:
@Effect()
loadVendor(): Observable<VendorDataInitAction | AuthAction | VendorDataAction> {
return this._actions$
.pipe(
ofType<AuthLoginSuccessAction | AuthRefreshSuccessAction>(AuthActions.LoginSuccess, AuthActions.RefreshSuccess),
withLatestFrom(this._store.select(selectAuthActor)),
filter(([_, actor]) => isUserLoggedIn(actor)),
switchMap(([_, actor]) => {
const errorActions = [
new AuthSetAuthMessageAction({
message: 'You need to be granted access in order to login to Portal.\n' +
'Please contact your Platterz representative.',
type: AuthMessageType.Error
}),
new AuthLogoutAction()
];
return this._apollo
.query<AssociatedRestaurants>({
query: AssociatedRestaurantsQuery
})
.pipe(
switchMap((result): ObservableInput<AuthAction | VendorDataAction> => {
const errors = result.errors && result.errors.length > 0;
const noRestaurants = !(result.data && result.data.associatedLocations &&
result.data.associatedLocations.locations.length);
if (errors || noRestaurants) {
return errorActions;
}
return [
new VendorDataInitAction(result.data.associatedLocations.locations)
];
}),
catchError(() => errorActions)
);
}));
}
@Effect()
navigateToVendorOnDataLoad(): Observable<VendorDidSetIDURLAction> {
return this._actions$
.pipe(
ofType<VendorDidSetIDURLAction>(VendorDataActions.Init),
withLatestFrom(this._route.params.pipe(map((params) => params.vendorID))),
filter(([, vendorId]) => vendorId == null),
switchMap(() => this._store.select(selectCurrentVendor)),
filter((vendor) => !!vendor),
take(1),
map((vendor) => {
// When trying to get Route params, and navigate only if VendorID is null, Its always null...
this._router.navigate(['/vendors', vendor.id, 'dashboard']);
return new VendorDidSetIDURLAction();
})
);
}
Я пытался получить доступ к Route params на @ Effect безуспешно, он не содержит VendorID при обновлении ...
Как можно получить Route params из @ Effect ?Или есть лучший способ архивации этой логики?