Skip to content

Commit 7c4d211

Browse files
authored
Merge pull request #262 from internxt/feature/open-internxt-link-to-buy-plan
[_] feature/Add redirection in plans buttons to web links
2 parents 3fb5f9c + 919b7b9 commit 7c4d211

File tree

10 files changed

+62
-38
lines changed

10 files changed

+62
-38
lines changed

android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,8 @@ android {
8888
applicationId 'com.internxt.cloud'
8989
minSdkVersion rootProject.ext.minSdkVersion
9090
targetSdkVersion rootProject.ext.targetSdkVersion
91-
versionCode 101
92-
versionName "1.7.1"
91+
versionCode 103
92+
versionName "1.7.2"
9393

9494
buildConfigField("boolean", "REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS", (findProperty("reactNative.unstable_useRuntimeSchedulerAlways") ?: true).toString())
9595
}

android/app/src/main/res/values/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
<string name="app_name">Internxt</string>
33
<string name="expo_splash_screen_resize_mode" translatable="false">cover</string>
44
<string name="expo_splash_screen_status_bar_translucent" translatable="false">false</string>
5-
<string name="expo_runtime_version">1.7.0</string>
5+
<string name="expo_runtime_version">1.7.2</string>
66
</resources>

ios/Internxt/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<key>CFBundlePackageType</key>
2020
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
2121
<key>CFBundleShortVersionString</key>
22-
<string>1.7.1</string>
22+
<string>1.7.2</string>
2323
<key>CFBundleSignature</key>
2424
<string>????</string>
2525
<key>CFBundleURLTypes</key>

