Skip to content

Commit

Permalink
Merge branch 'master' into fix/e2eTests
Browse files Browse the repository at this point in the history
  • Loading branch information
shadowsheep1 authored Jan 24, 2024
2 parents 7741d0d + 3e0f184 commit cbd9fba
Show file tree
Hide file tree
Showing 7 changed files with 87 additions and 5 deletions.
5 changes: 5 additions & 0 deletions locales/en/index.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1013,6 +1013,11 @@ wallet:
title: Vuoi pagare in app?
content: Scopri quali sono i metodi che puoi aggiungere al tuo portafoglio.
cta: Scopri di più
error:
title: Si è verificato un errore
subtitle: Riprova o contatta l'assistenza
primaryButton: Chiudi
secondaryButton: Riprova
wallet: Wallet
refreshWallet: Refresh the Wallet
favourite:
Expand Down
5 changes: 5 additions & 0 deletions locales/it/index.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1013,6 +1013,11 @@ wallet:
title: Vuoi pagare in app?
content: Scopri quali sono i metodi che puoi aggiungere al tuo portafoglio.
cta: Scopri di più
error:
title: Si è verificato un errore
subtitle: Riprova o contatta l'assistenza
primaryButton: Chiudi
secondaryButton: Riprova
wallet: Portafoglio
refreshWallet: Aggiorna il Portafoglio
favourite:
Expand Down
36 changes: 33 additions & 3 deletions ts/features/walletV3/details/screens/WalletDetailsScreen.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import * as React from "react";
import { RouteProp, useRoute } from "@react-navigation/native";
import { RouteProp, useNavigation, useRoute } from "@react-navigation/native";
import { useDispatch } from "react-redux";
import { IOLogoPaymentExtType } from "@pagopa/io-app-design-system";

