Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: [IOBP-726] Migrate IdPay machines to XState V5 #6135

Merged
merged 44 commits into from
Sep 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
633ecad
chore: add xstate v5
mastro993 Apr 24, 2024
1bb5249
chore: migrate idpay unsubscription machine
mastro993 Apr 24, 2024
bdbce66
chore: working unsubscription machine
mastro993 Apr 24, 2024
8f35dda
chore: onboarding wip
mastro993 Apr 29, 2024
5bf9ded
chore: refactor onboarding machine
mastro993 Apr 30, 2024
e31a41b
chore: idpay payment machine
mastro993 May 1, 2024
7a2da47
chore: xstatre v5 wip
mastro993 May 1, 2024
f64a7b7
chore: xstatre v5 wip
mastro993 May 2, 2024
93421f8
chore: remove unsubscription machine
mastro993 May 2, 2024
69c01e9
chore: payment machine refinement
mastro993 May 3, 2024
2bd8cea
chore: onboarding wip
mastro993 May 3, 2024
b7279f5
chore: fixed onboarding
mastro993 May 4, 2024
25a1aba
fix: imports
mastro993 May 4, 2024
64bd645
fix: failures
mastro993 May 4, 2024
66aa547
fix: configuration machine
mastro993 May 4, 2024
7d18ba2
Merge branch 'master' into xstate-v5-poc
mastro993 Jul 1, 2024
30b28e4
Merge branch 'master' into xstate-v5-poc
mastro993 Aug 30, 2024
515e652
fix: types
mastro993 Aug 30, 2024
bff44fc
chore: remove xstate helpers
mastro993 Aug 31, 2024
eceb1b6
chore: fix imports
mastro993 Sep 2, 2024
392404d
fix: wrong import
mastro993 Sep 2, 2024
a2d0de5
build: remove xstate 4
mastro993 Sep 2, 2024
d94c449
chore: remove tests
mastro993 Sep 2, 2024
1142e06
fix: machines
mastro993 Sep 2, 2024
0862620
chore: fix selectors
mastro993 Sep 2, 2024
328a279
chore: add config machine tests
mastro993 Sep 2, 2024
8f17abd
Merge branch 'master' into IOBP-726-migrate-idpay-machines-to-xstate-v5
mastro993 Sep 9, 2024
28d46e1
fix: import
mastro993 Sep 10, 2024
df1d9b4
chore: add BDP token selector
mastro993 Sep 10, 2024
c7084ad
fix: imports
mastro993 Sep 10, 2024
1701f3b
Merge branch 'master' into IOBP-726-migrate-idpay-machines-to-xstate-v5
mastro993 Sep 15, 2024
2151268
fix: fixed machine transition
mastro993 Sep 16, 2024
7abd6a8
Merge branch 'master' into IOBP-726-migrate-idpay-machines-to-xstate-v5
mastro993 Sep 16, 2024
79f6df0
Merge branch 'master' into IOBP-726-migrate-idpay-machines-to-xstate-v5
mastro993 Sep 16, 2024
7780262
fix: UI fixes
mastro993 Sep 16, 2024
5b48611
Merge branch 'master' into IOBP-726-migrate-idpay-machines-to-xstate-v5
mastro993 Sep 17, 2024
4ee9a93
fix: rename test file
mastro993 Sep 17, 2024
30932a4
Merge branch 'master' into IOBP-726-migrate-idpay-machines-to-xstate-v5
mastro993 Sep 19, 2024
74e523c
Merge branch 'master' into IOBP-726-migrate-idpay-machines-to-xstate-v5
mastro993 Sep 20, 2024
1a44447
Merge branch 'master' into IOBP-726-migrate-idpay-machines-to-xstate-v5
dmnplb Sep 23, 2024
54c72c5
Merge branch 'master' into IOBP-726-migrate-idpay-machines-to-xstate-v5
mastro993 Sep 25, 2024
5871e66
fix: post merge
mastro993 Sep 26, 2024
d9de83e
Merge branch 'master' into IOBP-726-migrate-idpay-machines-to-xstate-v5
Hantex9 Sep 26, 2024
1654ca7
Merge branch 'master' into IOBP-726-migrate-idpay-machines-to-xstate-v5
mastro993 Sep 26, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions locales/en/index.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3745,6 +3745,7 @@ idpay:
INSTRUMENTS_LIST_LOAD_FAILURE: "Errore nel caricamento della lista strumenti"
INSTRUMENT_ENROLL_FAILURE: "Errore durante l'aggiunta del metodo di pagamento"
INSTRUMENT_DELETE_FAILURE: "Errore durante la rimozione del metodo di pagamento"
SESSION_EXPIRED: "C'è stato un problema, riprova"
headerTitle: "Configure the initiative"
intro:
title: "We are almost there"
Expand Down
1 change: 1 addition & 0 deletions locales/it/index.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3745,6 +3745,7 @@ idpay:
INSTRUMENTS_LIST_LOAD_FAILURE: "Errore nel caricamento della lista strumenti"
INSTRUMENT_ENROLL_FAILURE: "Errore durante l'aggiunta del metodo di pagamento"
INSTRUMENT_DELETE_FAILURE: "Errore durante la rimozione del metodo di pagamento"
SESSION_EXPIRED: "C'è stato un problema, riprova"
headerTitle: "Configura l'iniziativa"
intro:
title: "Ci siamo quasi"
Expand Down
11 changes: 3 additions & 8 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,6 @@
"generate": "npm-run-all generate:*",
"locales_unused": "ts-node --skip-project -O '{\"lib\":[\"es2015\"]}' scripts/unused-locales.ts",
"remove_unused_locales": "ts-node --skip-project -O '{\"lib\":[\"es2015\"]}' scripts/remove-unused-locales.ts",
"generate:xstate-types": "xstate typegen \"ts/**/*.ts?(x)\"",
"prepare": "husky install"
},
"lint-staged": {
Expand Down Expand Up @@ -130,9 +129,8 @@
"@redux-saga/testing-utils": "^1.1.3",
"@sentry/react-native": "^5.32.0",
"@shopify/flash-list": "~1.7.0",
"@xstate/react": "^4.0.1",
"@textlint/markdown-to-ast": "^14.0.4",
"@xstate/react": "^3.0.1",
"@xstate5/react": "npm:@xstate/react@4",
"async-mutex": "^0.1.3",
"buffer": "^4.9.1",
"color": "^3.0.0",
Expand Down Expand Up @@ -227,8 +225,7 @@
"validator": "^13.7.0",
"xml2js": "^0.5.0",
"xss": "1.0.10",
"xstate": "^4.33.6",
"xstate5": "npm:xstate@5"
"xstate": "^5"
},
"devDependencies": {
"@babel/core": "^7.20.0",
Expand Down Expand Up @@ -270,7 +267,6 @@
"@types/xml2js": "^0.4.11",
"@typescript-eslint/eslint-plugin": "^5.9.1",
"@typescript-eslint/parser": "^7.13.0",
"@xstate/cli": "^0.3.3",
"abortcontroller-polyfill": "1.7.3",
"babel-jest": "^29.2.1",
"babel-plugin-macros": "^3.1.0",
Expand Down Expand Up @@ -320,8 +316,7 @@
"@babel/preset-typescript": "^7.23.3",
"@babel/plugin-transform-typescript": "^7.23.6",
"@babel/plugin-syntax-typescript": "^7.23.3",
"@babel/types": "^7.23.6",
"@xstate5/react/xstate": "^5.13.0"
"@babel/types": "^7.23.6"
},
"react-native": {
"path": "path-browserify",
Expand Down
6 changes: 3 additions & 3 deletions ts/features/barcode/screens/BarcodeScanScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import {
} from "../../../store/reducers/backendStatus";
import { emptyContextualHelp } from "../../../utils/emptyContextualHelp";
import { useIOBottomSheetAutoresizableModal } from "../../../utils/hooks/bottomSheet";
import { IDPayPaymentRoutes } from "../../idpay/payment/navigation/navigator";
import { IdPayPaymentRoutes } from "../../idpay/payment/navigation/routes";
import { PaymentsCheckoutRoutes } from "../../payments/checkout/navigation/routes";
import * as analytics from "../analytics";
import { BarcodeScanBaseScreenComponent } from "../components/BarcodeScanBaseScreenComponent";
Expand Down Expand Up @@ -169,8 +169,8 @@ const BarcodeScanScreen = () => {

const handleIdPayPaymentCodeInput = () => {
manualInputModal.dismiss();
navigation.navigate(IDPayPaymentRoutes.IDPAY_PAYMENT_MAIN, {
screen: IDPayPaymentRoutes.IDPAY_PAYMENT_CODE_INPUT
navigation.navigate(IdPayPaymentRoutes.IDPAY_PAYMENT_MAIN, {
screen: IdPayPaymentRoutes.IDPAY_PAYMENT_CODE_INPUT
});
};

Expand Down
8 changes: 8 additions & 0 deletions ts/features/idpay/common/machine/selectors.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { AnyMachineSnapshot } from "xstate";
import { IdPayTags } from "./tags";

export const isLoadingSelector = (snapshot: AnyMachineSnapshot) =>
snapshot.hasTag(IdPayTags.Loading);

export const isUpsertingSelector = (snapshot: AnyMachineSnapshot) =>
snapshot.hasTag(IdPayTags.Upserting);
4 changes: 4 additions & 0 deletions ts/features/idpay/common/machine/tags.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export enum IdPayTags {
Loading = "Loading",
Upserting = "Upserting"
}
12 changes: 6 additions & 6 deletions ts/features/idpay/common/navigation/linking.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
import { PathConfigMap } from "@react-navigation/native";
import { IDPayDetailsRoutes } from "../../details/navigation";
import { IDPayOnboardingRoutes } from "../../onboarding/navigation/navigator";
import { IDPayPaymentRoutes } from "../../payment/navigation/navigator";
import { IdPayPaymentRoutes } from "../../payment/navigation/routes";
import { AppParamsList } from "../../../../navigation/params/AppParamsList";
import { IdPayOnboardingRoutes } from "../../onboarding/navigation/routes";

export const idPayLinkingOptions: PathConfigMap<AppParamsList> = {
/**
* IDPay initiative onboarding
*/
[IDPayOnboardingRoutes.IDPAY_ONBOARDING_MAIN]: {
[IdPayOnboardingRoutes.IDPAY_ONBOARDING_MAIN]: {
path: "idpay/onboarding",
screens: {
/**
* Handles ioit://idpay/onboarding/{initiativeId}
*/
[IDPayOnboardingRoutes.IDPAY_ONBOARDING_INITIATIVE_DETAILS]: "/:serviceId"
[IdPayOnboardingRoutes.IDPAY_ONBOARDING_INITIATIVE_DETAILS]: "/:serviceId"
}
},
/**
Expand All @@ -32,13 +32,13 @@ export const idPayLinkingOptions: PathConfigMap<AppParamsList> = {
/**
* IDPay payment authorization
*/
[IDPayPaymentRoutes.IDPAY_PAYMENT_MAIN]: {
[IdPayPaymentRoutes.IDPAY_PAYMENT_MAIN]: {
path: "idpay/auth",
screens: {
/**
* Handles ioit://idpay/auth/{trxCode}
*/
[IDPayPaymentRoutes.IDPAY_PAYMENT_AUTHORIZATION]: "/:trxCode"
[IdPayPaymentRoutes.IDPAY_PAYMENT_AUTHORIZATION]: "/:trxCode"
}
}
};
7 changes: 7 additions & 0 deletions ts/features/idpay/common/saga/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { watchIDPayInitiativeDetailsSaga } from "../../details/saga";
import { watchIDPayTimelineSaga } from "../../timeline/saga";
import { watchIDPayInitiativeConfigurationSaga } from "../../configuration/saga";
import { watchIDPayBarcodeSaga } from "../../barcode/saga";
import { watchIdPayUnsubscriptionSaga } from "../../unsubscription/saga";

export function* watchIDPaySaga(bpdToken: string): SagaIterator {
const isPagoPATestEnabled = yield* select(isPagoPATestEnabledSelector);
Expand Down Expand Up @@ -64,4 +65,10 @@ export function* watchIDPaySaga(bpdToken: string): SagaIterator {
preferredLanguage
);
yield* fork(watchIDPayBarcodeSaga, idPayClient, bearerToken);
yield* fork(
watchIdPayUnsubscriptionSaga,
idPayClient,
bearerToken,
preferredLanguage
);
}
4 changes: 3 additions & 1 deletion ts/features/idpay/common/store/actions/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { IdPayCodeActions } from "../../../code/store/actions";
import { IDPayInitiativeConfigurationActions } from "../../../configuration/store/actions";
import { IdPayInitiativeActions } from "../../../details/store/actions";
import { IdPayTimelineActions } from "../../../timeline/store/actions";
import { IdPayUnsubscriptionActions } from "../../../unsubscription/store/actions";
import { IdPayWalletActions } from "../../../wallet/store/actions";

export type IdPayActions =
Expand All @@ -11,4 +12,5 @@ export type IdPayActions =
| IdPayTimelineActions
| IdPayCodeActions
| IDPayInitiativeConfigurationActions
| IdPayBarcodeActions;
| IdPayBarcodeActions
| IdPayUnsubscriptionActions;
7 changes: 6 additions & 1 deletion ts/features/idpay/common/store/reducers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ import configurationReducer, {
IdPayInitiativeConfigurationState
} from "../../../configuration/store";
import barcodeReducer, { IdPayBarcodeState } from "../../../barcode/store";
import unsubscriptionReducer, {
IdPayUnsubscriptionState
} from "../../../unsubscription/store/reducers";

export type IDPayState = {
wallet: IdPayWalletState;
Expand All @@ -21,6 +24,7 @@ export type IDPayState = {
configuration: IdPayInitiativeConfigurationState;
code: IdPayCodeState & PersistPartial;
barcode: IdPayBarcodeState;
unsubscription: IdPayUnsubscriptionState;
};

const idPayReducer = combineReducers({
Expand All @@ -29,7 +33,8 @@ const idPayReducer = combineReducers({
timeline: timelineReducer,
code: codePersistor,
configuration: configurationReducer,
barcode: barcodeReducer
barcode: barcodeReducer,
unsubscription: unsubscriptionReducer
});

export default idPayReducer;
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,15 @@ import {
ListItemSwitch
} from "@pagopa/io-app-design-system";
import * as pot from "@pagopa/ts-commons/lib/pot";
import { useSelector } from "@xstate/react";
import * as E from "fp-ts/lib/Either";
import * as O from "fp-ts/lib/Option";
import { pipe } from "fp-ts/lib/function";
import { default as React } from "react";
import { StatusEnum as InstrumentStatusEnum } from "../../../../../definitions/idpay/InstrumentDTO";
import { CreditCardType, Wallet } from "../../../../types/pagopa";
import { instrumentStatusLabels } from "../../common/labels";
import { useConfigurationMachineService } from "../xstate/provider";
import { instrumentStatusByIdWalletSelector } from "../xstate/selectors";
import { IdPayConfigurationMachineContext } from "../machine/provider";
import { instrumentStatusByIdWalletSelector } from "../machine/selectors";

/**
* See @ListItemSwitch
Expand All @@ -40,11 +39,9 @@ type InstrumentEnrollmentSwitchProps = {
*/
const InstrumentEnrollmentSwitch = (props: InstrumentEnrollmentSwitchProps) => {
const { wallet, isStaged, onValueChange } = props;

const configurationMachine = useConfigurationMachineService();
const { useSelector } = IdPayConfigurationMachineContext;

const instrumentStatusPot = useSelector(
configurationMachine,
instrumentStatusByIdWalletSelector(wallet.idWallet)
);

Expand Down
Loading
Loading