Merge branch 'development' into nt/use-query-post-display

This commit is contained in:
Nouman Tahir 2023-01-10 16:54:21 +05:00
commit 89b5995ecd
10 changed files with 155 additions and 95 deletions

View File

@ -30,10 +30,10 @@ PlayStore Android: https://android.ecency.com
- Install: [download here](https://github.com/infinitered/reactotron/blob/master/docs/installing.md)
- Run: After installation, start the reactotron desktop application
- Link: For android, run `adb reverse tcp:9090 tcp:9090` and restart app. For iOS, it should connect without futher config.
- Link: For android, run `adb reverse tcp:9090 tcp:9090` and restart app. For iOS, it should connect without further config.
- Usage:
1. use `Timeline` tab to track logs and network call
2. use `State` tab to track redux stage changes, to track particular store, add it by it's initilzing name, example: `account`
2. use `State` tab to track redux stage changes, to track particular store, add it by its initializing name, example: `account`
## Starting for IOS
@ -69,11 +69,12 @@ PlayStore Android: https://android.ecency.com
- [Issues](https://github.com/ecency/ecency-mobile/issues)
2. If the item already exists and is in progress, please remove the card or the issue you were assigned and leave a note that it is a duplicate.
3.If the item is not being worked on, please make sure that you put the card or issue as "In Progress" and assign it to yourself so other developers know that you are working on it.
3. If the item is not being worked on, please make sure that you put the card or issue as "In Progress" and assign it to yourself so other developers know that you are working on it.
#### Patch a day
It is important to make the work you are doing visible to other team members, especially because there are developers in different location.
It is important to make the work you are doing visible to other team members, especially because there are developers in different locations.
Even if you are not done the work on your patch, make sure to put a Pull Request up and leave a note that this is work in progress (WIP) so that others do not try to merge in your patch.
If you would like to have someone in particular review your work, leave your patch as WIP and assign the developers that need to review or update your patch before it is ready to be reviewed by other team members.
@ -90,7 +91,7 @@ When you create a pull request for your patch, make sure to leave all the inform
Main Branch `master`
If you resolved a issue or something You have to whern you commit your pr commit message include issue number for ex. resolved #10 or closed #10 etc.
If you resolved an issue or something, you have to include the issue number (for ex. resolved #10 or closed #10) in your pr commit message.
#### Before you start

View File

@ -116,6 +116,21 @@
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>message</string>
<string>readdle-spark</string>
<string>airmail</string>
<string>ms-outlook</string>
<string>googlegmail</string>
<string>inbox-gmail</string>
<string>ymail</string>
<string>superhuman</string>
<string>yandexmail</string>
<string>fastmail</string>
<string>protonmail</string>
<string>szn-email</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>bugsnag</key>

View File

@ -108,6 +108,7 @@
"react-native-date-picker": "^4.2.0",
"react-native-device-info": "^10.2.1",
"react-native-dynamic": "^1.0.0",
"react-native-email-link": "^1.14.3",
"react-native-extended-stylesheet": "^0.10.0",
"react-native-fast-image": "^8.3.2",
"react-native-fingerprint-scanner": "hieuvp/react-native-fingerprint-scanner",

View File

@ -37,7 +37,7 @@ export const ActionPanel = ({
) : (
<IconButton
iconType="MaterialCommunityIcons"
name={'account-plus'}
name="account-plus"
size={26}
color={EStyleSheet.value(followColor)}
disabled={isFollowing || isLoading}

View File

@ -87,7 +87,7 @@ export default EStyleSheet.create({
},
itemWrapper: {
flexDirection: 'row',
alignItems:'center',
alignItems: 'center',
marginLeft: 55,
},
versionText: {

View File

@ -305,9 +305,11 @@
"mail": "Enter your email address",
"ref_user": "Referred user (Optional)",
"500_error": "Your request could not be processed, signup queue is likely full! Try again in few minutes...",
"error_message": "{message}\nTry again or try purchasing account instead",
"title_description": "One account to manage everything",
"form_description": "By signing up with us, you agree to our Terms of Service and Privacy Policies.",
"registering":"Registering Your Account..."
"registering":"Registering Your Account...",
"registered":"Registration Successful\nCheck your email for instruction"
},
"home": {
"feed": "Feed",
@ -467,6 +469,7 @@
"claim_reward_balance_ok": "Reward balance claimed",
"fail": "Fail!",
"move": "Move",
"continue": "Continue",
"move_question": "Are you sure to move to drafts?",
"success_shared": "Success! Content submitted!",
"success_moved": "Moved to draft",

View File

@ -6,9 +6,10 @@ import { SafeAreaView } from 'react-native-safe-area-context';
import { useNavigation } from '@react-navigation/native';
import { ScrollView, TouchableOpacity } from 'react-native-gesture-handler';
import EStyleSheet from 'react-native-extended-stylesheet';
import { openInbox } from 'react-native-email-link';
import styles from '../styles/registerAccountModalStyles';
import { InAppPurchaseContainer } from '../../../containers';
import { BoostPlaceHolder, Modal, ProductItemLine } from '../../../components';
import { Icon, MainButton, Modal, PostCardPlaceHolder } from '../../../components';
import LOGO_ESTM from '../../../assets/esteemcoin_boost.png';
import { signUp } from '../../../providers/ecency/ecency';
import ROUTES from '../../../constants/routeNames';
@ -31,6 +32,7 @@ export const RegisterAccountModal = forwardRef(({ username, email, refUsername }
const [showModal, setShowModal] = useState(false);
const [disableFree, setDisableFree] = useState(false);
const [isRegistering, setIsRegistering] = useState(false);
const [isRegistered, setIsRegistered] = useState(false);
useImperativeHandle(ref, () => ({
showModal: ({ purchaseOnly }: { purchaseOnly: boolean } = { purchaseOnly: false }) => {
@ -39,9 +41,9 @@ export const RegisterAccountModal = forwardRef(({ username, email, refUsername }
},
}));
const _handleOnRegisterSuccess = () => {
const _onContinuePress = () => {
navigation.navigate(ROUTES.DRAWER.MAIN);
Alert.alert('Success', 'Hurrah, you did it! Expect email from us with further instructions.');
openInbox();
};
const _handleOnPressRegister = () => {
@ -50,41 +52,31 @@ export const RegisterAccountModal = forwardRef(({ username, email, refUsername }
signUp(username, email, refUsername)
.then((result) => {
if (result) {
_handleOnRegisterSuccess();
setIsRegistered(true);
}
setIsRegistering(false);
})
.catch((err) => {
let title = intl.formatMessage({ id: 'alert.fail' });
let body = intl.formatMessage({ id: 'alert.unknow_error' });
if (get(err, 'response.status') === 500) {
Alert.alert(
intl.formatMessage({ id: 'alert.fail' }),
intl.formatMessage({ id: 'register.500_error' }),
);
title = intl.formatMessage({ id: 'alert.fail' });
body = intl.formatMessage({ id: 'register.500_error' });
} else if (get(err, 'response.data.message')) {
Alert.alert(
intl.formatMessage({ id: 'alert.fail' }),
`${err.response.data.message}\nTry buying account instead`,
[
{
text: 'Okay',
},
{
text: 'Cancel',
},
],
);
} else {
Alert.alert(
intl.formatMessage({ id: 'alert.fail' }),
intl.formatMessage({ id: 'alert.unknow_error' }),
title = intl.formatMessage({ id: 'alert.fail' });
body = intl.formatMessage(
{ id: 'register.error_message' },
{ message: err.response.data.message },
);
}
Alert.alert(title, body);
setIsRegistering(false);
});
};
const _handleOnPurchaseSuccess = () => {
_handleOnRegisterSuccess();
setIsRegistered(true);
setIsRegistering(false);
};
@ -92,6 +84,44 @@ export const RegisterAccountModal = forwardRef(({ username, email, refUsername }
setIsRegistering(false);
};
const _renderIntermediateComponent = () => {
if (!isRegistering && !isRegistered) {
return null;
}
const _textId = isRegistered ? 'register.registered' : 'register.registering';
const _indicator = isRegistered ? (
<Icon
size={56}
color={EStyleSheet.value('$primaryGreen')}
name="check-circle"
iconType="MaterialIcons"
/>
) : (
<ActivityIndicator size="large" color={EStyleSheet.value('$primaryBlack')} />
);
const _action = isRegistered && (
<MainButton
onPress={_onContinuePress}
text={intl.formatMessage({ id: 'alert.continue' })}
style={styles.actionButton}
/>
);
return (
<View style={styles.registeringContainer}>
{_indicator}
<Text style={styles.registeringText}>
{intl.formatMessage({
id: _textId,
})}
</Text>
{_action}
</View>
);
};
const _renderUserInfo = (text: string, style: TextStyle) => (
<View style={styles.userInfoContainer}>
<View style={styles.userInfoWrapper}>
@ -125,72 +155,66 @@ export const RegisterAccountModal = forwardRef(({ username, email, refUsername }
};
const _renderRegisterOptions = ({ productList, buyItem }) => {
return (
<View style={styles.contentContainer}>
<View style={styles.headerContainer}>
<View>
{_renderUserInfo(username, styles.usernameStyle)}
{_renderUserInfo(email + email, styles.emailStyle)}
</View>
<Image style={styles.logoEstm} source={LOGO_ESTM} />
</View>
return isRegistered || isRegistering ? (
_renderIntermediateComponent()
) : (
<ScrollView style={styles.productsWrapper}>
{!disableFree &&
_renderCard({
titleId: 'free_account.title',
descriptionId: 'free_account.desc',
{isRegistering ? (
<View style={styles.registeringContainer}>
<ActivityIndicator size="large" color={EStyleSheet.value('$primaryBlue')} />
<Text style={styles.registeringText}>
{intl.formatMessage({
id: 'register.registering',
})}
</Text>
</View>
) : (
<ScrollView style={styles.productsWrapper}>
{!disableFree &&
_renderCard({
titleId: 'free_account.title',
descriptionId: 'free_account.desc',
btnTitle: intl.formatMessage({ id: 'free_account.btn_register' }),
onPress: _handleOnPressRegister,
})}
{productList.map((product) =>
_renderCard({
titleId: 'buy_account.title',
descriptionId: 'buy_account.desc',
btnTitle: intl.formatMessage(
{ id: 'buy_account.btn_register' },
{ price: product.localizedPrice },
),
onPress: () => {
setIsRegistering(true);
buyItem(product.productId);
},
}),
)}
</ScrollView>
btnTitle: intl.formatMessage({ id: 'free_account.btn_register' }),
onPress: _handleOnPressRegister,
})}
{productList.map((product) =>
_renderCard({
titleId: 'buy_account.title',
descriptionId: 'buy_account.desc',
btnTitle: intl.formatMessage(
{ id: 'buy_account.btn_register' },
{ price: product.localizedPrice },
),
onPress: () => {
setIsRegistering(true);
buyItem(product.productId);
},
}),
)}
</View>
</ScrollView>
);
};
const _renderContent = () => {
return (
<InAppPurchaseContainer
skus={ITEM_SKUS}
username={username}
email={email}
isNoSpin
handleOnPurchaseSuccess={_handleOnPurchaseSuccess}
handleOnPurchaseFailure={_handleOnPurchaseFailure}
>
{({ buyItem, productList, isLoading }) => (
<SafeAreaView style={styles.container}>
{isLoading ? <BoostPlaceHolder /> : _renderRegisterOptions({ productList, buyItem })}
</SafeAreaView>
)}
</InAppPurchaseContainer>
<View style={styles.contentContainer}>
<View style={styles.headerContainer}>
<View>
{_renderUserInfo(username, styles.usernameStyle)}
{_renderUserInfo(email, styles.emailStyle)}
</View>
<Image style={styles.logoEstm} source={LOGO_ESTM} />
</View>
<InAppPurchaseContainer
skus={ITEM_SKUS}
username={username}
email={email}
isNoSpin
handleOnPurchaseSuccess={_handleOnPurchaseSuccess}
handleOnPurchaseFailure={_handleOnPurchaseFailure}
>
{({ buyItem, productList, isLoading }) => (
<SafeAreaView style={styles.container}>
{isLoading ? (
<PostCardPlaceHolder />
) : (
_renderRegisterOptions({ productList, buyItem })
)}
</SafeAreaView>
)}
</InAppPurchaseContainer>
</View>
);
};

View File

@ -127,6 +127,11 @@ const RegisterScreen = ({ navigation, route }) => {
});
};
const _onContinuePress = () => {
Keyboard.dismiss();
registerAccountModalRef.current?.showModal();
};
return (
<SafeAreaView style={styles.container}>
<StatusBar hidden translucent />
@ -227,11 +232,11 @@ const RegisterScreen = ({ navigation, route }) => {
})}
/>
<MainButton
onPress={() => registerAccountModalRef.current?.showModal()}
onPress={_onContinuePress}
iconName="arrow-forward"
iconColor="white"
iconPosition="right"
text="Continue"
text={intl.formatMessage({ id: 'alert.continue' })}
isDisable={!isUsernameValid || !isRefUsernameValid || !isEmailValid}
style={styles.mainButton}
/>

View File

@ -105,7 +105,13 @@ export default EStyleSheet.create({
registeringText:{
fontWeight:'600',
fontSize: 18,
marginTop:32
marginTop:16,
color: '$primaryBlack',
textAlign:'center',
},
actionButton:{
marginTop:44,
paddingHorizontal:16
}
});

View File

@ -9173,6 +9173,11 @@ react-native-dynamic@^1.0.0:
"@types/react-native" ">=0.62.0"
toolkit.ts "^0.0.2"
react-native-email-link@^1.14.3:
version "1.14.3"
resolved "https://registry.yarnpkg.com/react-native-email-link/-/react-native-email-link-1.14.3.tgz#188d501ab9cbbee9c6aa5d1190149b071f7c51d2"
integrity sha512-3biiaDKjJft6/13cYQkh/CmVae+pU7j+ThX7lFDu7eR6iRrMf9mTXyjejSboWr/M+xE34Vm0bKy8R1tXKjC2zQ==
react-native-extended-stylesheet@^0.10.0:
version "0.10.0"
resolved "https://registry.yarnpkg.com/react-native-extended-stylesheet/-/react-native-extended-stylesheet-0.10.0.tgz#bc77caf7494dcc67f681128dd8cb5e07dacef9dd"