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

feat(Bonus Pagamenti Digitali): [#175329974] Test enable/disable bpd on payment method #2304

Merged
merged 57 commits into from
Oct 23, 2020
Merged
Show file tree
Hide file tree
Changes from 56 commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
1335d1b
draft store action reducers
fabriziofff Oct 9, 2020
787b009
wip
fabriziofff Oct 9, 2020
0d523d3
Merge branch 'master' into 175010541-enable-bpd-on-payment-method-com…
fabriziofff Oct 12, 2020
2beec3f
complete reducer for bpdPaymentMethodActivation
fabriziofff Oct 12, 2020
dd204a8
wip
fabriziofff Oct 12, 2020
d9dd199
add update logic
fabriziofff Oct 12, 2020
d4a9416
Merge remote-tracking branch 'origin/master' into 175010541-enable-bp…
fabriziofff Oct 12, 2020
388312d
Merge remote-tracking branch 'origin/master' into 175010541-enable-bp…
fabriziofff Oct 13, 2020
dcaca78
Merge remote-tracking branch 'origin/master' into 175010541-enable-bp…
fabriziofff Oct 15, 2020
ca451ca
[#175010541] draft layout
fabriziofff Oct 15, 2020
d724550
wip
fabriziofff Oct 15, 2020
cbeed7b
poc pot!
fabriziofff Oct 15, 2020
82137c5
rework store
fabriziofff Oct 15, 2020
434a6d2
schedule retry
fabriziofff Oct 15, 2020
1b06b7e
wip retry
fabriziofff Oct 16, 2020
e64f088
better focus handling
fabriziofff Oct 16, 2020
6e006a4
clean code
fabriziofff Oct 16, 2020
6b25baf
Merge remote-tracking branch 'origin/master' into 175010541-enable-bp…
fabriziofff Oct 16, 2020
108cbb6
refinements
fabriziofff Oct 16, 2020
3d17097
renaming
fabriziofff Oct 16, 2020
66874bc
move style to styles
fabriziofff Oct 16, 2020
447ee5a
Merge branch 'master' into 175010541-enable-bpd-on-payment-method-com…
fabriziofff Oct 16, 2020
82773e6
Merge branch 'master' into 175010541-enable-bpd-on-payment-method-com…
fabriziofff Oct 16, 2020
a3acbd0
EnrollPaymentMethodScreen static content
fabriziofff Oct 16, 2020
6f8a8c7
Merge remote-tracking branch 'origin/175010541-enable-bpd-on-payment-…
fabriziofff Oct 16, 2020
1be15c8
link to business logic
fabriziofff Oct 16, 2020
6b191fa
add comment
fabriziofff Oct 16, 2020
f4b60f9
Merge branch 'master' into 175010541-enable-bpd-on-payment-method-com…
fabriziofff Oct 19, 2020
f17ba9b
Merge remote-tracking branch 'origin/175010541-enable-bpd-on-payment-…
fabriziofff Oct 19, 2020
51d4484
[#175329974] Add TMPBpdScreen
fabriziofff Oct 19, 2020
6c51b6d
fix typescript
fabriziofff Oct 19, 2020
1ad54ca
fix test fail
fabriziofff Oct 19, 2020
0fff03d
Merge branch 'master' into 175010541-enable-bpd-on-payment-method-com…
Undermaken Oct 20, 2020
940e651
[#174794326,174794981] support get payment status
Undermaken Oct 20, 2020
ae5fcc2
[#174794326,174794981] support update (enroll + delete) payment status
Undermaken Oct 20, 2020
07d1250
Merge remote-tracking branch 'origin/175010541-enable-bpd-on-payment-…
fabriziofff Oct 20, 2020
f40c6e2
Merge branch '174863016-EnrollPaymentMethodsScreen' into 175329974-te…
fabriziofff Oct 20, 2020
044b02c
Merge branch 'master' into 175010541-enable-bpd-on-payment-method-com…
fabriziofff Oct 21, 2020
8733abc
Merge branch 'master' into 174794326-174794981-bpd-payment-instruments
Undermaken Oct 21, 2020
e85a7d3
support 409 http response status code
Undermaken Oct 21, 2020
198ecfa
Merge branch 'master' into 175010541-enable-bpd-on-payment-method-com…
fabriziofff Oct 22, 2020
011bece
use const for loadingState
fabriziofff Oct 22, 2020
f27ac54
Merge branch '175010541-enable-bpd-on-payment-method-component' into …
fabriziofff Oct 22, 2020
f752a8f
Merge remote-tracking branch 'origin/master' into 175010541-enable-bp…
fabriziofff Oct 22, 2020
755e74e
Merge branch '175010541-enable-bpd-on-payment-method-component' into …
fabriziofff Oct 22, 2020
bfacf57
Merge remote-tracking branch 'origin/master' into 174794326-174794981…
fabriziofff Oct 22, 2020
550846e
Merge branch '174794326-174794981-bpd-payment-instruments' into 17486…
fabriziofff Oct 22, 2020
6201a80
Merge branch '174863016-EnrollPaymentMethodsScreen' into 175329974-te…
fabriziofff Oct 22, 2020
5ee0940
fix merge
fabriziofff Oct 22, 2020
c349e57
Merge branch 'master' into 174863016-EnrollPaymentMethodsScreen
fabriziofff Oct 22, 2020
0a57c34
Merge branch 'master' into 174863016-EnrollPaymentMethodsScreen
fabriziofff Oct 22, 2020
fbb1c11
Merge remote-tracking branch 'origin/174863016-EnrollPaymentMethodsSc…
fabriziofff Oct 22, 2020
f238ebb
Merge remote-tracking branch 'origin/master' into 174863016-EnrollPay…
fabriziofff Oct 23, 2020
7fcbeee
Merge branch '174863016-EnrollPaymentMethodsScreen' into 175329974-te…
fabriziofff Oct 23, 2020
5cda3db
Merge branch 'master' of github.com:pagopa/io-app into 174863016-Enro…
Undermaken Oct 23, 2020
a303abc
Merge branch '174863016-EnrollPaymentMethodsScreen' of github.com:pag…
Undermaken Oct 23, 2020
83081b4
[#175329974] sync activationDate&deactivationDate with local type def…
Undermaken Oct 23, 2020
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
8 changes: 8 additions & 0 deletions ts/features/bonus/bpd/navigation/action/bpdTestNav.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// TODO: remove after the introduction of the bpd detail screen
import { NavigationActions } from "react-navigation";
import BPD_ROUTES from "../routes";

export const navigateToBpdTestScreen = () =>
NavigationActions.navigate({
routeName: BPD_ROUTES.TEST
});
5 changes: 5 additions & 0 deletions ts/features/bonus/bpd/navigation/navigator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import EnrollPaymentMethodsScreen from "../screens/onboarding/EnrollPaymentMetho
import LoadActivateBpdScreen from "../screens/onboarding/LoadActivateBpdScreen";
import LoadBpdActivationStatus from "../screens/onboarding/LoadBpdActivationStatus";
import NoPaymentMethodsAvailableScreen from "../screens/onboarding/NoPaymentMethodsAvailableScreen";
import TMPBpdScreen from "../screens/test/TMPBpdScreen";
import BPD_ROUTES from "./routes";

const BpdNavigator = createStackNavigator(
Expand All @@ -30,6 +31,10 @@ const BpdNavigator = createStackNavigator(
},
[BPD_ROUTES.IBAN]: {
screen: MainIbanScreen
},
// TODO: remove after the introduction of the bpd detail screen
[BPD_ROUTES.TEST]: {
screen: TMPBpdScreen
}
},
{
Expand Down
4 changes: 3 additions & 1 deletion ts/features/bonus/bpd/navigation/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ const BPD_ROUTES = {
ENROLL_PAYMENT_METHODS: "BPD_ENROLL_PAYMENT_METHODS",
NO_PAYMENT_METHODS: "BPD_NO_PAYMENT_METHODS"
},
IBAN: "BPD_IBAN"
IBAN: "BPD_IBAN",
// TODO: remove after the introduction of the bpd detail screen
TEST: "BPD_TEST"
};

export default BPD_ROUTES;
134 changes: 134 additions & 0 deletions ts/features/bonus/bpd/screens/test/TMPBpdScreen.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
import * as pot from "italia-ts-commons/lib/pot";
import { View } from "native-base";
import { useEffect } from "react";
import * as React from "react";
import { SafeAreaView, ScrollView } from "react-native";
import { connect } from "react-redux";
import { Dispatch } from "redux";
import { Body } from "../../../../../components/core/typography/Body";
import { H1 } from "../../../../../components/core/typography/H1";
import { Label } from "../../../../../components/core/typography/Label";
import { LabelSmall } from "../../../../../components/core/typography/LabelSmall";
import { IOStyles } from "../../../../../components/core/variables/IOStyles";
import BaseScreenComponent from "../../../../../components/screens/BaseScreenComponent";
import FooterWithButtons from "../../../../../components/ui/FooterWithButtons";
import { GlobalState } from "../../../../../store/reducers/types";
import { walletsSelector } from "../../../../../store/reducers/wallet/wallets";
import { Wallet } from "../../../../../types/pagopa";
import { cancelButtonProps } from "../../../bonusVacanze/components/buttons/ButtonConfigurations";
import { PaymentMethodBpdList } from "../../components/PaymentMethodBpdList";
import {
fold,
isReady,
isUndefined,
RemoteValue
} from "../../model/RemoteValue";
import { bpdLoadActivationStatus } from "../../store/actions/details";
import { bpdDeleteUserFromProgram } from "../../store/actions/onboarding";
import { bpdEnabledSelector } from "../../store/reducers/details/activation";

export type Props = ReturnType<typeof mapDispatchToProps> &
ReturnType<typeof mapStateToProps>;

const renderBpdActive = (value: RemoteValue<boolean, Error>) =>
fold(
() => <LabelSmall color={"bluegrey"}>Sconosciuta</LabelSmall>,
() => <LabelSmall color={"bluegrey"}>In caricamento</LabelSmall>,
active => (
<LabelSmall color={active ? "blue" : "red"}>
{active ? "Attiva" : "Non attiva"}
</LabelSmall>
),
_ => <LabelSmall color={"red"}>Errore durante il caricamento</LabelSmall>
)(value);

const renderPaymentMethod = (
potWallets: pot.Pot<ReadonlyArray<Wallet>, Error>
) =>
pot.fold(
potWallets,
// TODO: handle error, loading with spinner if needed
() => (
<LabelSmall color={"bluegrey"}>
Metodi di pagamento sconosciuti
</LabelSmall>
),
() => (
<LabelSmall color={"bluegrey"}>
Metodi di pagamento in caricamento
</LabelSmall>
),
_ => null,
_ => (
<LabelSmall color={"red"}>
Errore nel recuperare i metodi di pagamento
</LabelSmall>
),
value => <PaymentMethodBpdList paymentList={value} />,
value => <PaymentMethodBpdList paymentList={value} />,
value => <PaymentMethodBpdList paymentList={value} />,
value => <PaymentMethodBpdList paymentList={value} />
);

/**
* A temp screen created to allow the test of some bpd functionalities waiting for the detail screen.
* TODO: remove after bpd detail screen
* @constructor
*/
const TmpBpdScreen: React.FunctionComponent<Props> = props => {
const bpdActive = renderBpdActive(props.bpdActive);

useEffect(() => {
if (isUndefined(props.bpdActive)) {
props.loadBpdActivation();
}
}, []);

return (
<BaseScreenComponent goBack={true} headerTitle={"Test Bpd"}>
<SafeAreaView style={IOStyles.flex}>
<View style={[IOStyles.horizontalContentPadding, IOStyles.flex]}>
<ScrollView>
<View spacer={true} large={true} />
<H1>Test bpd screen</H1>
<View spacer={true} large={true} />
<Body>La tua iscrizione al cashback è: {bpdActive}</Body>
<View spacer={true} large={true} />
{isReady(props.bpdActive) && props.bpdActive.value ? (
<>
<Label color={"bluegrey"}>Metodi di pagamento:</Label>
{renderPaymentMethod(props.potWallets)}
</>
) : (
<Body>
Iscriviti al cashback per visualizzare la lista dei metodi di
pagamento
</Body>
)}
</ScrollView>
</View>
{isReady(props.bpdActive) && props.bpdActive.value && (
<FooterWithButtons
type={"SingleButton"}
leftButton={cancelButtonProps(
props.cancelBpd,
"Cancella la tua iscrizione al cashback"
)}
/>
)}
</SafeAreaView>
</BaseScreenComponent>
);
};

const mapDispatchToProps = (dispatch: Dispatch) => ({
loadBpdActivation: () => dispatch(bpdLoadActivationStatus.request()),
cancelBpd: () => dispatch(bpdDeleteUserFromProgram.request())
});

const mapStateToProps = (state: GlobalState) => ({
bpdActive: bpdEnabledSelector(state),
potWallets: walletsSelector(state)
});

export default connect(mapStateToProps, mapDispatchToProps)(TmpBpdScreen);
11 changes: 1 addition & 10 deletions ts/screens/profile/ProfileMainScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import { AlertModal } from "../../components/ui/AlertModal";
import { LightModalContextInterface } from "../../components/ui/LightModal";
import Markdown from "../../components/ui/Markdown";
import Switch from "../../components/ui/Switch";
import { bpdEnabled, isPlaygroundsEnabled } from "../../config";
import { isPlaygroundsEnabled } from "../../config";
import I18n from "../../i18n";
import ROUTES from "../../navigation/routes";
import {
Expand Down Expand Up @@ -52,7 +52,6 @@ import { getAppVersion } from "../../utils/appVersion";
import { clipboardSetStringWithFeedback } from "../../utils/clipboard";
import { isDevEnv } from "../../utils/environment";
import { setStatusBarColorAndBackground } from "../../utils/statusBar";
import { bpdDeleteUserFromProgram } from "../../features/bonus/bpd/store/actions/onboarding";

type OwnProps = Readonly<{
navigation: NavigationScreenProp<NavigationState>;
Expand Down Expand Up @@ -484,13 +483,6 @@ class ProfileMainScreen extends React.PureComponent<Props, State> {
this.props.dispatchSessionExpired,
true
)}

{bpdEnabled &&
this.debugListItem(
"Leave BPD",
this.props.dispatchLeaveBpd,
true
)}
</React.Fragment>
)}
</React.Fragment>
Expand Down Expand Up @@ -556,7 +548,6 @@ const mapDispatchToProps = (dispatch: Dispatch) => ({
preferencesPagoPaTestEnvironmentSetEnabled({ isPagoPATestEnabled })
),
dispatchSessionExpired: () => dispatch(sessionExpired()),
dispatchLeaveBpd: () => dispatch(bpdDeleteUserFromProgram.request()),
dispatchPreferencesExperimentalFeaturesSetEnabled: (enabled: boolean) =>
dispatch(preferencesExperimentalFeaturesSetEnabled(enabled))
});
Expand Down
19 changes: 16 additions & 3 deletions ts/screens/wallet/WalletHomeScreen.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { fromNullable, fromPredicate, none } from "fp-ts/lib/Option";
import * as pot from "italia-ts-commons/lib/pot";
import { Content, Text, View } from "native-base";
import { Button, Content, Text, View } from "native-base";
import * as React from "react";
import { BackHandler, Image, RefreshControl, StyleSheet } from "react-native";
import {
Expand All @@ -12,6 +12,7 @@ import { connect } from "react-redux";
import { BonusActivationWithQrCode } from "../../../definitions/bonus_vacanze/BonusActivationWithQrCode";
import { TypeEnum } from "../../../definitions/pagopa/Wallet";
import ButtonDefaultOpacity from "../../components/ButtonDefaultOpacity";
import { Label } from "../../components/core/typography/Label";
import { withLightModalContext } from "../../components/helpers/withLightModalContext";
import { withValidatedEmail } from "../../components/helpers/withValidatedEmail";
import { withValidatedPagoPaVersion } from "../../components/helpers/withValidatedPagoPaVersion";
Expand All @@ -23,7 +24,7 @@ import { RotatedCards } from "../../components/wallet/card/RotatedCards";
import SectionCardComponent from "../../components/wallet/card/SectionCardComponent";
import TransactionsList from "../../components/wallet/TransactionsList";
import WalletLayout from "../../components/wallet/WalletLayout";
import { bonusVacanzeEnabled } from "../../config";
import { bonusVacanzeEnabled, bpdEnabled } from "../../config";
import RequestBonus from "../../features/bonus/bonusVacanze/components/RequestBonus";
import {
navigateToAvailableBonusScreen,
Expand All @@ -35,6 +36,7 @@ import {
} from "../../features/bonus/bonusVacanze/store/actions/bonusVacanze";
import { allBonusActiveSelector } from "../../features/bonus/bonusVacanze/store/reducers/allActive";
import { availableBonusTypesSelector } from "../../features/bonus/bonusVacanze/store/reducers/availableBonusesTypes";
import { navigateToBpdTestScreen } from "../../features/bonus/bpd/navigation/action/bpdTestNav";
import I18n from "../../i18n";
import {
navigateBack,
Expand Down Expand Up @@ -510,6 +512,15 @@ class WalletHomeScreen extends React.PureComponent<Props> {
gradientHeader={true}
headerPaddingMin={true}
>
{/* TODO: temp only, for test purpose,to be removed with bpd details */}
{bpdEnabled && (
<Button
style={{ width: "100%" }}
onPress={this.props.navigateToBpdTest}
>
<Label color={"white"}>BPD details</Label>
</Button>
)}
{this.newMethodAdded ? this.newMethodAddedContent : transactionContent}
{bonusVacanzeEnabled && (
<NavigationEvents onWillFocus={this.loadBonusVacanze} />
Expand Down Expand Up @@ -582,7 +593,9 @@ const mapDispatchToProps = (dispatch: Dispatch) => ({
dispatch(fetchTransactionsRequest({ start })),
loadWallets: () => dispatch(fetchWalletsRequest()),
dispatchAllTransactionLoaded: (transactions: ReadonlyArray<Transaction>) =>
dispatch(fetchTransactionsLoadComplete(transactions))
dispatch(fetchTransactionsLoadComplete(transactions)),
// TODO: Temp only, remove after bpd details
navigateToBpdTest: () => dispatch(navigateToBpdTestScreen())
});

export default withValidatedPagoPaVersion(
Expand Down