Graphql.jsx 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import React, {Component} from 'react';
  2. import {Input, Spin} from 'antd';
  3. import GraphiQL from "graphiql";
  4. import fetch from "isomorphic-fetch";
  5. import gql from "graphql-tag";
  6. import {Query} from "react-apollo";
  7. import {GET_PROJECT} from "../../../../gql";
  8. class Graphql extends Component {
  9. constructor(props) {
  10. super(props);
  11. this.state = {
  12. api: props.api,
  13. show: props.api !== ''
  14. };
  15. };
  16. componentWillReceiveProps(next) {
  17. this.setState({
  18. api: next.api,
  19. show: next.api !== ''
  20. })
  21. }
  22. graphQLFetcher = (graphQLParams) => {
  23. // 已经存在的 magazine api, 设想: 用户生成 schema,返回 api 自动替换这里
  24. return fetch(this.state.api, {
  25. method: 'post',
  26. headers: {'Content-Type': 'application/json'},
  27. body: JSON.stringify(graphQLParams),
  28. }).then(response => response.json());
  29. };
  30. render() {
  31. let projectID = this.props.projectID ? this.props.projectID : 'ecommerce_projectID';
  32. return (
  33. <Query query={gql(GET_PROJECT)} variables={{id: projectID}}>
  34. {
  35. ({loading, error, data}) => {
  36. if (loading) {
  37. return <Spin style={{marginLeft: 3}}/>
  38. }
  39. if (error) {
  40. return 'error!';
  41. }
  42. let group = data.project_by_id.apiGWGroup_id;
  43. if (this.state.api === '') {
  44. let domain = group.userDomain? group.userDomain : group.defaultDomain;
  45. this.setState({
  46. // 多路径没做
  47. api: group.frontType.slice(0, 4) + '://' + domain + '/graphql',
  48. show: true
  49. })
  50. }
  51. return (
  52. <div>
  53. <Input
  54. style={{marginTop: 10}}
  55. addonBefore="POST"
  56. defaultValue={this.state.api}
  57. onChange={(e) => {
  58. this.setState({api: e.target.value})
  59. }}/>
  60. {
  61. this.state.show?
  62. <GraphiQL fetcher={this.graphQLFetcher}/>
  63. :
  64. ''
  65. }
  66. </div>
  67. )
  68. }
  69. }
  70. </Query>
  71. )
  72. }
  73. }
  74. export default Graphql;