import * as O from "fp-ts/lib/Option";
import { pipe } from "fp-ts/lib/function";
import LoadingSpinnerOverlay from "../../../../components/LoadingSpinnerOverlay";
import WorkunitGenericFailure from "../../../../components/error/WorkunitGenericFailure";
import { PaymentCardBig } from "../../../../components/ui/cards/payment/PaymentCardBig";
import { useIOSelector } from "../../../../store/hooks";
import { idPayAreInitiativesFromInstrumentLoadingSelector } from "../../../idpay/wallet/store/reducers";
Expand All @@ -22,6 +21,12 @@ import {
import { walletDetailsGetInstrument } from "../store/actions";
import { UIWalletInfoDetails } from "../types/UIWalletInfoDetails";
import { getDateFromExpiryDate } from "../../../../utils/dates";
import { OperationResultScreenContent } from "../../../../components/screens/OperationResultScreenContent";
import I18n from "../../../../i18n";
import {
AppParamsList,
IOStackNavigationProp
} from "../../../../navigation/params/AppParamsList";

export type WalletDetailsScreenNavigationParams = Readonly<{
walletId: string;
Expand Down Expand Up @@ -71,6 +76,7 @@ const generateCardHeaderTitle = (details?: UIWalletInfoDetails) => {
*/
const WalletDetailsScreen = () => {
const route = useRoute<WalletDetailsScreenRouteProps>();
const navigation = useNavigation<IOStackNavigationProp<AppParamsList>>();
const dispatch = useDispatch();
const { walletId } = route.params;
const walletDetails = useIOSelector(walletDetailsInstrumentSelector);
Expand All @@ -82,6 +88,30 @@ const WalletDetailsScreen = () => {
idPayAreInitiativesFromInstrumentLoadingSelector
);

const WalletDetailsGenericFailure = () => (
<OperationResultScreenContent
title={I18n.t("wallet.methodDetails.error.title")}
subtitle={I18n.t("wallet.methodDetails.error.subtitle")}
pictogram="umbrellaNew"
action={{
label: I18n.t("wallet.methodDetails.error.primaryButton"),
accessibilityLabel: I18n.t("wallet.methodDetails.error.primaryButton"),
onPress: () => navigation.pop()
}}
secondaryAction={{
label: I18n.t("wallet.methodDetails.error.secondaryButton"),
accessibilityLabel: I18n.t(
"wallet.methodDetails.error.secondaryButton"
),
onPress: handleOnRetry
}}
/>
);

const handleOnRetry = () => {
dispatch(walletDetailsGetInstrument.request({ walletId }));
};

React.useEffect(() => {
dispatch(walletDetailsGetInstrument.request({ walletId }));
}, [walletId, dispatch]);
Expand Down Expand Up @@ -122,7 +152,7 @@ const WalletDetailsScreen = () => {
</LoadingSpinnerOverlay>
);
} else if (isErrorWalletDetails) {
return <WorkunitGenericFailure />;
return <WalletDetailsGenericFailure />;
}
return null;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ import { formatNumberCentsToAmount } from "../../../../utils/stringBuilder";
import { WalletPaymentFeebackBanner } from "../components/WalletPaymentFeedbackBanner";
import { usePaymentFailureSupportModal } from "../hooks/usePaymentFailureSupportModal";
import { WalletPaymentParamsList } from "../navigation/params";
import { walletPaymentDetailsSelector } from "../store/selectors";
import {
walletPaymentDetailsSelector,
walletPaymentStartRouteSelector
} from "../store/selectors";
import {
WalletPaymentOutcome,
WalletPaymentOutcomeEnum
Expand All @@ -38,6 +41,7 @@ const WalletPaymentOutcomeScreen = () => {

const navigation = useNavigation<IOStackNavigationProp<AppParamsList>>();
const paymentDetailsPot = useIOSelector(walletPaymentDetailsSelector);
const paymentStartRoute = useIOSelector(walletPaymentStartRouteSelector);

const supportModal = usePaymentFailureSupportModal({
outcome
Expand All @@ -55,6 +59,12 @@ const WalletPaymentOutcomeScreen = () => {
};

const handleClose = () => {
if (paymentStartRoute) {
navigation.navigate(paymentStartRoute.routeName, {
screen: paymentStartRoute.routeKey
});
return;
}
navigation.popToTop();
navigation.pop();
};
Expand Down
4 changes: 4 additions & 0 deletions ts/features/walletV3/payment/store/actions/orchestration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ import { ActionType, createStandardAction } from "typesafe-actions";
import { Bundle } from "../../../../../../definitions/pagopa/ecommerce/Bundle";
import { WalletInfo } from "../../../../../../definitions/pagopa/walletv3/WalletInfo";

/**
* Action to initialize the state of a payment, optionally you can specify the route to go back to
* after the payment is completed or cancelled (default is the popToTop route)
*/
export const walletPaymentInitState = createStandardAction(
"WALLET_PAYMENT_INIT_STATE"
)();
Expand Down
25 changes: 24 additions & 1 deletion ts/features/walletV3/payment/store/reducers/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import _ from "lodash";
import * as pot from "@pagopa/ts-commons/lib/pot";
import * as O from "fp-ts/lib/Option";
import { NavigatorScreenParams } from "@react-navigation/native";
import { getType } from "typesafe-actions";
import { pipe } from "fp-ts/lib/function";
import { sequenceS } from "fp-ts/lib/Apply";
import { Bundle } from "../../../../../../definitions/pagopa/ecommerce/Bundle";
import { NewTransactionResponse } from "../../../../../../definitions/pagopa/ecommerce/NewTransactionResponse";
import { PaymentRequestsGetResponse } from "../../../../../../definitions/pagopa/ecommerce/PaymentRequestsGetResponse";
Expand All @@ -27,6 +30,8 @@ import {
import { WalletInfo } from "../../../../../../definitions/pagopa/walletv3/WalletInfo";
import { WalletPaymentFailure } from "../../types/failure";
import { RptId } from "../../../../../../definitions/pagopa/ecommerce/RptId";
import NavigationService from "../../../../../navigation/NavigationService";
import { AppParamsList } from "../../../../../navigation/params/AppParamsList";

export type WalletPaymentState = {
rptId?: RptId;
Expand All @@ -44,6 +49,10 @@ export type WalletPaymentState = {
NetworkError | WalletPaymentFailure
>;
authorizationUrl: pot.Pot<string, NetworkError>;
startRoute?: {
routeName: keyof AppParamsList;
routeKey: keyof NavigatorScreenParams<AppParamsList>["screen"];
};
};

const INITIAL_STATE: WalletPaymentState = {
Expand All @@ -64,7 +73,21 @@ const reducer = (
): WalletPaymentState => {
switch (action.type) {
case getType(walletPaymentInitState):
return INITIAL_STATE;
const startRoute = pipe(
sequenceS(O.Monad)({
routeName: O.fromNullable(
NavigationService.getCurrentRouteName() as keyof AppParamsList
),
routeKey: O.fromNullable(
NavigationService.getCurrentRouteKey() as keyof NavigatorScreenParams<AppParamsList>["screen"]
)
}),
O.toUndefined
);
return {
...INITIAL_STATE,
startRoute
};

// Payment verification and details
case getType(walletPaymentGetDetails.request):
Expand Down
5 changes: 5 additions & 0 deletions ts/features/walletV3/payment/store/selectors/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,3 +76,8 @@ export const walletPaymentAuthorizationUrlSelector = createSelector(
selectWalletPayment,
state => state.authorizationUrl
);

export const walletPaymentStartRouteSelector = createSelector(
selectWalletPayment,
state => state.startRoute
);

0 comments on commit cbd9fba

Please sign in to comment.