Skip to content

Commit eb6276b

Browse files
committed
implimented the scroll functionality
1 parent e307e01 commit eb6276b

File tree

2 files changed

+68
-42
lines changed

2 files changed

+68
-42
lines changed

src/Containers/App.js

Lines changed: 66 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,77 +2,102 @@
22
// import './App.css';
33
import React, { Component } from 'react';
44
import RepoList from '../Components/RepoList';
5+
// import Repo from '../Components/Repo';
56
import axios from 'axios';
67
import moment from 'moment';
78

89

10+
911
class App extends Component {
1012
constructor(){
1113
super();
1214
this.state = {
1315
repo: [],
14-
error: ''
16+
error: '',
17+
page: 1,
18+
loading: true,
19+
1520
}
1621
}
1722

1823

1924
componentDidMount(){
20-
// Getting the data from Github API
2125

22-
const DATE_30_DAYS_BEFORE = moment().subtract(30, 'days').format('YYYY-MM-DD')
26+
this.loadRepo() // load the initial Repos
27+
window.addEventListener('scroll', this.handleLoadMore )
28+
}
29+
30+
31+
loadRepo = () => {
32+
33+
const { page, repo } = this.state
2334

24-
axios.get(
25-
` https://api.github.com/search/repositories?q=created:>${ DATE_30_DAYS_BEFORE }&sort=stars&order=desc&page=3 `
26-
)
35+
const DATE_30_DAYS_BEFORE = moment().subtract(30, 'days').format('YYYY-MM-DD')
36+
37+
// Getting the data from Github API
38+
39+
axios.get(
40+
` https://api.github.com/search/repositories?q=created:>${ DATE_30_DAYS_BEFORE }&sort=stars&order=desc&page=${ page } `
41+
)
2742

2843
.then(resp => {
29-
// console.log(resp);
30-
this.setState({
31-
repo: resp.data.items,
32-
});
44+
// console.log(resp);
45+
46+
this.setState({
47+
// repo: resp.data.items,
48+
repo: [...repo, ...resp.data.items ], // here when scrolling, Repo get updated instantly
49+
loading: false,
50+
51+
});
52+
53+
// console.log("Repo Updated: ", repo);
3354
})
3455

3556
.catch((error) => {
36-
// console.log('Catch Here... : ', error)
37-
this.setState({
38-
error: error,
39-
});
57+
this.setState({
58+
error: error,
59+
loding: false,
60+
});
4061
})
62+
}
4163

64+
65+
handleLoadMore = () => {
66+
67+
const { loading } = this.state
68+
69+
if( window.pageYOffset + window.innerHeight >= window.innerHeight && !loading ){
70+
this.loadData();
71+
}
72+
}
73+
74+
75+
loadData = () => {
76+
77+
const { page } = this.state
78+
79+
this.setState((prevState) => ({
80+
page: prevState.page + page,
81+
loading: true,
82+
}))
83+
84+
this.loadRepo();
4285
}
4386

4487

4588
render() {
4689

4790
const { repo } = this.state
4891

49-
return (
50-
<div>
51-
<RepoList repo={ repo }/>
52-
</div>
53-
);
92+
return (
93+
<div>
94+
<RepoList repo={ repo } />
95+
<div> Loading ...</div>
96+
</div>
97+
)
5498
}
99+
55100
}
56101

57-
// function App() {
58-
// return (
59-
// <div className="App">
60-
// <header className="App-header">
61-
// <img src={logo} className="App-logo" alt="logo" />
62-
// <p>
63-
// Edit <code>src/App.js</code> and save to reload.
64-
// </p>
65-
// <a
66-
// className="App-link"
67-
// href="https://reactjs.org"
68-
// target="_blank"
69-
// rel="noopener noreferrer"
70-
// >
71-
// Learn React
72-
// </a>
73-
// </header>
74-
// </div>
75-
// );
76-
// }
77-
78-
export default App;
102+
103+
export default App

src/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom';
3-
import './index.css';
3+
// import './index.css';
44
import App from './Containers/App';
55
// import Repo from './Components/Repo';
66
import * as serviceWorker from './serviceWorker';
77

8+
89
ReactDOM.render(<App />, document.getElementById('root'));
910

1011
// If you want your app to work offline and load faster, you can change

0 commit comments

Comments
 (0)