diff --git a/package-lock.json b/package-lock.json index b61f4679c..0c57d4926 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1507,7 +1507,7 @@ "dependencies": { "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { "ansi-styles": "^2.2.1", @@ -1700,7 +1700,7 @@ }, "babel-plugin-istanbul": { "version": "4.1.6", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", "dev": true, "requires": { @@ -1733,7 +1733,7 @@ }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" }, "babel-plugin-syntax-trailing-function-commas": { @@ -2286,7 +2286,7 @@ }, "browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "requires": { "buffer-xor": "^1.0.3", @@ -2530,7 +2530,7 @@ "dependencies": { "slice-ansi": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "resolved": "http://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true }, @@ -2595,7 +2595,7 @@ }, "color": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz", + "resolved": "http://registry.npmjs.org/color/-/color-1.0.3.tgz", "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=", "requires": { "color-convert": "^1.8.2", @@ -2743,7 +2743,7 @@ }, "core-js": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "resolved": "http://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" }, "core-util-is": { @@ -2774,7 +2774,7 @@ }, "create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "requires": { "cipher-base": "^1.0.1", @@ -2786,7 +2786,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "requires": { "cipher-base": "^1.0.3", @@ -3188,7 +3188,7 @@ "dependencies": { "domelementtype": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" } } @@ -3200,7 +3200,7 @@ }, "domelementtype": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" }, "domexception": { @@ -3851,7 +3851,7 @@ }, "events": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, "evp_bytestokey": { @@ -3953,7 +3953,7 @@ }, "external-editor": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "requires": { "chardet": "^0.4.0", @@ -3986,7 +3986,7 @@ }, "fast-deep-equal": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, "fast-json-stable-stringify": { @@ -4829,7 +4829,7 @@ }, "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, "get-value": { @@ -5345,7 +5345,7 @@ }, "is-builtin-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "requires": { "builtin-modules": "^1.0.0" @@ -5490,7 +5490,7 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, @@ -6138,7 +6138,7 @@ }, "jest-get-type": { "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "resolved": "http://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", "dev": true }, @@ -6978,12 +6978,12 @@ }, "json5": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" }, "jsonfile": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "requires": { "graceful-fs": "^4.1.6" @@ -7533,7 +7533,7 @@ "dependencies": { "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -7579,7 +7579,7 @@ "dependencies": { "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -7629,7 +7629,7 @@ }, "load-json-file": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "requires": { "graceful-fs": "^4.1.2", @@ -8400,7 +8400,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "minipass": { @@ -8448,7 +8448,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "requires": { "minimist": "0.0.8" @@ -8456,7 +8456,7 @@ "dependencies": { "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } @@ -8574,7 +8574,7 @@ }, "react-native-keyboard-aware-scroll-view": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.5.0.tgz", + "resolved": "http://registry.npmjs.org/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.5.0.tgz", "integrity": "sha512-nGXsACZBCiWuwRrZy+UjiSJqb4tZ/6ePHUSY8M+09g4VfNm/ogvvWpwBa6B999NZ6DwhZTKBjVWeZxX9XG8bbQ==", "requires": { "prop-types": "^15.6.0", @@ -8978,7 +8978,7 @@ "dependencies": { "minimist": { "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" }, "wordwrap": { @@ -9169,7 +9169,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, "pinkie": { @@ -9393,7 +9393,7 @@ }, "espree": { "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "resolved": "http://registry.npmjs.org/espree/-/espree-3.5.4.tgz", "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { @@ -9431,7 +9431,7 @@ }, "regexpp": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", "dev": true }, @@ -9978,7 +9978,7 @@ }, "react-native-vector-icons": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-4.6.0.tgz", + "resolved": "http://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-4.6.0.tgz", "integrity": "sha512-rpfhfPiXCK2PX1nrNhdxSMrEGB/Gw/SvKoPM0G2wAkSoqynnes19K0VYI+Up7DqR1rFIpE4hP2erpT1tNx2tfg==", "requires": { "lodash": "^4.0.0", @@ -10152,7 +10152,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", @@ -10603,7 +10603,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { "ret": "~0.1.10" @@ -11043,7 +11043,7 @@ }, "sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { "inherits": "^2.0.1", @@ -11558,7 +11558,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" @@ -11579,7 +11579,7 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "strip-json-comments": { @@ -11758,7 +11758,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -11873,7 +11873,7 @@ }, "through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { @@ -12157,7 +12157,7 @@ }, "underscore.string": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", + "resolved": "http://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=" }, "unicode-canonical-property-names-ecmascript": { @@ -12399,7 +12399,7 @@ }, "espree": { "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "resolved": "http://registry.npmjs.org/espree/-/espree-3.5.4.tgz", "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { @@ -12506,7 +12506,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { "string-width": "^1.0.1", diff --git a/src/components/header/view/headerView.js b/src/components/header/view/headerView.js index aecd3ab0b..0a24b9b0f 100644 --- a/src/components/header/view/headerView.js +++ b/src/components/header/view/headerView.js @@ -64,8 +64,8 @@ class HeaderView extends Component { {name && {name}} - {userName - && reputation && ( + {userName !== undefined + && reputation !== undefined && ( @ {userName} diff --git a/src/components/index.js b/src/components/index.js index b4ceb771e..602c0a18c 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -8,6 +8,7 @@ import { CircularButton, TextButton, IconButton } from './buttons'; import { NumericKeyboard } from './numericKeyboard'; import { PinAnimatedInput } from './pinAnimatedInput'; import { SideMenu } from './sideMenu'; +import Modal from './modal'; export { Logo, @@ -22,4 +23,5 @@ export { NumericKeyboard, PinAnimatedInput, SideMenu, + Modal, }; diff --git a/src/components/modal/index.js b/src/components/modal/index.js new file mode 100644 index 000000000..95fc147c1 --- /dev/null +++ b/src/components/modal/index.js @@ -0,0 +1,3 @@ +import ModalView from './view/modalView'; + +export default ModalView; diff --git a/src/components/modal/view/modalStyles.js b/src/components/modal/view/modalStyles.js new file mode 100644 index 000000000..395b07bbc --- /dev/null +++ b/src/components/modal/view/modalStyles.js @@ -0,0 +1,18 @@ +import EStyleSheet from 'react-native-extended-stylesheet'; + +export default EStyleSheet.create({ + centerModal: { + height: 175, + width: 275, + borderRadius: 20, + }, + fullModal: { + height: '$deviceHeight', + width: '$deviceWidth', + flex: 1, + }, + borderTopRadius: { + borderTopLeftRadius: 10, + borderTopRightRadius: 10, + }, +}); diff --git a/src/components/modal/view/modalView.js b/src/components/modal/view/modalView.js new file mode 100644 index 000000000..f719df3ad --- /dev/null +++ b/src/components/modal/view/modalView.js @@ -0,0 +1,53 @@ +import React, { Component } from 'react'; +import { Modal as ModalBox } from 'react-native'; + +import styles from './modalStyles'; + +/* +* Props Name Description Value +*@props --> fullModal For modal size all screen or quick modal Boolean +*@props --> isOpen For modal is open or not Boolean +* +*/ + +export default class Modal extends Component { + constructor(props) { + super(props); + this.state = {}; + } + + _handleOnOpen = () => { + const { handleOnModalOpen } = this.props; + if (handleOnModalOpen) { + handleOnModalOpen(); + } + }; + + _handleOnClose = () => { + const { handleOnModalClose } = this.props; + if (handleOnModalClose) { + handleOnModalClose(); + } + }; + + render() { + const { + isFullScreen, isOpen, children, isRadius, + } = this.props; + return ( + this._handleOnClose(this)} + onShow={() => this._handleOnOpen(this)} + {...this.props} + > + {children} + + ); + } +} diff --git a/src/components/posts/view/postsView.js b/src/components/posts/view/postsView.js index b9bd61961..0ad0f2b9f 100644 --- a/src/components/posts/view/postsView.js +++ b/src/components/posts/view/postsView.js @@ -1,6 +1,6 @@ import React, { Component, Fragment } from 'react'; import { - FlatList, View, ActivityIndicator, AppState, + FlatList, View, ActivityIndicator, } from 'react-native'; // import Placeholder from 'rn-placeholder'; @@ -28,13 +28,11 @@ class PostsView extends Component { startPermlink: '', refreshing: false, isLoading: false, - appState: AppState.currentState, }; } componentDidMount() { this._loadPosts(this.state.user); - AppState.addEventListener('change', this._handleAppStateChange); } componentWillReceiveProps(nextProps) { @@ -47,16 +45,6 @@ class PostsView extends Component { } } - componentWillUnmount() { - AppState.removeEventListener('change', this._handleAppStateChange); - } - - _handleAppStateChange = (nextAppState) => { - if (this.state.appState.match(/inactive|background/) && nextAppState === 'active') { - alert('App has come to the foreground!'); - } - this.setState({ appState: nextAppState }); - }; _loadPosts = (user, _tag = null) => { const { getFor, tag } = this.props; diff --git a/src/config/routes.js b/src/config/routes.js index 35531e4e9..88af7edf9 100644 --- a/src/config/routes.js +++ b/src/config/routes.js @@ -4,7 +4,7 @@ import { default as ROUTES } from '../constants/routeNames'; // Screens import { - Splash, Login, PinCode, SteemConnect, Editor, Profile, + Splash, Login, PinCode, SteemConnect, Editor, Profile, RootComponent, } from '../screens'; // Components @@ -51,9 +51,11 @@ const stackNavigatior = createStackNavigator( ); export default SwitchNavigator({ - stackNavigatior, - [ROUTES.SCREENS.LOGIN]: { screen: Login }, - [ROUTES.SCREENS.PINCODE]: { screen: PinCode }, - [ROUTES.SCREENS.SPLASH]: { screen: Splash }, - [ROUTES.SCREENS.STEEM_CONNECT]: { screen: SteemConnect }, + [ROUTES.DRAWER.MAIN]: mainNavigation, + [ROUTES.SCREENS.LOGIN]: { screen: RootComponent()(Login) }, + [ROUTES.SCREENS.EDITOR]: { screen: RootComponent()(Editor) }, + [ROUTES.SCREENS.PINCODE]: { screen: RootComponent()(PinCode) }, + [ROUTES.SCREENS.PROFILE]: { screen: RootComponent()(Profile) }, + [ROUTES.SCREENS.SPLASH]: { screen: RootComponent()(Splash) }, + [ROUTES.SCREENS.STEEM_CONNECT]: { screen: RootComponent()(SteemConnect) }, }); diff --git a/src/navigation/baseNavigator.js b/src/navigation/baseNavigator.js index 44d418a40..01436a925 100644 --- a/src/navigation/baseNavigator.js +++ b/src/navigation/baseNavigator.js @@ -1,20 +1,22 @@ import React from 'react'; import { createBottomTabNavigator } from 'react-navigation'; import Icon from 'react-native-vector-icons/FontAwesome'; -import { Home, Notification, Profile } from '../screens'; +import { + Home, Notification, Profile, RootComponent, +} from '../screens'; import { PostButton } from '../components/postButton'; const BaseNavigator = createBottomTabNavigator( { Home: { - screen: Home, + screen: RootComponent()(Home), navigationOptions: () => ({ tabBarIcon: ({ tintColor }) => , }), }, Notification: { - screen: Notification, + screen: RootComponent()(Notification), navigationOptions: () => ({ tabBarIcon: ({ tintColor }) => , }), @@ -26,13 +28,13 @@ const BaseNavigator = createBottomTabNavigator( }), }, AuthorProfile: { - screen: Profile, + screen: RootComponent()(Profile), navigationOptions: () => ({ tabBarIcon: ({ tintColor }) => , }), }, Profile: { - screen: Profile, + screen: RootComponent()(Profile), navigationOptions: () => ({ tabBarIcon: ({ tintColor }) => , }), diff --git a/src/providers/steem/auth.js b/src/providers/steem/auth.js index 9a5bdfb25..7b1a328f6 100644 --- a/src/providers/steem/auth.js +++ b/src/providers/steem/auth.js @@ -199,9 +199,16 @@ export const verifyPinCode = async (data) => { const authData = { isLoggedIn: true, }; + const response = { + accessToken: decryptKey(userData.accessToken, data.pinCode), + postingKey: decryptKey(userData.postingKey, data.pinCode), + masterKey: decryptKey(userData.masterKey, data.pinCode), + activeKey: decryptKey(userData.activeKey, data.pinCode), + memoKey: decryptKey(userData.memoKey, data.pinCode), + }; setAuthStatus(authData) .then(() => { - resolve(); + resolve(response); }) .catch((error) => { // TODO: create function for throw error diff --git a/src/redux/actions/applicationActions.js b/src/redux/actions/applicationActions.js index a8da6d91a..134080c6c 100644 --- a/src/redux/actions/applicationActions.js +++ b/src/redux/actions/applicationActions.js @@ -1,4 +1,6 @@ -import { LOGIN, LOGOUT } from '../constants/constants'; +import { + LOGIN, LOGOUT, OPEN_PIN_CODE_MODAL, CLOSE_PIN_CODE_MODAL, +} from '../constants/constants'; export const login = () => ({ type: LOGIN, @@ -7,3 +9,11 @@ export const login = () => ({ export const logout = () => ({ type: LOGOUT, }); + +export const openPinCodeModal = () => ({ + type: OPEN_PIN_CODE_MODAL, +}); + +export const closePinCodeModal = () => ({ + type: CLOSE_PIN_CODE_MODAL, +}); diff --git a/src/redux/constants/constants.js b/src/redux/constants/constants.js index 2537c6956..b7b31444a 100644 --- a/src/redux/constants/constants.js +++ b/src/redux/constants/constants.js @@ -15,3 +15,5 @@ export const FETCHING_ACCOUNT = 'FETCHING_ACCOUNT'; export const FETCH_ACCOUNT_FAIL = 'FETCH_ACCOUNT_FAIL'; export const IS_LOGGED_IN = 'IS_LOGGED_IN'; +export const OPEN_PIN_CODE_MODAL = 'OPEN_PIN_CODE_MODAL'; +export const CLOSE_PIN_CODE_MODAL = 'CLOSE_PIN_CODE_MODAL'; diff --git a/src/redux/reducers/applicationReducer.js b/src/redux/reducers/applicationReducer.js index c825f5b12..d204fe1a6 100644 --- a/src/redux/reducers/applicationReducer.js +++ b/src/redux/reducers/applicationReducer.js @@ -1,8 +1,11 @@ -import { LOGIN, LOGOUT } from '../constants/constants'; +import { + LOGIN, LOGOUT, OPEN_PIN_CODE_MODAL, CLOSE_PIN_CODE_MODAL, +} from '../constants/constants'; const initialState = { isLoggedIn: false, // Has any logged in user. loading: false, // It is lock to all screen and shows loading animation. + isPinCodeReqiure: false, }; export default function (state = initialState, action) { @@ -17,7 +20,16 @@ export default function (state = initialState, action) { ...state, isLoggedIn: false, }; - + case OPEN_PIN_CODE_MODAL: + return { + ...state, + isPinCodeReqiure: true, + }; + case CLOSE_PIN_CODE_MODAL: + return { + ...state, + isPinCodeReqiure: false, + }; default: return state; } diff --git a/src/screens/index.js b/src/screens/index.js index 8a3e79c40..cea402855 100755 --- a/src/screens/index.js +++ b/src/screens/index.js @@ -6,6 +6,7 @@ import { Login } from './login'; import { Notification } from './notification'; import SteemConnect from './steem-connect/steemConnect'; import { Profile } from './profile'; +import RootComponent from './root'; // import Author from './authorProfile'; // import SideMenu from './sideMenuScreen'; @@ -28,6 +29,7 @@ export { Profile, SteemConnect, Splash, + RootComponent, // Author, // SideMenu, // Hot, diff --git a/src/screens/login/screen/loginScreen.js b/src/screens/login/screen/loginScreen.js index cffc1959d..f6654806b 100644 --- a/src/screens/login/screen/loginScreen.js +++ b/src/screens/login/screen/loginScreen.js @@ -4,11 +4,12 @@ import { } from 'react-native'; import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view'; import ScrollableTabView from '@esteemapp/react-native-scrollable-tab-view'; +import { connect } from 'react-redux'; // Actions import { addPassiveAccount, failedAccount } from '../../../redux/actions/accountAction'; import { - login as loginAction, + login as loginAction, openPinCodeModal, } from '../../../redux/actions/applicationActions'; // Internal Components @@ -42,7 +43,7 @@ class LoginScreen extends Component { } _handleOnPressLogin = () => { - const { dispatch, navigation } = this.props; + const { dispatch, setPinCodeState } = this.props; const { password, username } = this.state; this.setState({ isLoading: true }); @@ -52,7 +53,8 @@ class LoginScreen extends Component { if (result) { dispatch(addPassiveAccount(result)); dispatch(loginAction()); - navigation.navigate(ROUTES.SCREENS.PINCODE); + dispatch(openPinCodeModal()); + setPinCodeState({ navigateTo: ROUTES.DRAWER.MAIN }); } }) .catch((err) => { @@ -180,4 +182,4 @@ class LoginScreen extends Component { } } -export default LoginScreen; +export default connect()(LoginScreen); diff --git a/src/screens/pinCode/container/pinCodeContainer.js b/src/screens/pinCode/container/pinCodeContainer.js index f754bee3d..fd3d2a441 100644 --- a/src/screens/pinCode/container/pinCodeContainer.js +++ b/src/screens/pinCode/container/pinCodeContainer.js @@ -4,9 +4,11 @@ import { connect } from 'react-redux'; import { setUserDataWithPinCode, verifyPinCode } from '../../../providers/steem/auth'; +// Actions +import { closePinCodeModal } from '../../../redux/actions/applicationActions'; + // Constants import { default as INITIAL } from '../../../constants/initial'; -import { default as ROUTES } from '../../../constants/routeNames'; import { PinCodeScreen } from '..'; @@ -49,7 +51,11 @@ class PinCodeContainer extends Component { _setPinCode = pin => new Promise((resolve, reject) => { const { - currentAccount: { password, name }, + currentAccount, + dispatch, + accessToken, + setWrappedComponentState, + navigateTo, navigation, } = this.props; const { isExistUser, pinCode } = this.state; @@ -57,14 +63,17 @@ class PinCodeContainer extends Component { // If the user is exist, we are just checking to pin and navigating to home screen const pinData = { pinCode: pin, - password, - username: name, - accessToken: navigation.getParam('accessToken', ''), + password: currentAccount ? currentAccount.password : '', + username: currentAccount ? currentAccount.name : '', + accessToken, }; verifyPinCode(pinData) - .then(() => { - // TODO: make global route - navigation.navigate(ROUTES.DRAWER.MAIN); + .then((res) => { + setWrappedComponentState(res); + dispatch(closePinCodeModal()); + if (navigateTo) { + navigation.navigate(navigateTo); + } }) .catch((err) => { alert(err); @@ -80,12 +89,15 @@ class PinCodeContainer extends Component { } else if (pinCode === pin) { const pinData = { pinCode: pin, - password, - username: name, + password: currentAccount.password, + username: currentAccount.name, }; setUserDataWithPinCode(pinData).then(() => { AsyncStorage.setItem(INITIAL.IS_EXIST_USER, JSON.stringify(true), () => { - navigation.navigate(ROUTES.DRAWER.MAIN); + dispatch(closePinCodeModal()); + if (navigateTo) { + navigation.navigate(navigateTo); + } resolve(); }); }); diff --git a/src/screens/root/container/rootContainer.js b/src/screens/root/container/rootContainer.js new file mode 100644 index 000000000..084ac56cf --- /dev/null +++ b/src/screens/root/container/rootContainer.js @@ -0,0 +1,82 @@ +import React, { Component, Fragment } from 'react'; +import { AppState } from 'react-native'; +import { connect } from 'react-redux'; + +// Actions +import { openPinCodeModal } from '../../../redux/actions/applicationActions'; + +// Components +import { Modal } from '../../../components'; +import { PinCode } from '../..'; + +const RootContainer = () => (WrappedComponent) => { + class RootComponent extends Component { + constructor(props) { + super(props); + this.state = { + pinCodeStates: null, + wrappedComponentStates: null, + appState: AppState.currentState, + }; + } + + componentDidMount() { + AppState.addEventListener('change', this._handleAppStateChange); + } + + componentWillUnmount() { + AppState.removeEventListener('change', this._handleAppStateChange); + } + + _handleAppStateChange = (nextAppState) => { + const { appState } = this.state; + const { dispatch } = this.props; + + if (appState.match(/inactive|background/) && nextAppState === 'active') { + dispatch(openPinCodeModal()); + } + this.setState({ appState: nextAppState }); + }; + + _setPinCodeState = (data) => { + this.setState({ pinCodeStates: { ...data } }); + }; + + _setWrappedComponentState = (data) => { + this.setState({ wrappedComponentStates: { ...data } }); + }; + + render() { + const { isPinCodeReqiure, navigation } = this.props; + const { pinCodeStates, wrappedComponentStates } = this.state; + return ( + + + + + + + ); + } + } + const mapStateToProps = state => ({ + isPinCodeReqiure: state.application.isPinCodeReqiure, + }); + + return connect(mapStateToProps)(RootComponent); +}; + +export default RootContainer; diff --git a/src/screens/root/index.js b/src/screens/root/index.js new file mode 100644 index 000000000..fe5b0dc31 --- /dev/null +++ b/src/screens/root/index.js @@ -0,0 +1,3 @@ +import RootContainer from './container/rootContainer'; + +export default RootContainer; diff --git a/src/screens/steem-connect/steemConnect.js b/src/screens/steem-connect/steemConnect.js index 8ea910744..46508ca90 100644 --- a/src/screens/steem-connect/steemConnect.js +++ b/src/screens/steem-connect/steemConnect.js @@ -7,7 +7,7 @@ import { steemConnectOptions } from './config'; // Actions import { addPassiveAccount } from '../../redux/actions/accountAction'; -import { login as loginAction } from '../../redux/actions/applicationActions'; +import { login as loginAction, openPinCodeModal } from '../../redux/actions/applicationActions'; // Constants import { default as ROUTES } from '../../constants/routeNames'; @@ -22,7 +22,7 @@ class SteemConnect extends Component { onNavigationStateChange(event) { let accessToken; - const { navigation, dispatch } = this.props; + const { dispatch, setPinCodeState } = this.props; const { isLoading } = this.state; if (event.url.indexOf('?access_token=') > -1) { @@ -39,7 +39,8 @@ class SteemConnect extends Component { if (result) { dispatch(addPassiveAccount(result)); dispatch(loginAction()); - navigation.navigate(ROUTES.SCREENS.PINCODE, { accessToken }); + dispatch(openPinCodeModal()); + setPinCodeState({ accessToken, navigateTo: ROUTES.DRAWER.MAIN }); } else { // TODO: Error alert (Toast Message) }