File tree Expand file tree Collapse file tree 7 files changed +191
-4
lines changed
Expand file tree Collapse file tree 7 files changed +191
-4
lines changed Original file line number Diff line number Diff line change 1+ // @flow
2+ import React from 'react' ;
3+ import { Link } from 'react-router-dom' ;
4+ import UserItemStyles from './styles' ;
5+
6+ type Props = {
7+ data : any
8+ } ;
9+
10+ export default ( props : Props ) => (
11+ < Link to = { `/user/${ props . data . login } ` } >
12+ < UserItemStyles >
13+ < div className = "user-info" >
14+ < figure className = "user-info--avatar" >
15+ < img src = { props . data . avatarUrl } alt = { props . data . name } />
16+ </ figure >
17+ < div className = "user-info--name" >
18+ < span > { props . data . name } </ span >
19+ < span > @{ props . data . login } </ span >
20+ </ div >
21+ </ div >
22+ { ( props . data . repositories && props . data . repositories . totalCount ) ? (
23+ < span className = "repositories-count" >
24+ { props . data . repositories . totalCount }
25+ </ span >
26+ ) : null }
27+ </ UserItemStyles >
28+ </ Link >
29+ ) ;
Original file line number Diff line number Diff line change 1+ // @flow
2+
3+ import styled from 'styled-components' ;
4+
5+ export default styled . div `
6+ width: 100%;
7+ padding: 20px;
8+ display: flex;
9+ margin: 0 auto;
10+ align-items: center;
11+ justify-content: space-between;
12+ background-color: #fff;
13+ margin-bottom: 10px;
14+ border-radius: 5px;
15+ box-shadow: 0 0 15px rgba(0,0,0,0.03);
16+ cursor: pointer;
17+ .user-info {
18+ display: flex;
19+ align-items: center;
20+ &--avatar {
21+ width: 50px;
22+ height: 50px;
23+ border-radius: 10rem;
24+ overflow: hidden;
25+ margin: 0;
26+ float: left;
27+ img {
28+ width: 100%;
29+ height: 100%;
30+ object-fit: cover;
31+ }
32+ }
33+ &--name {
34+ float: left;
35+ font-size: 15px;
36+ color: #444;
37+ margin-left: 20px;
38+ text-align: left;
39+ span {
40+ cursor: pointer;
41+ &:last-child {
42+ opacity: 0.4;
43+ }
44+ }
45+ }
46+ }
47+ .repositories-count {
48+ background-color: #ff5959;
49+ padding: 10px;
50+ border-radius: 10rem;
51+ color: #fff;
52+ font-size: 13px;
53+ line-height: 1;
54+ min-height: 35px;
55+ display: inline-block;
56+ min-width: 35px;
57+ cursor: pointer;
58+ }
59+ ` ;
Original file line number Diff line number Diff line change 1+ // @flow
2+ import React , { Component } from "react" ;
3+ import RepositoryItem from "../RepositoryItem" ;
4+ import InfiniteLoader from "../InfiniteLoader" ;
5+ import UserItem from "../UserItem" ;
6+
7+ type Props = {
8+ data : any ,
9+ hasLoadMore : boolean ,
10+ onLoadMore : any
11+ } ;
12+ type State = { } ;
13+
14+ export default class UsersWrapper extends Component < Props , State > {
15+ render ( ) {
16+ const { data, hasLoadMore, onLoadMore } = this . props ;
17+ return (
18+ < div id = "users--item" >
19+ < InfiniteLoader hasNextPage = { hasLoadMore } onLoadMore = { onLoadMore } >
20+ { data . map ( ( user : any , index : number ) => (
21+ < UserItem data = { user } key = { `user-item--${ index } ` } />
22+ ) ) }
23+ </ InfiniteLoader >
24+ </ div >
25+ ) ;
26+ }
27+ }
Original file line number Diff line number Diff line change @@ -6,6 +6,7 @@ import gql from "graphql-tag";
66import { Query , withApollo } from "react-apollo" ;
77import Loading from "../../components/Loading" ;
88import UserSidebar from "../../components/UserSidebar" ;
9+ import UsersWrapper from "../../components/UsersWrapper" ;
910import FollowersWrapper from './styles' ;
1011
1112const GET_FOLLOWERS = gql `
@@ -25,6 +26,10 @@ const GET_FOLLOWERS = gql`
2526 }
2627 followers(first: 100, after: $nextPage) {
2728 totalCount
29+ pageInfo {
30+ hasNextPage
31+ endCursor
32+ }
2833 nodes {
2934 name
3035 login
@@ -63,7 +68,38 @@ const FollowersPage = (props : any) => {
6368 < header id = "repositories--header" >
6469 < h3 > Followers</ h3 >
6570 </ header >
66-
71+ < UsersWrapper
72+ data = { repositoryOwner . followers . nodes }
73+ hasLoadMore = {
74+ repositoryOwner . followers . pageInfo . hasNextPage
75+ }
76+ onLoadMore = { ( ) => {
77+ fetchMore ( {
78+ variables : {
79+ nextPage :
80+ repositoryOwner . followers . pageInfo . endCursor
81+ } ,
82+ updateQuery : ( prev , { fetchMoreResult } ) => {
83+ if ( ! fetchMoreResult ) return prev ;
84+ return {
85+ repositoryOwner : {
86+ ...prev . repositoryOwner ,
87+ followers : {
88+ ...fetchMoreResult . repositoryOwner
89+ . followers ,
90+ nodes : [
91+ ...prev . repositoryOwner . followers
92+ . nodes ,
93+ ...fetchMoreResult . repositoryOwner
94+ . followers . nodes
95+ ]
96+ }
97+ }
98+ } ;
99+ }
100+ } ) ;
101+ } }
102+ />
67103 </ div >
68104 </ Fragment >
69105 ) ;
Original file line number Diff line number Diff line change @@ -25,7 +25,7 @@ export default styled.div `
2525 letter-spacing: 1.2px;
2626 }
2727 }
28- #repositories --item {
28+ #users --item {
2929 margin: 40px -10px;
3030 height: 81.4vh;
3131 }
Original file line number Diff line number Diff line change @@ -6,6 +6,7 @@ import gql from "graphql-tag";
66import { Query , withApollo } from "react-apollo" ;
77import Loading from "../../components/Loading" ;
88import UserSidebar from "../../components/UserSidebar" ;
9+ import UsersWrapper from "../../components/UsersWrapper" ;
910import FollowingsWrapper from './styles' ;
1011
1112const GET_FOLLOWINGS = gql `
@@ -25,6 +26,10 @@ const GET_FOLLOWINGS = gql`
2526 }
2627 following(first: 100, after: $nextPage) {
2728 totalCount
29+ pageInfo {
30+ hasNextPage
31+ endCursor
32+ }
2833 nodes {
2934 name
3035 login
@@ -63,7 +68,38 @@ const FollowingsPage = (props : any) => {
6368 < header id = "repositories--header" >
6469 < h3 > Followings</ h3 >
6570 </ header >
66-
71+ < UsersWrapper
72+ data = { repositoryOwner . following . nodes }
73+ hasLoadMore = {
74+ repositoryOwner . following . pageInfo . hasNextPage
75+ }
76+ onLoadMore = { ( ) => {
77+ fetchMore ( {
78+ variables : {
79+ nextPage :
80+ repositoryOwner . following . pageInfo . endCursor
81+ } ,
82+ updateQuery : ( prev , { fetchMoreResult } ) => {
83+ if ( ! fetchMoreResult ) return prev ;
84+ return {
85+ repositoryOwner : {
86+ ...prev . repositoryOwner ,
87+ following : {
88+ ...fetchMoreResult . repositoryOwner
89+ . following ,
90+ nodes : [
91+ ...prev . repositoryOwner . following
92+ . nodes ,
93+ ...fetchMoreResult . repositoryOwner
94+ . following . nodes
95+ ]
96+ }
97+ }
98+ } ;
99+ }
100+ } ) ;
101+ } }
102+ />
67103 </ div >
68104 </ Fragment >
69105 ) ;
Original file line number Diff line number Diff line change @@ -25,7 +25,7 @@ export default styled.div `
2525 letter-spacing: 1.2px;
2626 }
2727 }
28- #repositories --item {
28+ #users --item {
2929 margin: 40px -10px;
3030 height: 81.4vh;
3131 }
You can’t perform that action at this time.
0 commit comments