Commit 52b4ef3a authored by Muhammad Ameen's avatar Muhammad Ameen 💻

login screen complete and solve right to left issue on language change

parent 325e1a59
......@@ -267,6 +267,10 @@ dependencies {
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
implementation project(':react-native-restart')
implementation project(':lottie-react-native')
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
exclude group:'com.facebook.fbjni'
}
......
......@@ -4,6 +4,9 @@ import android.app.Application;
import android.content.Context;
import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
import com.oblador.vectoricons.VectorIconsPackage;
import com.airbnb.android.react.lottie.LottiePackage;
import com.reactnativerestart.RestartPackage;
import org.devio.rn.splashscreen.SplashScreenReactPackage;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
......
rootProject.name = 'baitussalam_app'
include ':react-native-vector-icons'
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android')
include ':lottie-react-native'
project(':lottie-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/lottie-react-native/src/android')
include ':react-native-restart'
project(':react-native-restart').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-restart/android')
include ':react-native-splash-screen'
project(':react-native-splash-screen').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-splash-screen/android')
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
......
......@@ -21,6 +21,12 @@ target 'baitussalam_app' do
pod 'react-native-splash-screen', :path => '../node_modules/react-native-splash-screen'
pod 'react-native-restart', :path => '../node_modules/react-native-restart'
pod 'lottie-react-native', :path => '../node_modules/lottie-react-native'
pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons'
target 'baitussalam_appTests' do
inherit! :complete
# Pods for testing
......
......@@ -36,7 +36,7 @@
</dict>
</dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
<string/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIRequiredDeviceCapabilities</key>
......@@ -51,5 +51,24 @@
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIAppFonts</key>
<array>
<string>AntDesign.ttf</string>
<string>Entypo.ttf</string>
<string>EvilIcons.ttf</string>
<string>Feather.ttf</string>
<string>FontAwesome.ttf</string>
<string>FontAwesome5_Brands.ttf</string>
<string>FontAwesome5_Regular.ttf</string>
<string>FontAwesome5_Solid.ttf</string>
<string>Fontisto.ttf</string>
<string>Foundation.ttf</string>
<string>Ionicons.ttf</string>
<string>MaterialCommunityIcons.ttf</string>
<string>MaterialIcons.ttf</string>
<string>Octicons.ttf</string>
<string>SimpleLineIcons.ttf</string>
<string>Zocial.ttf</string>
</array>
</dict>
</plist>
This diff is collapsed.
......@@ -10,19 +10,23 @@
"lint": "eslint ."
},
"dependencies": {
"@react-native-async-storage/async-storage": "^1.17.5",
"@react-navigation/native": "^6.0.10",
"@react-navigation/native-stack": "^6.6.2",
"@reduxjs/toolkit": "^1.8.1",
"i18next": "^21.8.4",
"lottie-react-native": "^5.1.3",
"native-base": "^3.4.5",
"react": "17.0.2",
"react-i18next": "^11.16.9",
"react-native": "0.68.2",
"react-native-keyboard-aware-scroll-view": "^0.9.5",
"react-native-restart": "^0.0.24",
"react-native-safe-area-context": "^4.2.5",
"react-native-screens": "^3.13.1",
"react-native-splash-screen": "^3.3.0",
"react-native-svg": "^12.3.0",
"react-native-vector-icons": "^9.1.0",
"react-redux": "^8.0.2"
},
"devDependencies": {
......
This diff is collapsed.
......@@ -6,6 +6,7 @@ import {
TextInput,
I18nManager,
Button,
TouchableOpacity,
} from 'react-native';
import React, {useEffect} from 'react';
import styles from './style';
......@@ -14,68 +15,116 @@ import {KeyboardAwareScrollView} from 'react-native-keyboard-aware-scroll-view';
import {t} from 'i18next';
import SplashScreenComp from '../../Components/SplashScreen/SplashScreen';
import {useTranslation} from 'react-i18next';
import RNRestart from 'react-native-restart';
import AsyncStorage from '@react-native-async-storage/async-storage';
import {default as AntDesignIcon} from 'react-native-vector-icons/AntDesign';
import LottieView from 'lottie-react-native';
const Login = () => {
const [text, setText] = useState();
const [animation, setAnimation] = useState(true);
const {t, i18n} = useTranslation();
useEffect(() => {
i18n.changeLanguage('en');
setTimeout(() => {
setAnimation(false);
console.log('false');
}, 3000);
const getData = async () => {
try {
const value = await AsyncStorage.getItem('language');
console.log(value, 'This is get value');
if (value !== null) {
if (value === 'en') {
I18nManager.forceRTL(false);
i18n.changeLanguage('en');
} else if (value === 'ur') {
I18nManager.forceRTL(true);
i18n.changeLanguage('ur');
}
} else {
try {
await AsyncStorage.setItem('language', 'ur');
} catch (e) {
console.log(e);
}
}
} catch (e) {
console.log(e);
}
};
getData();
}, []);
const changeLanguage = lang => {
if (lang === 'en') {
i18n.changeLanguage('en');
const english = async () => {
try {
await AsyncStorage.setItem('language', 'en');
I18nManager.forceRTL(false);
RNRe
} else if (lang === 'ur') {
i18n.changeLanguage('ur');
RNRestart.Restart();
} catch (e) {
console.log(e);
}
};
const urdu = async () => {
try {
await AsyncStorage.setItem('language', 'ur');
I18nManager.forceRTL(true);
RNRestart.Restart();
} catch (e) {
console.log(e);
}
};
return (
<KeyboardAwareScrollView>
{/* <SplashScreenComp /> */}
// <KeyboardAwareScrollView>
<Button
onPress={() => changeLanguage('en')}
title="English"
color="#841584"
/>
<Button
style={{marginTop: 210}}
onPress={() => changeLanguage('ur')}
title="URDU"
color="#000"
/>
// {/* <Button onPress={() => english()} title="English" color="#841584" />
// <Button
// style={{marginTop: 210}}
// onPress={() => urdu()}
// title="URDU"
// color="#000"
// /> */}
<View style={styles.container}>
<View style={styles.imgContainer}>
<Image
style={{width: 150, height: 230}}
source={require('../../Assets/images/baitussalam-logo.png')}
/>
<LottieView
source={require('../../Assets/book-animation.json')}
autoPlay={animation}
loop={false}
width={180}
height={300}
stop={true}
speed={1.5}
/>
</View>
<View style={styles.inputContainer}>
<View style={styles.passwordInput}>
<Text style={{width: '20%'}}>{t('username')}</Text>
<TextInput
style={styles.input}
onChangeText={() => setText()}
value={text}
placeholder={t('username')}
/>
</View>
<View style={styles.passwordInput}>
<Text style={{width: '20%'}}>{t('password')}:</Text>
<TextInput
style={styles.input}
style={[styles.input, I18nManager.isRTL ? 'right' : 'left']}
onChangeText={() => setText()}
value={text}
maxLength={120}
placeholder={t('password')}
// secureTextEntry={true}
/>
</View>
</View>
<TouchableOpacity style={styles.buttonContainer}>
<AntDesignIcon name="right" style={styles.buttonIcon} />
</TouchableOpacity>
</View>
</KeyboardAwareScrollView>
// </KeyboardAwareScrollView>
);
};
......
......@@ -3,31 +3,57 @@ import {StyleSheet} from 'react-native';
const styles = StyleSheet.create({
container: {
flex: 1,
paddingLeft: 20,
paddingRight: 20,
paddingLeft: 30,
paddingRight: 30,
justifyContent: 'center',
// alignItems: 'center',
},
imgContainer: {
flex: 0.5,
width: '100%',
alignItems: 'center',
},
inputContainer: {
flex: 1,
height: 200,
alignItems: 'center',
justifyContent: 'center',
},
input: {
height: 40,
width: '80%',
width: '100%',
borderBottomWidth: 1,
// textAlign: "left",
marginTop: 30,
fontSize: 18,
},
passwordInput: {
// flexDirection: 'row-reverse',
flexDirection: "row",
flexDirection: 'row',
alignItems: 'center',
width: '100%',
},
buttonContainer: {
width: 50,
height: 50,
backgroundColor: '#ec5c26',
justifyContent: 'center',
alignItems: 'center',
borderRadius: 30,
margin: 20,
marginRight: 0,
marginLeft: 0,
shadowColor: '#000',
shadowOffset: {
width: 0,
height: 11,
},
shadowOpacity: 0.57,
shadowRadius: 15.19,
elevation: 11,
},
buttonIcon: {
fontSize: 26,
color: 'white',
},
});
export default styles;
......@@ -1496,6 +1496,13 @@
"@react-aria/ssr" "^3.0.1"
"@react-aria/utils" "^3.3.0"
"@react-native-async-storage/async-storage@^1.17.5":
"integrity" "sha512-0XT5zZa3mh8XfAFYytq9hPyI6w0FJEBED4pjeLc17pkNF9tND86fsTX2pQFr15uV0nvfYeHisbd/mM7bpGrWKA=="
"resolved" "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.17.5.tgz"
"version" "1.17.5"
dependencies:
"merge-options" "^3.0.4"
"@react-native-community/cli-debugger-ui@^7.0.3":
"integrity" "sha512-G4SA6jFI0j22o+j+kYP8/7sxzbCDqSp2QiHA/X5E0lsGEd2o9qN2zbIjiFr8b8k+VVAYSUONhoC0+uKuINvmkA=="
"resolved" "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-7.0.3.tgz"
......@@ -3031,6 +3038,15 @@
"strip-ansi" "^6.0.0"
"wrap-ansi" "^6.2.0"
"cliui@^7.0.2":
"integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ=="
"resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz"
"version" "7.0.4"
dependencies:
"string-width" "^4.2.0"
"strip-ansi" "^6.0.0"
"wrap-ansi" "^7.0.0"
"clone-deep@^4.0.1":
"integrity" "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ=="
"resolved" "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz"
......@@ -3322,6 +3338,11 @@
"resolved" "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz"
"version" "0.2.0"
"dedent@^0.6.0":
"integrity" "sha1-Dm2o8M5Sg471zsXI+TlrDBtko8s="
"resolved" "https://registry.npmjs.org/dedent/-/dedent-0.6.0.tgz"
"version" "0.6.0"
"deep-is@^0.1.3", "deep-is@~0.1.3":
"integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
"resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
......@@ -4128,7 +4149,7 @@
"resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz"
"version" "1.0.0-beta.2"
"get-caller-file@^2.0.1":
"get-caller-file@^2.0.1", "get-caller-file@^2.0.5":
"integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
"resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"
"version" "2.0.5"
......@@ -4487,7 +4508,7 @@
"@formatjs/icu-messageformat-parser" "2.1.0"
"tslib" "^2.1.0"
"invariant@*", "invariant@^2.2.4":
"invariant@*", "invariant@^2.2.2", "invariant@^2.2.4":
"integrity" "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA=="
"resolved" "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz"
"version" "2.2.4"
......@@ -4674,6 +4695,11 @@
"resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
"version" "7.0.0"
"is-plain-obj@^2.1.0":
"integrity" "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="
"resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz"
"version" "2.1.0"
"is-plain-object@^2.0.3", "is-plain-object@^2.0.4":
"integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og=="
"resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz"
......@@ -5616,6 +5642,19 @@
dependencies:
"js-tokens" "^3.0.0 || ^4.0.0"
"lottie-ios@^3.2.3":
"integrity" "sha512-mubYMN6+1HXa8z3EJKBvNBkl4UoVM4McjESeB2PgvRMSngmJtC5yUMRdhbbrIAn5Liu3hFGao/14s5hQIgtkRQ=="
"resolved" "https://registry.npmjs.org/lottie-ios/-/lottie-ios-3.2.3.tgz"
"version" "3.2.3"
"lottie-react-native@^5.1.3":
"integrity" "sha512-Ho+oM+D3if85I2EBn8c17tcg7pc880Sp/DOeNW5aWiNtlCJKX/kmlhoM19NLqjzkHEm96fTkTcTy82ZwYU3Kbg=="
"resolved" "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-5.1.3.tgz"
"version" "5.1.3"
dependencies:
"invariant" "^2.2.2"
"react-native-safe-modules" "^1.0.3"
"lru-cache@^6.0.0":
"integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="
"resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
......@@ -5662,6 +5701,13 @@
"resolved" "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz"
"version" "2.0.14"
"merge-options@^3.0.4":
"integrity" "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ=="
"resolved" "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz"
"version" "3.0.4"
dependencies:
"is-plain-obj" "^2.1.0"
"merge-stream@^2.0.0":
"integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
"resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz"
......@@ -6627,7 +6673,7 @@
"kleur" "^3.0.3"
"sisteransi" "^1.0.5"
"prop-types@*", "prop-types@^15.6.2", "prop-types@^15.8.1":
"prop-types@*", "prop-types@^15.6.2", "prop-types@^15.7.2", "prop-types@^15.8.1":
"integrity" "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="
"resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz"
"version" "15.8.1"
......@@ -6758,11 +6804,23 @@
"prop-types" "^15.6.2"
"react-native-iphone-x-helper" "^1.0.3"
"react-native-restart@^0.0.24":
"integrity" "sha512-pvJNU3NwQk6bCG2gOWcQpZ4IxhtELB0K9gzmtixfsaTFbW1UXXHkJNjk1kHazcbH5hrD7QbUkR63fsAVh8X4VQ=="
"resolved" "https://registry.npmjs.org/react-native-restart/-/react-native-restart-0.0.24.tgz"
"version" "0.0.24"
"react-native-safe-area-context@*", "react-native-safe-area-context@^4.2.5", "react-native-safe-area-context@>= 3.0.0":
"integrity" "sha512-nUil2de1gk/8ZB9IzIxFyGCiKeAYcHzJb/Tks2NzSkev1qH4MNR05DWYDSmW6vLT+y4mospLVyG/H5dyUd+KQQ=="
"resolved" "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.2.5.tgz"
"version" "4.2.5"
"react-native-safe-modules@^1.0.3":
"integrity" "sha512-DUxti4Z+AgJ/ZsO5U7p3uSCUBko8JT8GvFlCeOXk9bMd+4qjpoDvMYpfbixXKgL88M+HwmU/KI1YFN6gsQZyBA=="
"resolved" "https://registry.npmjs.org/react-native-safe-modules/-/react-native-safe-modules-1.0.3.tgz"
"version" "1.0.3"
dependencies:
"dedent" "^0.6.0"
"react-native-screens@^3.13.1", "react-native-screens@>= 3.0.0":
"integrity" "sha512-xcrnuUs0qUrGpc2gOTDY4VgHHADQwp80mwR1prU/Q0JqbZN5W3koLhuOsT6FkSRKjR5t40l+4LcjhHdpqRB2HA=="
"resolved" "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.13.1.tgz"
......@@ -6784,7 +6842,15 @@
"css-select" "^4.2.1"
"css-tree" "^1.0.0-alpha.39"
"react-native@*", "react-native@>=0.42.0", "react-native@>=0.48.4", "react-native@>=0.50.0", "react-native@>=0.57.0", "react-native@>=0.59", "react-native@0.68.2":
"react-native-vector-icons@^9.1.0":
"integrity" "sha512-2AHZ/h9d/+rC0odz+OwbGNlc1Lik/pHhSixn4HfC8RtQ8CxfSBZ6gg7bTLcZhdSvZN+ZEGi30Fj+ZnOSQy+smg=="
"resolved" "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-9.1.0.tgz"
"version" "9.1.0"
dependencies:
"prop-types" "^15.7.2"
"yargs" "^16.1.1"
"react-native@*", "react-native@^0.0.0-0 || 0.60 - 0.68 || 1000.0.0", "react-native@>=0.42.0", "react-native@>=0.46", "react-native@>=0.48.4", "react-native@>=0.50.0", "react-native@>=0.57.0", "react-native@>=0.59", "react-native@0.68.2":
"integrity" "sha512-qNMz+mdIirCEmlrhapAtAG+SWVx6MAiSfCbFNhfHqiqu1xw1OKXdzIrjaBEPihRC2pcORCoCHduHGQe/Pz9Yuw=="
"resolved" "https://registry.npmjs.org/react-native/-/react-native-0.68.2.tgz"
"version" "0.68.2"
......@@ -8203,6 +8269,15 @@
"string-width" "^4.1.0"
"strip-ansi" "^6.0.0"
"wrap-ansi@^7.0.0":
"integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="
"resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"
"version" "7.0.0"
dependencies:
"ansi-styles" "^4.0.0"
"string-width" "^4.1.0"
"strip-ansi" "^6.0.0"
"wrappy@1":
"integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
"resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
......@@ -8279,6 +8354,11 @@
"resolved" "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz"
"version" "4.0.3"
"y18n@^5.0.5":
"integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
"resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz"
"version" "5.0.8"
"yallist@^4.0.0":
"integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
"resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
......@@ -8292,6 +8372,11 @@
"camelcase" "^5.0.0"
"decamelize" "^1.2.0"
"yargs-parser@^20.2.2":
"integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
"resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz"
"version" "20.2.9"
"yargs@^15.1.0", "yargs@^15.3.1", "yargs@^15.4.1":
"integrity" "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="
"resolved" "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz"
......@@ -8308,3 +8393,16 @@
"which-module" "^2.0.0"
"y18n" "^4.0.0"
"yargs-parser" "^18.1.2"
"yargs@^16.1.1":
"integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw=="
"resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz"
"version" "16.2.0"
dependencies:
"cliui" "^7.0.2"
"escalade" "^3.1.1"
"get-caller-file" "^2.0.5"
"require-directory" "^2.1.1"
"string-width" "^4.2.0"
"y18n" "^5.0.5"
"yargs-parser" "^20.2.2"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment