End of chapter 32

This commit is contained in:
Martin Donnelly 2020-05-13 12:18:43 +01:00
parent d0a34ca226
commit c51bf05f1e
5 changed files with 76 additions and 65 deletions

View File

@ -1,8 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="BranchesTreeState">
<expand>
<path>
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
<item name="LOCAL_ROOT" type="e8cecc67:BranchNodeDescriptor" />
</path>
<path>
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
<item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" />
</path>
<path>
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
<item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" />
<item name="GROUP_NODE:origin" type="e8cecc67:BranchNodeDescriptor" />
</path>
</expand>
<select />
</component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="5be46653-49b7-409a-9549-21ca1be137cc" name="Default Changelist" comment=""> <list default="true" id="5be46653-49b7-409a-9549-21ca1be137cc" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/App.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/App.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/users/User.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/components/users/User.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/context/github/GithubState.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/context/github/GithubState.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/context/github/githubReducer.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/context/github/githubReducer.js" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -37,17 +59,17 @@
</component> </component>
<component name="ProjectViewState"> <component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" /> <option name="hideEmptyMiddlePackages" value="true" />
<option name="showExcludedFiles" value="true" />
<option name="showLibraryContents" value="true" /> <option name="showLibraryContents" value="true" />
</component> </component>
<component name="PropertiesComponent"> <component name="PropertiesComponent">
<property name="ASKED_ADD_EXTERNAL_FILES" value="true" /> <property name="ASKED_ADD_EXTERNAL_FILES" value="true" />
<property name="HbShouldOpenHtmlAsHb" value="" /> <property name="HbShouldOpenHtmlAsHb" value="" />
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" /> <property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
<property name="WebServerToolWindowFactoryState" value="true" /> <property name="WebServerToolWindowFactoryState" value="true" />
<property name="aspect.path.notification.shown" value="true" /> <property name="aspect.path.notification.shown" value="true" />
<property name="com.intellij.ide.scratch.LRUPopupBuilder$1/New Scratch File" value="TEXT" /> <property name="com.intellij.ide.scratch.LRUPopupBuilder$1/New Scratch File" value="TEXT" />
<property name="javascript.nodejs.core.library.configured.version" value="10.16.2" /> <property name="javascript.nodejs.core.library.configured.version" value="12.16.1" />
<property name="js.phonegap.settings.workdir" value="$PROJECT_DIR$/../../../sensortoy/platforms" /> <property name="js.phonegap.settings.workdir" value="$PROJECT_DIR$/../../../sensortoy/platforms" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" /> <property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="node.js.detected.package.eslint" value="true" /> <property name="node.js.detected.package.eslint" value="true" />
@ -61,12 +83,13 @@
<property name="node.js.selected.package.jscs" value="$USER_HOME$/.nvm/versions/node/v8.1.3/lib/node_modules/jscs" /> <property name="node.js.selected.package.jscs" value="$USER_HOME$/.nvm/versions/node/v8.1.3/lib/node_modules/jscs" />
<property name="node.js.selected.package.standard" value="$USER_HOME$/.nvm/versions/node/v8.1.3/lib/node_modules/eslint" /> <property name="node.js.selected.package.standard" value="$USER_HOME$/.nvm/versions/node/v8.1.3/lib/node_modules/eslint" />
<property name="node.js.selected.package.tslint" value="(autodetect)" /> <property name="node.js.selected.package.tslint" value="(autodetect)" />
<property name="nodejs_interpreter_path" value="$USER_HOME$/.nvm/versions/node/v12.16.3/bin/node" />
<property name="nodejs_interpreter_path.stuck_in_default_project" value="$USER_HOME$/.nvm/versions/node/v8.1.3/bin/node" /> <property name="nodejs_interpreter_path.stuck_in_default_project" value="$USER_HOME$/.nvm/versions/node/v8.1.3/bin/node" />
<property name="nodejs_npm_path_reset_for_default_project" value="true" /> <property name="nodejs_npm_path_reset_for_default_project" value="true" />
<property name="nodejs_package_manager_path" value="npm" /> <property name="nodejs_package_manager_path" value="npm" />
<property name="prettierjs.PrettierConfiguration.NodeInterpreter" value="project" /> <property name="prettierjs.PrettierConfiguration.NodeInterpreter" value="project" />
<property name="prettierjs.PrettierConfiguration.Package" value="$USER_HOME$/.nvm/versions/node/v8.11.3/lib/node_modules/prettier" /> <property name="prettierjs.PrettierConfiguration.Package" value="$USER_HOME$/.nvm/versions/node/v8.11.3/lib/node_modules/prettier" />
<property name="settings.editor.selected.configurable" value="settings.javascript.linters.eslint" /> <property name="settings.editor.selected.configurable" value="settings.nodejs" />
<property name="show.migrate.to.gradle.popup" value="false" /> <property name="show.migrate.to.gradle.popup" value="false" />
</component> </component>
<component name="RecentsManager"> <component name="RecentsManager">
@ -90,18 +113,6 @@
<method v="2" /> <method v="2" />
</configuration> </configuration>
</component> </component>
<component name="ServiceViewManager">
<option name="viewStates">
<list>
<serviceView>
<treeState>
<expand />
<select />
</treeState>
</serviceView>
</list>
</option>
</component>
<component name="SvnConfiguration"> <component name="SvnConfiguration">
<configuration /> <configuration />
</component> </component>
@ -133,6 +144,8 @@
<workItem from="1575930059280" duration="269000" /> <workItem from="1575930059280" duration="269000" />
<workItem from="1575930534435" duration="3393000" /> <workItem from="1575930534435" duration="3393000" />
<workItem from="1580237324454" duration="9000" /> <workItem from="1580237324454" duration="9000" />
<workItem from="1585649399085" duration="1972000" />
<workItem from="1589364455407" duration="2331000" />
</task> </task>
<task id="LOCAL-00001" summary="End of Chapter 14"> <task id="LOCAL-00001" summary="End of Chapter 14">
<created>1569512995385</created> <created>1569512995385</created>
@ -264,20 +277,19 @@
<servers /> <servers />
</component> </component>
<component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager">
<option name="version" value="1" /> <option name="version" value="2" />
</component> </component>
<component name="Vcs.Log.Tabs.Properties"> <component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES"> <option name="TAB_STATES">
<map> <map>
<entry key="MAIN"> <entry key="MAIN">
<value> <value>
<State> <State />
<option name="COLUMN_ORDER" />
</State>
</value> </value>
</entry> </entry>
</map> </map>
</option> </option>
<option name="oldMeFiltersMigrated" value="true" />
</component> </component>
<component name="VcsManagerConfiguration"> <component name="VcsManagerConfiguration">
<option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" /> <option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
@ -301,25 +313,30 @@
<option name="LAST_COMMIT_MESSAGE" value="End of chapter 30" /> <option name="LAST_COMMIT_MESSAGE" value="End of chapter 30" />
</component> </component>
<component name="WindowStateProjectService"> <component name="WindowStateProjectService">
<state width="670" height="302" key="GridCell.Tab.0.bottom" timestamp="1575980078037"> <state width="1699" height="387" key="GridCell.Tab.0.bottom" timestamp="1589368148885">
<screen x="2048" y="23" width="2048" height="1129" /> <screen x="0" y="29" width="2560" height="1411" />
</state> </state>
<state width="670" height="302" key="GridCell.Tab.0.bottom/0.23.2048.1129/2048.23.2048.1129@2048.23.2048.1129" timestamp="1575980078037" /> <state width="1687" height="359" key="GridCell.Tab.0.bottom/0.25.2560.1415@0.25.2560.1415" timestamp="1585661700135" />
<state width="670" height="302" key="GridCell.Tab.0.center" timestamp="1575980078037"> <state width="1699" height="387" key="GridCell.Tab.0.bottom/0.29.2560.1411@0.29.2560.1411" timestamp="1589368148885" />
<screen x="2048" y="23" width="2048" height="1129" /> <state width="1699" height="387" key="GridCell.Tab.0.center" timestamp="1589368148884">
<screen x="0" y="29" width="2560" height="1411" />
</state> </state>
<state width="670" height="302" key="GridCell.Tab.0.center/0.23.2048.1129/2048.23.2048.1129@2048.23.2048.1129" timestamp="1575980078037" /> <state width="1687" height="359" key="GridCell.Tab.0.center/0.25.2560.1415@0.25.2560.1415" timestamp="1585661700135" />
<state width="670" height="302" key="GridCell.Tab.0.left" timestamp="1575980078037"> <state width="1699" height="387" key="GridCell.Tab.0.center/0.29.2560.1411@0.29.2560.1411" timestamp="1589368148884" />
<screen x="2048" y="23" width="2048" height="1129" /> <state width="1699" height="387" key="GridCell.Tab.0.left" timestamp="1589368148883">
<screen x="0" y="29" width="2560" height="1411" />
</state> </state>
<state width="670" height="302" key="GridCell.Tab.0.left/0.23.2048.1129/2048.23.2048.1129@2048.23.2048.1129" timestamp="1575980078037" /> <state width="1687" height="359" key="GridCell.Tab.0.left/0.25.2560.1415@0.25.2560.1415" timestamp="1585661700134" />
<state width="670" height="302" key="GridCell.Tab.0.right" timestamp="1575980078037"> <state width="1699" height="387" key="GridCell.Tab.0.left/0.29.2560.1411@0.29.2560.1411" timestamp="1589368148883" />
<screen x="2048" y="23" width="2048" height="1129" /> <state width="1699" height="387" key="GridCell.Tab.0.right" timestamp="1589368148884">
<screen x="0" y="29" width="2560" height="1411" />
</state> </state>
<state width="670" height="302" key="GridCell.Tab.0.right/0.23.2048.1129/2048.23.2048.1129@2048.23.2048.1129" timestamp="1575980078037" /> <state width="1687" height="359" key="GridCell.Tab.0.right/0.25.2560.1415@0.25.2560.1415" timestamp="1585661700135" />
<state x="888" y="346" width="601" height="474" key="find.popup" timestamp="1575938043835"> <state width="1699" height="387" key="GridCell.Tab.0.right/0.29.2560.1411@0.29.2560.1411" timestamp="1589368148884" />
<screen x="0" y="23" width="2048" height="1129" /> <state x="680" y="196" width="1441" height="1081" key="SettingsEditor" timestamp="1589364473413">
<screen x="0" y="29" width="2560" height="1411" />
</state> </state>
<state x="888" y="346" width="601" height="474" key="find.popup/0.23.2048.1129/2048.23.2048.1129@0.23.2048.1129" timestamp="1575938043835" /> <state x="680" y="192" width="1441" height="1081" key="SettingsEditor/0.25.2560.1415@0.25.2560.1415" timestamp="1585649467192" />
<state x="680" y="196" key="SettingsEditor/0.29.2560.1411@0.29.2560.1411" timestamp="1589364473413" />
</component> </component>
</project> </project>

View File

@ -7,7 +7,6 @@ import Search from './components/users/Search';
import Alert from './components/layout/Alert'; import Alert from './components/layout/Alert';
import About from './components/pages/About'; import About from './components/pages/About';
import User from './components/users/User'; import User from './components/users/User';
import axios from 'axios';
import GithubState from './context/github/GithubState'; import GithubState from './context/github/GithubState';
@ -15,19 +14,6 @@ import './App.css';
const App = () => { const App = () => {
const [alert, setAlert] = useState(null); const [alert, setAlert] = useState(null);
const [repos, setRepos] = useState([]);
const getUserRepos = async username => {
// setLoading(true);
const res = await axios.get(
`https://api.github.com/users/${username}/repos?per_page=5&sort=created:asc&client_id=${
process.env.REACT_APP_GITHUB_CLIENT_ID
}&client_secret=${process.env.REACT_APP_GITHUB_CLIENT_SECRET}`
);
setRepos(res.data);
// setLoading(false);
};
// Show an alert // Show an alert
@ -63,15 +49,7 @@ const App = () => {
<Route <Route
exact exact
path="/user/:login" path="/user/:login"
render={props => ( component={User}
<User
{...props}
getUserRepos={getUserRepos}
repos={repos}
/>
)}
/> />
</Switch> </Switch>
</div> </div>

View File

@ -5,9 +5,9 @@ import PropTypes from 'prop-types';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import GithubContext from '../../context/github/githubContext'; import GithubContext from '../../context/github/githubContext';
const User = ({ getUserRepos, repos, match }) => { const User = ({ match }) => {
const githubContext = useContext(GithubContext); const githubContext = useContext(GithubContext);
const { getUser, loading, user } = githubContext; const { getUser, loading, user, repos, getUserRepos } = githubContext;
useEffect(() => { useEffect(() => {
getUser(match.params.login); getUser(match.params.login);
@ -104,9 +104,4 @@ const User = ({ getUserRepos, repos, match }) => {
); );
}; };
User.propTypes = {
'getUserRepos': PropTypes.func.isRequired,
'repos': PropTypes.array.isRequired
};
export default User; export default User;

View File

@ -53,6 +53,20 @@ const GithubState = props => {
// get repos // get repos
const getUserRepos = async username => {
setLoading();
const res = await axios.get(
`https://api.github.com/users/${username}/repos?per_page=5&sort=created:asc&client_id=${
process.env.REACT_APP_GITHUB_CLIENT_ID
}&client_secret=${process.env.REACT_APP_GITHUB_CLIENT_SECRET}`
);
dispatch({
'type': GET_REPOS,
'payload': res.data
});
};
/* /*
* clear users * clear users
* Clear Users from State * Clear Users from State
@ -73,7 +87,8 @@ const GithubState = props => {
'loading': state.loading, 'loading': state.loading,
searchUsers, searchUsers,
clearUsers, clearUsers,
getUser getUser,
getUserRepos
}} }}
> >

View File

@ -28,6 +28,12 @@ export default (state, action) => {
users:[], users:[],
loading:false loading:false
}; };
case GET_REPOS:
return {
...state,
repos: action.payload,
loading: false
};
case SET_LOADING: case SET_LOADING:
return { return {
...state, ...state,