diff --git a/package-lock.json b/package-lock.json
index 4debc06..ab72765 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -793,6 +793,15 @@
"babel-template": "6.26.0"
}
},
+ "babel-plugin-transform-define": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-define/-/babel-plugin-transform-define-1.3.0.tgz",
+ "integrity": "sha1-lMX5RZyBDHOMx8UMvUSjGCnW8xk=",
+ "requires": {
+ "lodash": "4.17.4",
+ "traverse": "0.6.6"
+ }
+ },
"babel-plugin-transform-es2015-arrow-functions": {
"version": "6.22.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
@@ -1601,6 +1610,11 @@
"integrity": "sha512-uTGIPNx/nSpBdsF6xnseRXLLtfr9VLqkz8ZqHXr3Y7b6SftyRxBGjwMtJj1OhNbmlc1wZzLNAlAcvyIiE8a6ZA==",
"dev": true
},
+ "clamp": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz",
+ "integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ="
+ },
"cli-cursor": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
@@ -2093,9 +2107,9 @@
"integrity": "sha1-Dm2o8M5Sg471zsXI+TlrDBtko8s="
},
"deep-diff": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.4.tgz",
- "integrity": "sha1-qsXDmVIjar5fA3ojSQYLoBsArkg=",
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz",
+ "integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ=",
"dev": true
},
"deep-is": {
@@ -4132,8 +4146,7 @@
"hoist-non-react-statics": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz",
- "integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA=",
- "dev": true
+ "integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA="
},
"home-dir": {
"version": "1.0.0",
@@ -5639,8 +5652,7 @@
"lodash-es": {
"version": "4.17.4",
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.4.tgz",
- "integrity": "sha1-3MHXVS4VCgZABzupyzHXDwMpUOc=",
- "dev": true
+ "integrity": "sha1-3MHXVS4VCgZABzupyzHXDwMpUOc="
},
"lodash._basecopy": {
"version": "3.0.1",
@@ -5705,6 +5717,11 @@
"resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
"integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U="
},
+ "lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
+ },
"lodash.keys": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
@@ -6167,6 +6184,19 @@
"mkdirp": "0.5.1"
}
},
+ "mobx": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/mobx/-/mobx-3.4.1.tgz",
+ "integrity": "sha1-N6vl7ogtQBgo2fJsbBovR2FLu+8="
+ },
+ "mobx-react": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-4.3.5.tgz",
+ "integrity": "sha1-doU/Ly70pvlgw3S82fAeh1kpwEw=",
+ "requires": {
+ "hoist-non-react-statics": "2.3.1"
+ }
+ },
"moment": {
"version": "2.19.2",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.19.2.tgz",
@@ -6458,6 +6488,84 @@
"mimic-fn": "1.1.0"
}
},
+ "opencollective": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/opencollective/-/opencollective-1.0.3.tgz",
+ "integrity": "sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=",
+ "requires": {
+ "babel-polyfill": "6.23.0",
+ "chalk": "1.1.3",
+ "inquirer": "3.0.6",
+ "minimist": "1.2.0",
+ "node-fetch": "1.6.3",
+ "opn": "4.0.2"
+ },
+ "dependencies": {
+ "ansi-escapes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
+ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4="
+ },
+ "babel-polyfill": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz",
+ "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.1",
+ "regenerator-runtime": "0.10.5"
+ }
+ },
+ "core-js": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
+ "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs="
+ },
+ "inquirer": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz",
+ "integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=",
+ "requires": {
+ "ansi-escapes": "1.4.0",
+ "chalk": "1.1.3",
+ "cli-cursor": "2.1.0",
+ "cli-width": "2.2.0",
+ "external-editor": "2.1.0",
+ "figures": "2.0.0",
+ "lodash": "4.17.4",
+ "mute-stream": "0.0.7",
+ "run-async": "2.3.0",
+ "rx": "4.1.0",
+ "string-width": "2.1.1",
+ "strip-ansi": "3.0.1",
+ "through": "2.3.8"
+ }
+ },
+ "node-fetch": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz",
+ "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=",
+ "requires": {
+ "encoding": "0.1.12",
+ "is-stream": "1.1.0"
+ }
+ },
+ "opn": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
+ "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
+ "requires": {
+ "object-assign": "4.1.1",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
+ }
+ }
+ },
"opn": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz",
@@ -7317,6 +7425,27 @@
"resolved": "https://registry.npmjs.org/react-native-branch/-/react-native-branch-2.0.0-beta.3.tgz",
"integrity": "sha1-IWevhrvJ+WS9Rb1fN2hOW1SWXjI="
},
+ "react-native-dismiss-keyboard": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/react-native-dismiss-keyboard/-/react-native-dismiss-keyboard-1.0.0.tgz",
+ "integrity": "sha1-MohiQrPyMX4SHzrrmwpYXiuHm0k="
+ },
+ "react-native-drawer-layout": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/react-native-drawer-layout/-/react-native-drawer-layout-1.3.2.tgz",
+ "integrity": "sha512-fjO0scqbJUfNu2wuEpvywL7DYLXuCXJ2W/zYhWz986rdLytidbys1QGVvkaszHrb4Y7OqO96mTkgpOcP8KWevw==",
+ "requires": {
+ "react-native-dismiss-keyboard": "1.0.0"
+ }
+ },
+ "react-native-drawer-layout-polyfill": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/react-native-drawer-layout-polyfill/-/react-native-drawer-layout-polyfill-1.3.2.tgz",
+ "integrity": "sha512-XzPhfLDJrYHru+e8+dFwhf0FtTeAp7JXPpFYezYV6P1nTeA1Tia/kDpFT+O2DWTrBKBEI8FGhZnThrroZmHIxg==",
+ "requires": {
+ "react-native-drawer-layout": "1.3.2"
+ }
+ },
"react-native-gesture-handler": {
"version": "1.0.0-alpha.28",
"resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.0.0-alpha.28.tgz",
@@ -7330,6 +7459,27 @@
"resolved": "https://registry.npmjs.org/react-native-maps/-/react-native-maps-0.17.0.tgz",
"integrity": "sha512-J/PoJGIaXODpc9MwMeB5irkj3kd9BVxBUO7OOhQIcWlSbWoHIae1iDAAA28L3CYZN/C3ZQSH1M2RaQbVwgx0UQ=="
},
+ "react-native-router-flux": {
+ "version": "4.0.0-beta.24",
+ "resolved": "https://registry.npmjs.org/react-native-router-flux/-/react-native-router-flux-4.0.0-beta.24.tgz",
+ "integrity": "sha512-JOkNawx2o9cavr4eLV160fcDLPCzpDC0uagYUW84TuSki6oUYlj265f4RXahDWbAAFKW6tGWIxmZnhGa2AYBqQ==",
+ "requires": {
+ "lodash.isequal": "4.5.0",
+ "mobx": "3.4.1",
+ "mobx-react": "4.3.5",
+ "opencollective": "1.0.3",
+ "path-to-regexp": "2.1.0",
+ "prop-types": "15.6.0",
+ "react-navigation": "1.0.0-beta.21"
+ },
+ "dependencies": {
+ "path-to-regexp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.1.0.tgz",
+ "integrity": "sha512-dZY7QPCPp5r9cnNuQ955mOv4ZFVDXY/yvqeV7Y1W2PJA3PEFcuow9xKFfJxbBj1pIjOAP+M2B4/7xubmykLrXw=="
+ }
+ }
+ },
"react-native-safe-module": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/react-native-safe-module/-/react-native-safe-module-1.2.0.tgz",
@@ -7421,6 +7571,14 @@
"lodash": "4.17.4"
}
},
+ "react-native-tab-view": {
+ "version": "0.0.70",
+ "resolved": "https://registry.npmjs.org/react-native-tab-view/-/react-native-tab-view-0.0.70.tgz",
+ "integrity": "sha512-VOTZs2UCamYrTyBtcxpn4Ko9RkWrq6rZGOY7AagHF/gcCUQBMSWADoplsBopSc5vXnHHeCSR458BkceEuSEaQA==",
+ "requires": {
+ "prop-types": "15.6.0"
+ }
+ },
"react-native-vector-icons": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-4.4.2.tgz",
@@ -7431,6 +7589,30 @@
"yargs": "8.0.2"
}
},
+ "react-navigation": {
+ "version": "1.0.0-beta.21",
+ "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-1.0.0-beta.21.tgz",
+ "integrity": "sha512-bNAiNBtxrumZQmIj6uH2l1jHIkH8mILoGse5BMHOeFWACADl8LnbE91mzAkJ2EbAzAQ5LNpkSjGSIGxbvfsRCw==",
+ "requires": {
+ "babel-plugin-transform-define": "1.3.0",
+ "clamp": "1.0.1",
+ "hoist-non-react-statics": "2.3.1",
+ "path-to-regexp": "1.7.0",
+ "prop-types": "15.6.0",
+ "react-native-drawer-layout-polyfill": "1.3.2",
+ "react-native-tab-view": "0.0.70"
+ },
+ "dependencies": {
+ "path-to-regexp": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "requires": {
+ "isarray": "0.0.1"
+ }
+ }
+ }
+ },
"react-proxy": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/react-proxy/-/react-proxy-1.1.8.tgz",
@@ -7444,7 +7626,6 @@
"version": "5.0.6",
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.6.tgz",
"integrity": "sha512-8taaaGu+J7PMJQDJrk/xiWEYQmdo3mkXw6wPr3K3LxvXis3Fymiq7c13S+Tpls/AyNUAsoONkU81AP0RA6y6Vw==",
- "dev": true,
"requires": {
"hoist-non-react-statics": "2.3.1",
"invariant": "2.2.2",
@@ -7530,7 +7711,6 @@
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz",
"integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==",
- "dev": true,
"requires": {
"lodash": "4.17.4",
"lodash-es": "4.17.4",
@@ -7539,14 +7719,24 @@
}
},
"redux-logger": {
- "version": "2.10.2",
- "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-2.10.2.tgz",
- "integrity": "sha1-PFpfCm8yV3wd6t9mVfJX+CxsOTc=",
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz",
+ "integrity": "sha1-91VZZvMJjzyIYExEnPC69XeCdL8=",
"dev": true,
"requires": {
- "deep-diff": "0.3.4"
+ "deep-diff": "0.3.8"
}
},
+ "redux-promise-middleware": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/redux-promise-middleware/-/redux-promise-middleware-5.0.0.tgz",
+ "integrity": "sha512-+4YBHLHDH1j014iJVfF0qfsdlbKPRUGuV0rdG26gj6WTFk8O5e1sxiQ6o03R63lT9xVBM7koP0mcqvdVNTtH0g=="
+ },
+ "redux-thunk": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.2.0.tgz",
+ "integrity": "sha1-5hWhbha0ehmlFXZhM9Hj6Zt4UuU="
+ },
"regenerate": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
@@ -7776,6 +7966,11 @@
"is-promise": "2.1.0"
}
},
+ "rx": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
+ "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I="
+ },
"rx-lite": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
@@ -8355,8 +8550,7 @@
"symbol-observable": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz",
- "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=",
- "dev": true
+ "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0="
},
"symbol-tree": {
"version": "3.2.2",
@@ -8651,6 +8845,11 @@
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
"dev": true
},
+ "traverse": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
+ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc="
+ },
"tree-kill": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz",
@@ -9176,6 +9375,12 @@
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
"dev": true
},
+ "deep-diff": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.4.tgz",
+ "integrity": "sha1-qsXDmVIjar5fA3ojSQYLoBsArkg=",
+ "dev": true
+ },
"depd": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
@@ -9240,6 +9445,15 @@
"unpipe": "1.0.0"
}
},
+ "redux-logger": {
+ "version": "2.10.2",
+ "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-2.10.2.tgz",
+ "integrity": "sha1-PFpfCm8yV3wd6t9mVfJX+CxsOTc=",
+ "dev": true,
+ "requires": {
+ "deep-diff": "0.3.4"
+ }
+ },
"xmlbuilder": {
"version": "8.2.2",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
diff --git a/package.json b/package.json
index 5107a3c..4e44afd 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,8 @@
"devDependencies": {
"jest-expo": "^22.0.0",
"react-native-scripts": "1.7.0",
- "react-test-renderer": "16.0.0-beta.5"
+ "react-test-renderer": "16.0.0-beta.5",
+ "redux-logger": "^3.0.6"
},
"main": "./node_modules/react-native-scripts/build/bin/crna-entry.js",
"scripts": {
@@ -22,8 +23,10 @@
"expo": "^22.0.2",
"react": "16.0.0-beta.5",
"react-native": "^0.49.5",
+ "react-native-router-flux": "^4.0.0-beta.24",
"react-redux": "^5.0.6",
"redux": "^3.7.2",
- "redux-promise-middleware": "^5.0.0"
+ "redux-promise-middleware": "^5.0.0",
+ "redux-thunk": "^2.2.0"
}
}
diff --git a/src/containers/App/index.js b/src/containers/App/index.js
index 43cf6cf..f7e26bf 100644
--- a/src/containers/App/index.js
+++ b/src/containers/App/index.js
@@ -1,8 +1,16 @@
import React from 'react'
+import {Scene, Router} from 'react-native-router-flux'
+
import Finder from '../Finder'
+import Profile from '../Profile'
const App = () => (
-
+
+
+
+
+
+
)
export default App
diff --git a/src/containers/Finder/actions.js b/src/containers/Finder/actions.js
new file mode 100644
index 0000000..ecb05a5
--- /dev/null
+++ b/src/containers/Finder/actions.js
@@ -0,0 +1,19 @@
+import {
+ REQUESTED_PROFILE,
+ RECEIVED_PROFILE,
+ FAILED_PROFILE
+} from './constants'
+
+export const requestProfile = () => ({
+ type: REQUESTED_PROFILE,
+})
+
+export const receiveProfile = (profile) => ({
+ type: RECEIVED_PROFILE,
+ data: profile,
+})
+
+export const failProfile = () => ({
+ type: FAILED_PROFILE,
+})
+
diff --git a/src/containers/Finder/actionsCreator.js b/src/containers/Finder/actionsCreator.js
new file mode 100644
index 0000000..ff3d5c3
--- /dev/null
+++ b/src/containers/Finder/actionsCreator.js
@@ -0,0 +1,12 @@
+import { requestProfile, receiveProfile, failProfile } from './actions'
+import getGithubUser from './../../services/profileService'
+
+
+const getProfile = (username) => (dispatch) => {
+ dispatch(requestProfile())
+ getGithubUser(username)
+ .then((profile) => dispatch(receiveProfile(profile)))
+ .catch(() => dispatch(failProfile()))
+}
+
+export default getProfile
diff --git a/src/containers/Finder/constants.js b/src/containers/Finder/constants.js
new file mode 100644
index 0000000..e8a0222
--- /dev/null
+++ b/src/containers/Finder/constants.js
@@ -0,0 +1,4 @@
+export const REQUESTED_PROFILE = 'app/Profile/REQUESTED_PROFILE'
+export const RECEIVED_PROFILE = 'app/Profile/RECEIVED_PROFILE'
+export const FAILED_PROFILE = 'app/Profile/FAILED_PROFILE'
+
diff --git a/src/containers/Finder/index.js b/src/containers/Finder/index.js
index 684906d..f0edd42 100644
--- a/src/containers/Finder/index.js
+++ b/src/containers/Finder/index.js
@@ -1,24 +1,41 @@
import React from 'react'
+import { connect } from 'react-redux'
import {
Text,
View,
TextInput,
TouchableHighlight
} from 'react-native'
+import { Actions } from 'react-native-router-flux'
+import getProfile from './actionsCreator'
import styles from './styles'
+const Finder = ({ getProfile }) => {
+ const showProfile = () => {
+ getProfile('nicsnet')
+ Actions.profile()
+ }
+
+ return (
+
+ Search Github User
+
+
+ Search
+
+
+ )
+}
-const Finder = () => (
-
- Search Github User
-
-
- Search
-
-
-)
+const mapDispatchToProps = ({
+ getProfile
+})
-export default Finder
+export default connect(null, mapDispatchToProps)(Finder)
diff --git a/src/containers/Finder/reducer.js b/src/containers/Finder/reducer.js
new file mode 100644
index 0000000..2521dc2
--- /dev/null
+++ b/src/containers/Finder/reducer.js
@@ -0,0 +1,28 @@
+import {
+ REQUESTED_PROFILE,
+ RECEIVED_PROFILE,
+ FAILED_PROFILE
+} from './constants'
+
+const initialState = {
+ data: null,
+ loading: false,
+ error: false,
+}
+
+const profileReducer = (state = initialState, action) => {
+ switch (action.type) {
+ case REQUESTED_PROFILE:
+ return { ...state, ...{ loading: true, error: false, data: null } }
+ case RECEIVED_PROFILE:
+ return { ...state, ...{ loading: false, error: false, data: action.data } }
+ case FAILED_PROFILE:
+ return { ...state, ...{ loading: false, error: true, data: null } }
+
+ default:
+ return state;
+ }
+}
+
+
+export default profileReducer
diff --git a/src/containers/Profile/index.js b/src/containers/Profile/index.js
new file mode 100644
index 0000000..9e403cd
--- /dev/null
+++ b/src/containers/Profile/index.js
@@ -0,0 +1,38 @@
+import React from 'react'
+import { connect } from 'react-redux'
+import {
+ Text,
+ View,
+ ActivityIndicator,
+ Image,
+} from 'react-native'
+
+import styles from './styles'
+
+const Profile = ({ data, loading }) => {
+ const profileView = !data && loading ?
+ :
+
+
+ return (
+
+ {profileView}
+
+ )
+}
+
+const mapStateToProps = ({ profile: { data, loading } }) => (
+ {
+ data,
+ loading
+ }
+)
+
+export default connect(mapStateToProps)(Profile)
diff --git a/src/containers/Profile/styles.js b/src/containers/Profile/styles.js
new file mode 100644
index 0000000..4169b7b
--- /dev/null
+++ b/src/containers/Profile/styles.js
@@ -0,0 +1,17 @@
+import { StyleSheet } from 'react-native'
+
+const styles = StyleSheet.create(
+ {
+ container: {
+ flex: 1,
+ marginTop: 10,
+ alignItems: 'center',
+ },
+ image: {
+ height: 250,
+ width: 300,
+ }
+ }
+)
+
+export default styles
diff --git a/src/services/profileService.js b/src/services/profileService.js
new file mode 100644
index 0000000..f3047dd
--- /dev/null
+++ b/src/services/profileService.js
@@ -0,0 +1,5 @@
+const getGithubUser = (username) =>
+ fetch(`https://api.github.com/users/${username}`).then((res) => res.json())
+
+export default getGithubUser
+
diff --git a/src/store.js b/src/store.js
index 6805068..69aa792 100644
--- a/src/store.js
+++ b/src/store.js
@@ -1,6 +1,17 @@
-import { createStore } from 'redux'
+import { createStore, combineReducers, applyMiddleware } from 'redux'
+import thunk from 'redux-thunk'
+import { createLogger } from 'redux-logger'
-const fakeReducer = () => {}
-const store = createStore(fakeReducer)
+import ProfileReducer from './containers/Finder/reducer'
+
+const reducers = combineReducers({
+ profile: ProfileReducer
+})
+
+const middlewares = [thunk]
+const logger = createLogger()
+middlewares.push(logger)
+
+const store = createStore(reducers , applyMiddleware(...middlewares))
export default store
diff --git a/yarn.lock b/yarn.lock
index 714507e..ff57de0 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -155,7 +155,7 @@ analytics-node@^2.1.0:
superagent "^3.5.0"
superagent-retry "^0.6.0"
-ansi-escapes@^1.4.0:
+ansi-escapes@^1.1.0, ansi-escapes@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
@@ -613,6 +613,13 @@ babel-plugin-transform-decorators-legacy@^1.3.4:
babel-runtime "^6.2.0"
babel-template "^6.3.0"
+babel-plugin-transform-define@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-define/-/babel-plugin-transform-define-1.3.0.tgz#94c5f9459c810c738cc7c50cbd44a31829d6f319"
+ dependencies:
+ lodash "4.17.4"
+ traverse "0.6.6"
+
babel-plugin-transform-es2015-arrow-functions@^6.5.0, babel-plugin-transform-es2015-arrow-functions@^6.8.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
@@ -825,6 +832,14 @@ babel-plugin-transform-strict-mode@^6.24.1:
babel-runtime "^6.22.0"
babel-types "^6.24.1"
+babel-polyfill@6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d"
+ dependencies:
+ babel-runtime "^6.22.0"
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
babel-polyfill@^6.23.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153"
@@ -1226,7 +1241,7 @@ center-align@^0.1.1:
align-text "^0.1.3"
lazy-cache "^1.0.3"
-chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
+chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
dependencies:
@@ -1273,6 +1288,10 @@ ci-info@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4"
+clamp@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/clamp/-/clamp-1.0.1.tgz#66a0e64011816e37196828fdc8c8c147312c8634"
+
cli-cursor@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
@@ -1952,7 +1971,7 @@ extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
-external-editor@^2.0.4:
+external-editor@^2.0.1, external-editor@^2.0.4:
version "2.1.0"
resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48"
dependencies:
@@ -2500,7 +2519,7 @@ hoek@4.x.x:
version "4.2.0"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
-hoist-non-react-statics@^2.2.1:
+hoist-non-react-statics@^2.2.0, hoist-non-react-statics@^2.2.1, hoist-non-react-statics@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0"
@@ -2616,6 +2635,24 @@ ini@~1.3.0:
version "1.3.4"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+inquirer@3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347"
+ dependencies:
+ ansi-escapes "^1.1.0"
+ chalk "^1.0.0"
+ cli-cursor "^2.1.0"
+ cli-width "^2.0.0"
+ external-editor "^2.0.1"
+ figures "^2.0.0"
+ lodash "^4.3.0"
+ mute-stream "0.0.7"
+ run-async "^2.2.0"
+ rx "^4.1.0"
+ string-width "^2.0.0"
+ strip-ansi "^3.0.0"
+ through "^2.3.6"
+
inquirer@^3.0.1, inquirer@^3.0.6:
version "3.3.0"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
@@ -3415,6 +3452,10 @@ lodash.isarray@^3.0.0:
version "3.0.4"
resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
+lodash.isequal@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+
lodash.keys@^3.0.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
@@ -3472,14 +3513,14 @@ lodash.zipobject@^4.1.3:
version "4.1.3"
resolved "https://registry.yarnpkg.com/lodash.zipobject/-/lodash.zipobject-4.1.3.tgz#b399f5aba8ff62a746f6979bf20b214f964dbef8"
+lodash@4.17.4, lodash@^4.0.0, lodash@^4.14.0, lodash@^4.14.1, lodash@^4.16.6, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+
lodash@^3.5.0:
version "3.10.1"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
-lodash@^4.0.0, lodash@^4.14.0, lodash@^4.14.1, lodash@^4.16.6, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1:
- version "4.17.4"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
-
lodash@~4.5.1:
version "4.5.1"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.5.1.tgz#80e8a074ca5f3893a6b1c10b2a636492d710c316"
@@ -3729,7 +3770,7 @@ minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0:
+minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
@@ -3749,6 +3790,16 @@ mkdirp@*, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1:
dependencies:
minimist "0.0.8"
+mobx-react@^4.3.4:
+ version "4.3.5"
+ resolved "https://registry.yarnpkg.com/mobx-react/-/mobx-react-4.3.5.tgz#76853f2f2ef4a6f960c374bcd9f01e875929c04c"
+ dependencies:
+ hoist-non-react-statics "^2.3.1"
+
+mobx@^3.3.1:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/mobx/-/mobx-3.4.0.tgz#b97f98d973d1be26d185d3cfc78053dd4829ec95"
+
moment@2.x.x, moment@^2.10.6:
version "2.19.2"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.2.tgz#8a7f774c95a64550b4c7ebd496683908f9419dbe"
@@ -3840,6 +3891,13 @@ next-tick@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
+node-fetch@1.6.3:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04"
+ dependencies:
+ encoding "^0.1.11"
+ is-stream "^1.0.1"
+
node-fetch@^1.0.1, node-fetch@^1.3.3:
version "1.7.3"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
@@ -3990,19 +4048,30 @@ onetime@^2.0.0:
dependencies:
mimic-fn "^1.0.0"
-opn@^3.0.2:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a"
+opencollective@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/opencollective/-/opencollective-1.0.3.tgz#aee6372bc28144583690c3ca8daecfc120dd0ef1"
dependencies:
- object-assign "^4.0.1"
+ babel-polyfill "6.23.0"
+ chalk "1.1.3"
+ inquirer "3.0.6"
+ minimist "1.2.0"
+ node-fetch "1.6.3"
+ opn "4.0.2"
-opn@^4.0.2:
+opn@4.0.2, opn@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95"
dependencies:
object-assign "^4.0.1"
pinkie-promise "^2.0.0"
+opn@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a"
+ dependencies:
+ object-assign "^4.0.1"
+
optimist@^0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
@@ -4180,6 +4249,16 @@ path-to-regexp@0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+path-to-regexp@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d"
+ dependencies:
+ isarray "0.0.1"
+
+path-to-regexp@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.1.0.tgz#7e30f9f5b134bd6a28ffc2e3ef1e47075ac5259b"
+
path-type@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
@@ -4313,7 +4392,7 @@ promise@^7.1.1:
dependencies:
asap "~2.0.3"
-prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.8:
+prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.8, prop-types@^15.6.0:
version "15.6.0"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856"
dependencies:
@@ -4455,6 +4534,22 @@ react-native-branch@2.0.0-beta.3:
version "2.0.0-beta.3"
resolved "https://registry.yarnpkg.com/react-native-branch/-/react-native-branch-2.0.0-beta.3.tgz#2167af86bbc9f964bd45bd5f37684e5b54965e32"
+react-native-dismiss-keyboard@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/react-native-dismiss-keyboard/-/react-native-dismiss-keyboard-1.0.0.tgz#32886242b3f2317e121f3aeb9b0a585e2b879b49"
+
+react-native-drawer-layout-polyfill@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/react-native-drawer-layout-polyfill/-/react-native-drawer-layout-polyfill-1.3.2.tgz#192c84d7a5a6b8a6d2be2c7daa5e4164518d0cc7"
+ dependencies:
+ react-native-drawer-layout "1.3.2"
+
+react-native-drawer-layout@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/react-native-drawer-layout/-/react-native-drawer-layout-1.3.2.tgz#b9740d7663a1dc4f88a61b9c6d93d2d948ea426e"
+ dependencies:
+ react-native-dismiss-keyboard "1.0.0"
+
react-native-gesture-handler@1.0.0-alpha.28:
version "1.0.0-alpha.28"
resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-1.0.0-alpha.28.tgz#198c776b7b7d299f9b03017f666a9829f996e30d"
@@ -4465,6 +4560,18 @@ react-native-maps@0.17.0:
version "0.17.0"
resolved "https://registry.yarnpkg.com/react-native-maps/-/react-native-maps-0.17.0.tgz#d10fa94a049432c46b6ee03fe9db84c83da65c8b"
+react-native-router-flux@^4.0.0-beta.24:
+ version "4.0.0-beta.24"
+ resolved "https://registry.yarnpkg.com/react-native-router-flux/-/react-native-router-flux-4.0.0-beta.24.tgz#93fb1976688bd6e34f73b2ae6764704efb7bcdd5"
+ dependencies:
+ lodash.isequal "^4.5.0"
+ mobx "^3.3.1"
+ mobx-react "^4.3.4"
+ opencollective "^1.0.3"
+ path-to-regexp "^2.1.0"
+ prop-types "^15.6.0"
+ react-navigation "^1.0.0-beta.19"
+
react-native-safe-module@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/react-native-safe-module/-/react-native-safe-module-1.2.0.tgz#a23824ca24edc2901913694a76646475113d570d"
@@ -4498,6 +4605,12 @@ react-native-svg@5.4.2:
color "^0.11.1"
lodash "^4.16.6"
+react-native-tab-view@^0.0.70:
+ version "0.0.70"
+ resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-0.0.70.tgz#1dd2ded32acd0cb6bfef38d26e53675db733b37b"
+ dependencies:
+ prop-types "^15.5.10"
+
react-native-vector-icons@4.4.2:
version "4.4.2"
resolved "https://registry.yarnpkg.com/react-native-vector-icons/-/react-native-vector-icons-4.4.2.tgz#090f42ee0396c4cc4eae0ddaa518028ba8df40c7"
@@ -4562,6 +4675,18 @@ react-native@^0.49.5:
xmldoc "^0.4.0"
yargs "^6.4.0"
+react-navigation@^1.0.0-beta.19:
+ version "1.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/react-navigation/-/react-navigation-1.0.0-beta.21.tgz#086c504ba84c966ef8db898baef6fa14ff45a06f"
+ dependencies:
+ babel-plugin-transform-define "^1.3.0"
+ clamp "^1.0.1"
+ hoist-non-react-statics "^2.2.0"
+ path-to-regexp "^1.7.0"
+ prop-types "^15.5.10"
+ react-native-drawer-layout-polyfill "^1.3.2"
+ react-native-tab-view "^0.0.70"
+
react-proxy@^1.1.7:
version "1.1.8"
resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a"
@@ -4688,7 +4813,7 @@ regenerate@^1.2.1:
version "1.3.3"
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f"
-regenerator-runtime@^0.10.5:
+regenerator-runtime@^0.10.0, regenerator-runtime@^0.10.5:
version "0.10.5"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
@@ -4906,6 +5031,10 @@ rx-lite@*, rx-lite@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
+rx@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782"
+
safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
@@ -5508,6 +5637,10 @@ tr46@~0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+traverse@0.6.6:
+ version "0.6.6"
+ resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137"
+
tree-kill@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.0.tgz#5846786237b4239014f05db156b643212d4c6f36"