11import * as React from 'react' ;
22import Layout from '../components/layout' ;
3- import { Text , Image , Flex } from '../components/shared/base' ;
3+ import { Heading , Text , Image , Flex } from '../components/shared/base' ;
44import { logoutUser } from '../utils/auth' ;
55import { navigate } from 'gatsby' ;
6- import WithCurrentUser from '../utils/auth/WithCurrentUser' ;
6+ import { Query } from 'react-apollo' ;
7+ import gql from 'graphql-tag' ;
8+ import { optionalChaining } from '../utils/helpers' ;
79import { CenteredLoader } from '../components/Loader' ;
810
911const Profile = ( ) => {
1012 return (
11- < WithCurrentUser >
12- { ( { user , loading } ) => {
13+ < Query query = { PROFILE_QUERY } >
14+ { ( { data , loading } ) => {
1315 if ( loading ) {
1416 return < CenteredLoader /> ;
1517 }
16- if ( user ) {
17- return < ProfilePage user = { user } /> ;
18+ if ( optionalChaining ( ( ) => data ! . viewer ! . user ) ) {
19+ return < ProfilePage user = { data . viewer . user } /> ;
1820 }
1921 navigate ( '/signup/' ) ;
2022 return null ;
2123 } }
22- </ WithCurrentUser >
24+ </ Query >
2325 ) ;
2426} ;
2527
@@ -32,9 +34,22 @@ type User = {
3234 avatarUrl : string ;
3335 name : string ;
3436 githubHandle : string ;
37+ bio : string ;
38+ upvoted : [ Tutorials ] ;
39+ saved : [ Tutorials ] ;
40+ } ;
41+
42+ type Tutorials = {
43+ tutorial : Tutorial ;
44+ } ;
45+
46+ type Tutorial = {
47+ id : 'string' ;
48+ name : 'string' ;
3549} ;
3650
3751const ProfilePage : React . FunctionComponent < ProfileProps > = ( { user } ) => {
52+ console . log ( user ) ;
3853 return (
3954 < Layout >
4055 < Flex flexDirection = "column" >
@@ -52,7 +67,49 @@ const ProfilePage: React.FunctionComponent<ProfileProps> = ({ user }) => {
5267 viverra nibh nec, ultrices risus. */
5368 </ Text >
5469 < button onClick = { ( ) => logoutUser ( ) } > Log out </ button >
70+ < Heading > Upvoted Tutorials </ Heading >
71+ < ul >
72+ { user . upvoted . map ( a => (
73+ < li key = { a . tutorial . id } >
74+ < span > { a . tutorial . name } </ span >
75+ </ li >
76+ ) ) }
77+ </ ul >
78+ < Heading > Saved Tutorials </ Heading >
79+ < ul >
80+ { user . saved . map ( a => (
81+ < li key = { a . tutorial . id } >
82+ < span > { a . tutorial . name } </ span >
83+ </ li >
84+ ) ) }
85+ </ ul >
5586 </ Layout >
5687 ) ;
5788} ;
5889export default Profile ;
90+
91+ const PROFILE_QUERY = gql `
92+ query profileQuery {
93+ viewer {
94+ user {
95+ id
96+ name
97+ githubHandle
98+ avatarUrl
99+ bio
100+ upvoted: userTutorials(where: { upvoted: true }) {
101+ tutorial {
102+ id
103+ name
104+ }
105+ }
106+ saved: userTutorials(where: { saved: true }) {
107+ tutorial {
108+ id
109+ name
110+ }
111+ }
112+ }
113+ }
114+ }
115+ ` ;
0 commit comments