Skip to content

Commit 24bf639

Browse files
cnguyen812gabrielbazan7
authored andcommitted
Update card and giftcard deeplinks
1 parent aa355d7 commit 24bf639

File tree

6 files changed

+41
-69
lines changed

6 files changed

+41
-69
lines changed

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';
@@ -970,8 +969,8 @@ export const incomingShopLink =
970969
},
971970
});
972971
} else {
973-
navigationRef.navigate('Shop', {
974-
screen: ShopScreens.HOME,
972+
navigationRef.navigate(RootStacks.TABS, {
973+
screen: TabsScreens.SHOP,
975974
params: {
976975
screen: ShopTabs.GIFT_CARDS,
977976
},
@@ -1001,8 +1000,8 @@ export const incomingShopLink =
10011000
},
10021001
});
10031002
} else {
1004-
navigationRef.navigate('Shop', {
1005-
screen: ShopScreens.HOME,
1003+
navigationRef.navigate(RootStacks.TABS, {
1004+
screen: TabsScreens.SHOP,
10061005
params: {
10071006
screen: ShopTabs.SHOP_ONLINE,
10081007
},
@@ -1062,10 +1061,7 @@ export const incomingLink =
10621061
navigationRef.navigate(RootStacks.TABS, {
10631062
screen: TabsScreens.SETTINGS,
10641063
params: {
1065-
screen: SettingsScreens.Root,
1066-
params: {
1067-
redirectTo: redirectTo as any,
1068-
},
1064+
redirectTo: redirectTo as any,
10691065
},
10701066
});
10711067
};
@@ -1078,6 +1074,15 @@ export const incomingLink =
10781074
});
10791075
};
10801076
}
1077+
} else if (pathSegments[0] === 'wallet-card') {
1078+
const cardPath = pathSegments[1];
1079+
1080+
if (cardPath === 'pairing') {
1081+
navigationRef.navigate(RootStacks.CARD, {
1082+
screen: CardScreens.PAIRING,
1083+
params,
1084+
});
1085+
}
10811086
} else if (pathSegments[0] === 'card') {
10821087
const cardPath = pathSegments[1];
10831088
const createCardHandler = (cb: (cards: Card[]) => void) => {
@@ -1090,9 +1095,6 @@ export const incomingLink =
10901095
} else {
10911096
navigationRef.navigate(RootStacks.TABS, {
10921097
screen: TabsScreens.CARD,
1093-
params: {
1094-
screen: CardScreens.HOME,
1095-
},
10961098
});
10971099
}
10981100
};
@@ -1109,27 +1111,21 @@ export const incomingLink =
11091111
});
11101112
} else if (cardPath === 'offers') {
11111113
handler = createCardHandler(cards => {
1112-
navigationRef.navigate(RootStacks.TABS, {
1113-
screen: TabsScreens.CARD,
1114+
navigationRef.navigate(RootStacks.CARD, {
1115+
screen: CardScreens.SETTINGS,
11141116
params: {
1115-
screen: CardScreens.SETTINGS,
1116-
params: {
1117-
id: cards[0].id,
1118-
},
1117+
id: cards[0].id,
11191118
},
11201119
});
11211120

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

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)