ios/Internxt/Supporting/Expo.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<key>EXUpdatesLaunchWaitMs</key>
1010
<integer>0</integer>
1111
<key>EXUpdatesRuntimeVersion</key>
12-
<string>1.7.0</string>
12+
<string>1.7.2</string>
1313
<key>EXUpdatesURL</key>
1414
<string>https://u.expo.dev/680f4feb-6315-4a50-93ec-36dcd0b831d2</string>
1515
</dict>

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "drive-mobile",
3-
"version": "v1.7.1",
3+
"version": "v1.7.2",
44
"private": true,
55
"license": "GNU",
66
"scripts": {

src/components/modals/RunOutOfStorageModal/index.tsx

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
import React from 'react';
21
import prettysize from 'prettysize';
3-
import { View, TouchableWithoutFeedback, TouchableHighlight } from 'react-native';
2+
import { TouchableHighlight, TouchableWithoutFeedback, View } from 'react-native';
43
import Modal from 'react-native-modalbox';
54

5+
import AppText from 'src/components/AppText';
6+
import { useTailwind } from 'tailwind-rn';
67
import RunOutImage from '../../../../assets/images/modals/runout.svg';
78
import strings from '../../../../assets/lang/strings';
8-
import { INFINITE_PLAN } from '../../../types';
9-
import { uiActions } from '../../../store/slices/ui';
10-
import { useAppDispatch, useAppSelector } from '../../../store/hooks';
11-
import { useTailwind } from 'tailwind-rn';
9+
import { openUrl } from '../../../helpers/utils';
1210
import useGetColor from '../../../hooks/useColor';
13-
import AppText from 'src/components/AppText';
11+
import { PRICING_URL } from '../../../services/drive/constants';
12+
import { useAppDispatch, useAppSelector } from '../../../store/hooks';
13+
import { uiActions } from '../../../store/slices/ui';
14+
import { INFINITE_PLAN } from '../../../types';
1415

1516
function RunOutOfStorageModal(): JSX.Element {
1617
const tailwind = useTailwind();
@@ -34,9 +35,10 @@ function RunOutOfStorageModal(): JSX.Element {
3435
const getUsageString = () => {
3536
return prettysize(totalUsage);
3637
};
38+
3739
const onUpgradeNowButtonPressed = () => {
3840
dispatch(uiActions.setShowRunOutSpaceModal(false));
39-
dispatch(uiActions.setIsPlansModalOpen(true));
41+
openUrl(PRICING_URL);
4042
};
4143

4244
return (

src/helpers/utils.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { Linking } from 'react-native';
2+
import { logger } from '../services/common';
3+
4+
export const openUrl = async (url: string) => {
5+
try {
6+
const supported = await Linking.canOpenURL(url);
7+
8+
if (supported) {
9+
await Linking.openURL(url);
10+
} else {
11+
logger.error(`Cannot open URL: ${url}, not supported`);
12+
}
13+
} catch (error) {
14+
logger.error(`An error occurred trying to open the URL: ${url}`, error);
15+
}
16+
};

src/screens/AccountScreen/index.tsx

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
1+
import { imageService, PROFILE_PICTURE_CACHE_KEY } from '@internxt-mobile/services/common';
2+
import errorService from '@internxt-mobile/services/ErrorService';
3+
import { fs } from '@internxt-mobile/services/FileSystemService';
14
import { CaretRight, CheckCircle, Warning } from 'phosphor-react-native';
5+
import { useEffect, useMemo, useState } from 'react';
26
import { Alert, ScrollView, TouchableWithoutFeedback, View } from 'react-native';
7+
import storageService from 'src/services/StorageService';
8+
import { paymentsSelectors } from 'src/store/slices/payments';
39
import { useTailwind } from 'tailwind-rn';
10+
import { useCountdown } from 'usehooks-ts';
411
import strings from '../../../assets/lang/strings';
512
import AppButton from '../../components/AppButton';
613
import AppScreen from '../../components/AppScreen';
714
import AppScreenTitle from '../../components/AppScreenTitle';
815
import AppText from '../../components/AppText';
916
import SettingsGroup from '../../components/SettingsGroup';
1017
import UserProfilePicture from '../../components/UserProfilePicture';
18+
import { openUrl } from '../../helpers/utils';
1119
import useGetColor from '../../hooks/useColor';
20+
import { PRICING_URL } from '../../services/drive/constants';
1221
import { useAppDispatch, useAppSelector } from '../../store/hooks';
1322
import { authSelectors, authThunks } from '../../store/slices/auth';
1423
import { uiActions } from '../../store/slices/ui';
1524
import { SettingsScreenProps } from '../../types/navigation';
16-
import { useCountdown } from 'usehooks-ts';
17-
import { useEffect, useMemo, useState } from 'react';
18-
import storageService from 'src/services/StorageService';
19-
import { paymentsSelectors } from 'src/store/slices/payments';
20-
import { constants } from 'src/services/AppService';
21-
import { imageService, PROFILE_PICTURE_CACHE_KEY } from '@internxt-mobile/services/common';
22-
import { fs } from '@internxt-mobile/services/FileSystemService';
23-
import errorService from '@internxt-mobile/services/ErrorService';
2425

2526
function AccountScreen({ navigation }: SettingsScreenProps<'Account'>): JSX.Element {
2627
const showBilling = useAppSelector(paymentsSelectors.shouldShowBilling);
@@ -82,8 +83,9 @@ function AccountScreen({ navigation }: SettingsScreenProps<'Account'>): JSX.Elem
8283
}
8384
};
8485
const onBillingPressed = () => {
85-
dispatch(uiActions.setIsPlansModalOpen(true));
86+
openUrl(PRICING_URL);
8687
};
88+
8789
const onManageSubscriptionPressed = () => {
8890
navigation.navigate('Plan');
8991
};

src/screens/StorageScreen/index.tsx

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
1-
import React, { useState } from 'react';
2-
import { View, ScrollView } from 'react-native';
1+
import { useState } from 'react';
2+
import { ScrollView, View } from 'react-native';
33
import GestureRecognizer from 'react-native-swipe-gestures';
44

5+
import AppButton from 'src/components/AppButton';
6+
import SettingsGroup from 'src/components/SettingsGroup';
7+
import storageService from 'src/services/StorageService';
8+
import { paymentsSelectors } from 'src/store/slices/payments';
9+
import { storageSelectors } from 'src/store/slices/storage';
10+
import { useTailwind } from 'tailwind-rn';
511
import strings from '../../../assets/lang/strings';
612
import AppProgressBar from '../../components/AppProgressBar';
7-
import AppScreenTitle from '../../components/AppScreenTitle';
8-
import { useAppDispatch, useAppSelector } from '../../store/hooks';
9-
import { INFINITE_PLAN } from '../../types';
1013
import AppScreen from '../../components/AppScreen';
11-
import { SettingsScreenProps } from '../../types/navigation';
12-
import { useTailwind } from 'tailwind-rn';
14+
import AppScreenTitle from '../../components/AppScreenTitle';
1315
import AppText from '../../components/AppText';
16+
import { openUrl } from '../../helpers/utils';
1417
import useGetColor from '../../hooks/useColor';
15-
import { uiActions } from 'src/store/slices/ui';
16-
import SettingsGroup from 'src/components/SettingsGroup';
17-
import storageService from 'src/services/StorageService';
18-
import { storageSelectors } from 'src/store/slices/storage';
19-
import AppButton from 'src/components/AppButton';
20-
import { paymentsSelectors } from 'src/store/slices/payments';
18+
import { PRICING_URL } from '../../services/drive/constants';
19+
import { useAppSelector } from '../../store/hooks';
20+
import { INFINITE_PLAN } from '../../types';
21+
import { SettingsScreenProps } from '../../types/navigation';
2122

2223
function StorageScreen({ navigation }: SettingsScreenProps<'Storage'>): JSX.Element {
2324
const [currentStatusStep, setCurrentStatusStep] = useState(0);
@@ -30,7 +31,7 @@ function StorageScreen({ navigation }: SettingsScreenProps<'Storage'>): JSX.Elem
3031
const usagePercent = useAppSelector(storageSelectors.usagePercent);
3132
const tailwind = useTailwind();
3233
const getColor = useGetColor();
33-
const dispatch = useAppDispatch();
34+
3435
const getLimitString = () => {
3536
if (limit === 0) {
3637
return '...';
@@ -43,9 +44,11 @@ function StorageScreen({ navigation }: SettingsScreenProps<'Storage'>): JSX.Elem
4344
return storageService.toString(limit);
4445
};
4546
const onBackButtonPressed = () => navigation.goBack();
47+
4648
const onUpgradePressed = () => {
47-
dispatch(uiActions.setIsPlansModalOpen(true));
49+
openUrl(PRICING_URL);
4850
};
51+
4952
const statusSteps = [
5053
() => (
5154
<>

src/services/drive/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export const DRIVE_THUMBNAILS_DIRECTORY = `${DRIVE_ROOT_DIRECTORY}/thumbnails`;
55
export const DRIVE_CACHE_DIRECTORY = `${DRIVE_ROOT_DIRECTORY}/cache`;
66
export const MAX_CACHE_DIRECTORY_SIZE_IN_BYTES = 1024 * 1024 * 500;
77

8+
export const PRICING_URL = 'https://internxt.com/pricing';
89
// 10% of the directory size
910
export const MAX_FILE_SIZE_FOR_CACHING = MAX_CACHE_DIRECTORY_SIZE_IN_BYTES * 0.1;
1011

0 commit comments

Comments
 (0)