22// import './App.css';
33import React , { Component } from 'react' ;
44import RepoList from '../Components/RepoList' ;
5+ // import Repo from '../Components/Repo';
56import axios from 'axios' ;
67import moment from 'moment' ;
78
89
10+
911class 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
0 commit comments