Skip to content

Commit 132987f

Browse files
cnguyen812gabrielbazan7
authored andcommitted
Update card and giftcard deeplinks
1 parent 25f4a24 commit 132987f

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
@@ -30,7 +30,7 @@ import {ToggleSpinnerState} from './ToggleSpinner';
3030
interface SettingsListProps {
3131
card: Card;
3232
orderPhysical?: boolean;
33-
navigation: StackNavigationProp<CardStackParamList, 'Settings'>;
33+
navigation: StackNavigationProp<CardStackParamList, CardScreens.SETTINGS>;
3434
}
3535

3636
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';
@@ -969,8 +968,8 @@ export const incomingShopLink =
969968
},
970969
});
971970
} else {
972-
navigationRef.navigate('Shop', {
973-
screen: ShopScreens.HOME,
971+
navigationRef.navigate(RootStacks.TABS, {
972+
screen: TabsScreens.SHOP,
974973
params: {
975974
screen: ShopTabs.GIFT_CARDS,
976975
},
@@ -1000,8 +999,8 @@ export const incomingShopLink =
1000999
},
10011000
});
10021001
} else {
1003-
navigationRef.navigate('Shop', {
1004-
screen: ShopScreens.HOME,
1002+
navigationRef.navigate(RootStacks.TABS, {
1003+
screen: TabsScreens.SHOP,
10051004
params: {
10061005
screen: ShopTabs.SHOP_ONLINE,
10071006
},
@@ -1061,10 +1060,7 @@ export const incomingLink =
10611060
navigationRef.navigate(RootStacks.TABS, {
10621061
screen: TabsScreens.SETTINGS,
10631062
params: {
1064-
screen: SettingsScreens.Root,
1065-
params: {
1066-
redirectTo: redirectTo as any,
1067-
},
1063+
redirectTo: redirectTo as any,
10681064
},
10691065
});
10701066
};
@@ -1077,6 +1073,15 @@ export const incomingLink =
10771073
});
10781074
};
10791075
}
1076+
} else if (pathSegments[0] === 'wallet-card') {
1077+
const cardPath = pathSegments[1];
1078+
1079+
if (cardPath === 'pairing') {
1080+
navigationRef.navigate(RootStacks.CARD, {
1081+
screen: CardScreens.PAIRING,
1082+
params,
1083+
});
1084+
}
10801085
} else if (pathSegments[0] === 'card') {
10811086
const cardPath = pathSegments[1];
10821087
const createCardHandler = (cb: (cards: Card[]) => void) => {
@@ -1089,9 +1094,6 @@ export const incomingLink =
10891094
} else {
10901095
navigationRef.navigate(RootStacks.TABS, {
10911096
screen: TabsScreens.CARD,
1092-
params: {
1093-
screen: CardScreens.HOME,
1094-
},
10951097
});
10961098
}
10971099
};
@@ -1108,27 +1110,21 @@ export const incomingLink =
11081110
});
11091111
} else if (cardPath === 'offers') {
11101112
handler = createCardHandler(cards => {
1111-
navigationRef.navigate(RootStacks.TABS, {
1112-
screen: TabsScreens.CARD,
1113+
navigationRef.navigate(RootStacks.CARD, {
1114+
screen: CardScreens.SETTINGS,
11131115
params: {
1114-
screen: CardScreens.SETTINGS,
1115-
params: {
1116-
id: cards[0].id,
1117-
},
1116+
id: cards[0].id,
11181117
},
11191118
});
11201119

11211120
dispatch(CardEffects.startOpenDosh());
11221121
});
11231122
} else if (cardPath === 'referral') {
11241123
handler = createCardHandler(cards => {
1125-
navigationRef.navigate(RootStacks.TABS, {
1126-
screen: TabsScreens.CARD,
1124+
navigationRef.navigate(RootStacks.CARD, {
1125+
screen: CardScreens.REFERRAL,
11271126
params: {
1128-
screen: CardScreens.REFERRAL,
1129-
params: {
1130-
card: cards[0],
1131-
},
1127+
card: cards[0],
11321128
},
11331129
});
11341130
});

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)