Witam.
Od pewnego czasu próbuję znaleźć przyczynę błędnego działania efektu z NGRX w aplikacji Ionic. Niestety w zbudowanej aplikacji na iPhonie (i tylko tam) payload przesyłany do akcji jest pustym obiektem mimo iż powinien w tym momencie posiadać już dane.
Trochę kodu:
Mam serwis z metodą:
public startRentalProcedure(
vehicle: Vehicle,
loading: any
): Observable<IRentalStartResponse> {
loading.present();
return new Observable(observe => {
const id = '';
const key = this.walletService.getActiveAccountId();
this.fleetNodeSrv
.startRent(id, key, vehicle.id)
.subscribe(
res => {
loading.dismiss();
observe.next(res);
observe.complete();
},
err => {
loading.dismiss();
observe.error(err);
observe.complete();
}
);
});
}
oraz effect do tego (z @ngrx/effects)
@Effect()
public startRentalProcedure$ = this.actions$.pipe(
ofType(RentalActions.startRentVerifying),
switchMap(action => {
return this.rentalSrv
.startRentalProcedure(action.vehicle, action.loading)
.pipe(
mergeMap(response => {
console.log(response) // Tutaj response posiada te pola
return [
RentalActions.rentVerified({
address: response.address,
identity: response.identity
}),
MainActions.rentalProcedureStarted()
];
}),
catchError(err => {
this.showConfirmationError(err);
return of({ type: '[RENTAL] START_RENTAL_FAILED' });
})
);
})
);
akcja:
export const rentVerified = createAction(
'[RENTAL] RENT_VERIFIED',
(payload: Contract) => ({ payload })
);
reducer:
on(RentActions.rentVerified, (state, { payload }) => ({
...state,
contract: payload,
status: RentStatus.RENT_VERIFIED
})),
Problem tutaj jest taki, że response
posiada te wymagane pola natomiast payload w akcji jest pustym obiektem. Taki problem występuje wyłącznie w zbudowanej apce na iOSa. Sprawdzałem na safari i tam działa poprawnie.
Wersje używanych bibliotek:
"@angular/core": "~8.2.8",
"@ngrx/effects": "^8.3.0",
"@ngrx/store": "^8.3.0",
"rxjs": "~6.5.3",
Będę wdzięczny jeżeli ktoś zna możliwe rozwiązanie albo chociaż powód dlaczego tak się dzieje bo powoli tracę pomysły ;)