Advertisement
Guest User

Untitled

a guest
Nov 3rd, 2016
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.25 KB | None | 0 0
  1. export default function Schema(db){
  2.  
  3. const userType = new GraphQLObjectType({
  4. name:'User',
  5. description:'Single user in system',
  6. fields:()=>({
  7. user_id:{type:new GraphQLNonNull(GraphQLInt)},
  8. name:{type:GraphQLString},
  9. friends:{
  10. type:userConnection.connectionType,
  11. args:connectionArgs,
  12. resolve:(obj,args)=>connectionFromPromisedArray(db.collection('user').find({user_id:{$in:obj.friends[0]}}).toArray(),args)
  13. }
  14. })
  15. })
  16.  
  17. const userConnection = connectionDefinitions({name:'User',nodeType:userType})
  18.  
  19. const viewerType = new GraphQLObjectType({
  20. name:'Viewer',
  21. description:'Currently logged in user on App',
  22. fields:()=>({
  23. id:{
  24. type:GraphQLString,
  25. resolve:(obj)=>{
  26. //console.log(obj)
  27. return obj.id
  28. }
  29. },
  30. user:{
  31. type:userType,
  32. args:{
  33. user_id:{type:new GraphQLNonNull(GraphQLInt)}
  34. },
  35. resolve:(obj,args)=>{
  36. console.log(args)
  37. return db.collection('user').findOne({user_id:args.user_id})
  38. }
  39. }
  40. })
  41. })
  42.  
  43. const Query = new GraphQLObjectType({
  44. name:'Query',
  45. fields:()=>({
  46. viewer:{type:viewerType,resolve:()=>({id:'initialId'})}
  47. })
  48. })
  49.  
  50. const authenticateMutation = mutationWithClientMutationId({
  51. name:'authenticateMutation',
  52.  
  53. inputFields:{
  54. name:{type:GraphQLString},
  55. password:{type:GraphQLString}
  56. },
  57.  
  58. outputFields:{
  59. viewer:{
  60. type:viewerType,
  61. resolve:(data)=>{
  62.  
  63. console.log('-----outputFields-------')
  64. console.log({id:data.user_id})
  65. return {id:data.user_id}
  66. }
  67. }
  68. },
  69. mutateAndGetPayload:({name,password})=>{
  70. return db.collection('user')
  71. .findOne({name:name,password:password})
  72. .then(data=>data)
  73. }
  74. })
  75.  
  76. const Mutation = new GraphQLObjectType({
  77. name:'Mutations',
  78. fields:()=>({
  79. authenticateMutation:authenticateMutation
  80. })
  81. })
  82.  
  83. const schema = new GraphQLSchema({
  84. query:Query,
  85. mutation:Mutation
  86. })
  87. return schema
  88. }
  89.  
  90. import React from 'react';
  91. import Relay from 'react-relay';
  92. import ReactDOM from 'react-dom';
  93. import { browserHistory, applyRouterMiddleware, Router } from 'react-router';
  94. import useRelay from 'react-router-relay';
  95. import Route from './routes/Route';
  96.  
  97.  
  98. ReactDOM.render(
  99. <Router
  100. history={browserHistory}
  101. routes={Route}
  102. render={applyRouterMiddleware(useRelay)}
  103. environment={Relay.Store} />,
  104. document.getElementById('content')
  105. );
  106.  
  107. import React from 'react';
  108. import Relay from 'react-relay';
  109.  
  110. class AppContainer extends React.Component{
  111. componentDidMount(){
  112. console.log('-----Container-----')
  113. console.log(this.props)
  114. }
  115.  
  116. render(){
  117. return <div>{React.Children.map(this.props.children,child=>{
  118. return React.cloneElement(child,{
  119. viewer:this.props.viewer
  120. })
  121. })}</div>
  122. }
  123. }
  124.  
  125. export default Relay.createContainer(AppContainer,{
  126. fragments:{
  127. viewer:()=>Relay.QL`fragment on Viewer{
  128. id
  129. }`
  130. }
  131. })
  132.  
  133. import React from 'react';
  134. import Relay from 'react-relay';
  135. import authenticateMutation from '../mutations/authenticateMutation'
  136.  
  137. var onSuccess = ()=>{
  138. console.log('Success')
  139. }
  140.  
  141. var onFailure = (transaction)=>{
  142. var error = transaction.getError()|| new Error('My error')
  143. console.log(error)
  144. }
  145.  
  146. class Login extends React.Component{
  147.  
  148. componentDidMount(){
  149. console.log('-----Relay Store before')
  150. console.log(Relay.Store)
  151. }
  152.  
  153. handleLogin = (e)=>{
  154. console.log(this.props)
  155. console.log(this.state.userText)
  156. let onSuccess = onSuccess
  157. Relay.Store.commitUpdate(new authenticateMutation({
  158. name:this.state.userText,
  159. password:this.state.userPass,
  160. viewer:this.props.viewer
  161. }),{onFailure,onSuccess})
  162. }
  163.  
  164. textChange = (e)=>{
  165. if(e.target.type==='text')
  166. this.state.userText = e.target.value
  167. else
  168. this.state.userPass = e.target.value
  169.  
  170. }
  171.  
  172. state = {
  173. userText:'',
  174. userPass:''
  175. }
  176.  
  177. render(){
  178. return (<div>
  179. <h4>Login</h4>
  180. <div>
  181. <input placeholder='username' onChange={this.textChange}/>
  182. <input type='password' placeholder = 'password' onChange={this.textChange} />
  183. <button onClick={this.handleLogin}>Login</button>
  184. </div>
  185. </div>)
  186. }
  187. }
  188.  
  189. export default Login
  190.  
  191. import Relay from 'react-relay'
  192.  
  193. export default class extends Relay.Mutation{
  194. getMutation(){
  195. return Relay.QL`mutation{authenticateMutation}`
  196. }
  197. getVariables(){
  198. return {
  199. name:this.props.name,
  200. password:this.props.password
  201. }
  202. }
  203.  
  204. getFatQuery(){
  205. return Relay.QL`fragment on authenticateMutationPayload{
  206. viewer{id}
  207. }`
  208. }
  209.  
  210. getConfigs() {
  211. return [{
  212. type: 'FIELDS_CHANGE',
  213. fieldIDs: {viewer:this.props.viewer.id}
  214. }];
  215. }
  216. }
  217.  
  218. {"data":{"authenticateMutation":{"clientMutationId":"0","viewer":{"id":"1"}}}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement