Skip to content

Commit 8762e9d

Browse files
committed
Update card and giftcard deeplinks
1 parent b77f3db commit 8762e9d

6 files changed

Lines changed: 41 additions & 69 deletions

File tree

src/navigation/card/components/CardSettingsList.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import {ToggleSpinnerState} from './ToggleSpinner';
3131
interface SettingsListProps {
3232
card: Card;
3333
orderPhysical?: boolean;
34-
navigation: StackNavigationProp<CardStackParamList, 'Settings'>;
34+
navigation: StackNavigationProp<CardStackParamList, CardScreens.SETTINGS>;
3535
}
3636

3737
const LINKS: {

src/navigation/card/screens/CardPairingScreen.tsx

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import {StackActions, useNavigation} from '@react-navigation/native';
1+
import {StackActions} from '@react-navigation/native';
22
import {StackScreenProps} from '@react-navigation/stack';
33
import React, {useCallback} from 'react';
4-
import {RootStacks} from '../../../Root';
4+
import {RootStacks, navigationRef} from '../../../Root';
55
import {CardActions} from '../../../store/card';
66
import {VirtualDesignCurrency} from '../../../store/card/card.types';
77
import {incomingData} from '../../../store/scan/scan.effects';
@@ -25,20 +25,10 @@ const CardPairingScreen: React.FC<
2525
> = props => {
2626
const {route} = props;
2727
const {secret, code, paymentUrl, dashboardRedirect} = route.params || {};
28-
const navigation = useNavigation();
2928
const dispatch = useAppDispatch();
3029

3130
const goToHomeTab = () => {
32-
const navState = navigation.getState();
33-
34-
// @ts-ignore
35-
if (navState.routeNames.some(name => name === 'Home')) {
36-
navigation.navigate('Tabs', {
37-
screen: 'Home',
38-
});
39-
} else {
40-
navigation.dispatch(StackActions.replace('Tabs', {screen: 'Home'}));
41-
}
31+
navigationRef.dispatch(StackActions.replace('Tabs', {screen: 'Home'}));
4232
};
4333

4434
const onSuccess = useCallback(() => {
@@ -58,7 +48,7 @@ const CardPairingScreen: React.FC<
5848
goToHomeTab();
5949

6050
if (paymentUrl) {
61-
navigation.dispatch(StackActions.replace('Tabs', {screen: 'Home'}));
51+
navigationRef.dispatch(StackActions.replace('Tabs', {screen: 'Home'}));
6252
// Reconstructing the url since paymentUrl from deeplink is not in the right format
6353
if (paymentUrl.includes('bitpay.com')) {
6454
let url = 'https://';
@@ -75,14 +65,15 @@ const CardPairingScreen: React.FC<
7565

7666
const onComplete = useCallback(() => {
7767
if (!paymentUrl) {
78-
const navState = navigation.getState();
68+
const navState = navigationRef.getState();
69+
7970
// @ts-ignore
80-
if (navState.routeNames.some(name => name === TabsScreens.CARD)) {
81-
navigation.navigate(RootStacks.TABS, {
71+
if (navState.routeNames.some(name => name === RootStacks.TABS)) {
72+
navigationRef.navigate(RootStacks.TABS, {
8273
screen: TabsScreens.CARD,
8374
});
8475
} else {
85-
navigation.dispatch(StackActions.replace(RootStacks.TABS, {screen: TabsScreens.CARD}));
76+
navigationRef.dispatch(StackActions.replace(RootStacks.TABS, {screen: TabsScreens.CARD}));
8677
}
8778
}
8879
}, []);

src/navigation/card/screens/CardSettings.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ import {Card} from '../../../store/card/card.models';
2020
import {selectCardGroups} from '../../../store/card/card.selectors';
2121
import {useAppSelector} from '../../../utils/hooks';
2222
import {TabsScreens} from '../../tabs/TabsStack';
23-
import {CardStackParamList} from '../CardStack';
23+
import {CardScreens, CardStackParamList} from '../CardStack';
2424
import SettingsList from '../components/CardSettingsList';
2525
import SettingsSlide from '../components/CardSettingsSlide';
2626

2727
export type CardSettingsParamList = {
2828
id: string;
2929
};
3030

31-
type CardSettingsProps = StackScreenProps<CardStackParamList, 'Settings'>;
31+
type CardSettingsProps = StackScreenProps<CardStackParamList, CardScreens.SETTINGS>;
3232

3333
const CardSettingsContainer = styled.View`
3434
padding: 0 ${ScreenGutter} ${ScreenGutter};

src/navigation/tabs/shop/gift-card/GiftCardDeeplink.tsx

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import {StackScreenProps} from '@react-navigation/stack';
22
import React, {useEffect, useRef} from 'react';
3-
import {RootStackParamList} from '../../../../Root';
3+
import {RootStackParamList, RootStacks} from '../../../../Root';
44
import {Analytics} from '../../../../store/analytics/analytics.effects';
55
import {selectAvailableGiftCards} from '../../../../store/shop/shop.selectors';
66
import {useAppDispatch, useAppSelector} from '../../../../utils/hooks';
7+
import {TabsScreens} from '../../TabsStack';
8+
import {GiftCardScreens} from './GiftCardStack';
79

810
export type GiftCardDeeplinkScreenParamList =
911
| {
@@ -16,7 +18,7 @@ export type GiftCardDeeplinkScreenParamList =
1618
* Otherwise we should configure the deeplink directly.
1719
*/
1820
const GiftCardDeeplinkScreen: React.FC<
19-
StackScreenProps<RootStackParamList, 'GiftCardDeeplink'>
21+
StackScreenProps<RootStackParamList, RootStacks.GIFT_CARD_DEEPLINK>
2022
> = ({navigation, route}) => {
2123
const merchantName = ((route.params || {}).merchant || '').toLowerCase();
2224
const availableGiftCards = useAppSelector(selectAvailableGiftCards);
@@ -34,18 +36,15 @@ const GiftCardDeeplinkScreen: React.FC<
3436
}),
3537
);
3638
if (targetedGiftCardRef.current) {
37-
navigation.replace('GiftCard', {
38-
screen: 'BuyGiftCard',
39+
navigation.replace(RootStacks.GIFT_CARD, {
40+
screen: GiftCardScreens.BUY_GIFT_CARD,
3941
params: {
4042
cardConfig: targetedGiftCardRef.current,
4143
},
4244
});
4345
} else {
44-
navigation.replace('Tabs', {
45-
screen: 'Shop',
46-
params: {
47-
screen: 'Home',
48-
},
46+
navigation.replace(RootStacks.TABS, {
47+
screen: TabsScreens.SHOP,
4948
});
5049
}
5150
}, [navigation]);

src/store/app/app.effects.ts

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,9 @@ import {
8181
getAvailableGiftCards,
8282
getCategoriesWithIntegrations,
8383
} from '../shop/shop.selectors';
84-
import {SettingsScreens} from '../../navigation/tabs/settings/SettingsStack';
8584
import {MerchantScreens} from '../../navigation/tabs/shop/merchant/MerchantStack';
8685
import {ShopTabs} from '../../navigation/tabs/shop/ShopHome';
87-
import {ShopScreens} from '../../navigation/tabs/shop/ShopStack';
86+
import {ShopScreens} from '../../navigation/shop/ShopStack';
8887
import QuickActions, {ShortcutItem} from 'react-native-quick-actions';
8988
import {ShortcutList} from '../../constants/shortcuts';
9089
import {goToBuyCrypto} from '../buy-crypto/buy-crypto.effects';
@@ -945,8 +944,8 @@ export const incomingShopLink =
945944
},
946945
});
947946
} else {
948-
navigationRef.navigate('Shop', {
949-
screen: ShopScreens.HOME,
947+
navigationRef.navigate(RootStacks.TABS, {
948+
screen: TabsScreens.SHOP,
950949
params: {
951950
screen: ShopTabs.GIFT_CARDS,
952951
},
@@ -976,8 +975,8 @@ export const incomingShopLink =
976975
},
977976
});
978977
} else {
979-
navigationRef.navigate('Shop', {
980-
screen: ShopScreens.HOME,
978+
navigationRef.navigate(RootStacks.TABS, {
979+
screen: TabsScreens.SHOP,
981980
params: {
982981
screen: ShopTabs.SHOP_ONLINE,
983982
},
@@ -1030,10 +1029,7 @@ export const incomingLink =
10301029
navigationRef.navigate(RootStacks.TABS, {
10311030
screen: TabsScreens.SETTINGS,
10321031
params: {
1033-
screen: SettingsScreens.Root,
1034-
params: {
1035-
redirectTo: redirectTo as any,
1036-
},
1032+
redirectTo: redirectTo as any,
10371033
},
10381034
});
10391035
};
@@ -1046,6 +1042,15 @@ export const incomingLink =
10461042
});
10471043
};
10481044
}
1045+
} else if (pathSegments[0] === 'wallet-card') {
1046+
const cardPath = pathSegments[1];
1047+
1048+
if (cardPath === 'pairing') {
1049+
navigationRef.navigate(RootStacks.CARD, {
1050+
screen: CardScreens.PAIRING,
1051+
params,
1052+
});
1053+
}
10491054
} else if (pathSegments[0] === 'card') {
10501055
const cardPath = pathSegments[1];
10511056
const createCardHandler = (cb: (cards: Card[]) => void) => {
@@ -1058,9 +1063,6 @@ export const incomingLink =
10581063
} else {
10591064
navigationRef.navigate(RootStacks.TABS, {
10601065
screen: TabsScreens.CARD,
1061-
params: {
1062-
screen: CardScreens.HOME,
1063-
},
10641066
});
10651067
}
10661068
};
@@ -1077,27 +1079,21 @@ export const incomingLink =
10771079
});
10781080
} else if (cardPath === 'offers') {
10791081
handler = createCardHandler(cards => {
1080-
navigationRef.navigate(RootStacks.TABS, {
1081-
screen: TabsScreens.CARD,
1082+
navigationRef.navigate(RootStacks.CARD, {
1083+
screen: CardScreens.SETTINGS,
10821084
params: {
1083-
screen: CardScreens.SETTINGS,
1084-
params: {
1085-
id: cards[0].id,
1086-
},
1085+
id: cards[0].id,
10871086
},
10881087
});
10891088

10901089
dispatch(CardEffects.startOpenDosh());
10911090
});
10921091
} else if (cardPath === 'referral') {
10931092
handler = createCardHandler(cards => {
1094-
navigationRef.navigate(RootStacks.TABS, {
1095-
screen: TabsScreens.CARD,
1093+
navigationRef.navigate(RootStacks.CARD, {
1094+
screen: CardScreens.REFERRAL,
10961095
params: {
1097-
screen: CardScreens.REFERRAL,
1098-
params: {
1099-
card: cards[0],
1100-
},
1096+
card: cards[0],
11011097
},
11021098
});
11031099
});

src/utils/hooks/useDeeplinks.ts

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import {
22
getActionFromState,
33
getStateFromPath,
44
LinkingOptions,
5-
PathConfig,
65
} from '@react-navigation/native';
76
import {useMemo, useRef} from 'react';
87
import {Linking} from 'react-native';
@@ -14,12 +13,10 @@ import {
1413
APP_UNIVERSAL_LINK_DOMAINS,
1514
} from '../../constants/config';
1615
import {BitpayIdScreens} from '../../navigation/bitpay-id/BitpayIdStack';
17-
import {CardScreens} from '../../navigation/card/CardStack';
1816
import {BuyCryptoScreens} from '../../navigation/services/buy-crypto/BuyCryptoStack';
1917
import {SwapCryptoScreens} from '../../navigation/services/swap-crypto/SwapCryptoStack';
2018
import {CoinbaseScreens} from '../../navigation/coinbase/CoinbaseStack';
2119
import {navigationRef, RootStackParamList, RootStacks} from '../../Root';
22-
import {TabsScreens, TabsStackParamList} from '../../navigation/tabs/TabsStack';
2320
import {incomingData} from '../../store/scan/scan.effects';
2421
import {showBlur} from '../../store/app/app.actions';
2522
import {incomingLink} from '../../store/app/app.effects';
@@ -40,17 +37,6 @@ const getLinkingConfig = (): LinkingOptions<RootStackParamList>['config'] => ({
4037
[BitpayIdScreens.RECEIVE_SETTINGS]: 'receive-settings',
4138
},
4239
},
43-
[RootStacks.TABS]: {
44-
screens: {
45-
[TabsScreens.CARD]: {
46-
path: 'wallet-card',
47-
initialRouteName: CardScreens.HOME,
48-
screens: {
49-
[CardScreens.PAIRING]: 'pairing',
50-
},
51-
},
52-
},
53-
} as PathConfig<TabsStackParamList>,
5440
[RootStacks.GIFT_CARD_DEEPLINK]: 'giftcard',
5541
[RootStacks.BUY_CRYPTO]: {
5642
screens: {

0 commit comments

Comments
 (0)