App.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import ApolloClient, { createNetworkInterface } from 'apollo-client';
  2. import { ApolloProvider, graphql } from 'react-apollo';
  3. const client = new ApolloClient({
  4. networkInterface: createNetworkInterface({
  5. uri: "http://localhost:3000/graphql"
  6. }),
  7. connectToDevTools: true
  8. });
  9. import gql from 'graphql-tag';
  10. const query = gql`
  11. {
  12. people {
  13. url
  14. homeworld
  15. height
  16. skin_color
  17. birth_year
  18. eye_color
  19. hair_color
  20. gender
  21. name
  22. mass
  23. }
  24. }
  25. `;
  26. const PeopleContainer = graphql(query);
  27. function Person({ url, gender, name, homeworld, height, mass, eye_color, hair_color, skin_color, }) {
  28. return (
  29. <div style={{ flex: '1 0 300px' }}>
  30. <div style={{
  31. border: '1px solid rgba(0,0, 0, 0.12)',
  32. padding: '24px'
  33. }}>
  34. <h1 style={{
  35. fontSize: '14px',
  36. margin: '8px 0'
  37. }}>{name} - {gender}</h1>
  38. <p>
  39. Height: {height}, Mass: {mass}, Skin: {skin_color}
  40. </p>
  41. <p>
  42. Eye color: {eye_color}, Hair: {hair_color}
  43. </p>
  44. <p>
  45. <a href={homeworld}>View homeworld</a>
  46. </p>
  47. <p>
  48. <a href={url}>View more</a>
  49. </p>
  50. </div>
  51. </div>
  52. );
  53. }
  54. let PeopleList = function PeopleList({ data }) {
  55. console.log(data);
  56. return (
  57. <div
  58. style={{
  59. maxWidth: '680px',
  60. margin: '0 auto'
  61. }}
  62. >
  63. <div
  64. style={{
  65. flexWrap: 'wrap',
  66. display: 'flex'
  67. }}
  68. >
  69. {
  70. data.loading
  71. ? (
  72. <p>People will be here soon</p>
  73. )
  74. : (
  75. data.people.map((person, index) => {
  76. return <Person key={index} {...person} />
  77. })
  78. )
  79. }
  80. </div>
  81. </div>
  82. );
  83. };
  84. PeopleList = PeopleContainer(PeopleList);
  85. import React, { Component } from 'react';
  86. import './App.css';
  87. class App extends Component {
  88. render() {
  89. return (
  90. <ApolloProvider client={client}>
  91. <div className="App">
  92. <div className="App-header">
  93. <img src="https://cdn-images-1.medium.com/fit/t/1600/480/1*sxMljQ8wgso4cG3PxufTmQ.png"
  94. className="App-logo"
  95. alt="Logo" />
  96. <h2>Your first GraphQL component</h2>
  97. </div>
  98. <PeopleList />
  99. </div>
  100. </ApolloProvider>
  101. );
  102. }
  103. }
  104. export default App;