APIGroupCard.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. import React, {Component} from 'react';
  2. import {Input, Collapse, Button, Radio, Icon, Tooltip} from 'antd';
  3. import {ADD_APIGROUP, UPDATE_APIGROUP} from "../../../../gql";
  4. import {request} from 'graphql-request'
  5. import {idGen} from "../../../../func";
  6. import {graphqlUrl} from "../../../../config";
  7. import {manageUsers} from "../../../../config";
  8. import {FormattedMessage} from 'react-intl';
  9. const Panel = Collapse.Panel;
  10. // 如需改变显示,请在此处 value 处更改
  11. // 如需添加中文,请在此处 value 处添加
  12. // eg: 'xxxx': <F.. id='xxx'/>
  13. const valueToKey = {
  14. 'groupName': 'Name',
  15. 'environmentName': 'environmentName',
  16. 'defaultDomain': 'defaultDomain',
  17. 'frontType': 'frontType',
  18. 'userDomain': 'userDomain',
  19. 'userStatus': 'userStatus',
  20. 'region': 'region',
  21. };
  22. const toolTipTitle = {
  23. 'groupName': 'its groupName',
  24. 'environmentName': 'its environmentName',
  25. 'defaultDomain': 'its defaultDomain',
  26. 'frontType': 'its frontType',
  27. 'userDomain': 'its userDomain',
  28. 'userStatus': 'its userStatus',
  29. 'region': 'its region',
  30. };
  31. class APIGroupCard extends Component {
  32. constructor(props) {
  33. super(props);
  34. let {groupName, environmentName, defaultDomain, frontType, userDomain, userStatus, region} = props.group;
  35. props.group !== '' ?
  36. this.state = {
  37. showOK: false,
  38. groupName,
  39. environmentName,
  40. defaultDomain,
  41. frontType,
  42. userDomain,
  43. userStatus,
  44. groupRegion: region
  45. }
  46. :
  47. this.state = {
  48. showOK: false,
  49. groupName: 'graphql_endpoint',
  50. environmentName: 'test',
  51. defaultDomain: '',
  52. frontType: 'http&https',
  53. userDomain: '',
  54. userStatus: 'open',
  55. groupRegion: props.region
  56. };
  57. }
  58. componentWillReceiveProps(next) {
  59. if(next.group !== '') {
  60. let {groupName, environmentName, defaultDomain, frontType, userDomain, userStatus, region} = next.group;
  61. this.setState( {
  62. groupName,
  63. environmentName,
  64. defaultDomain,
  65. frontType,
  66. userDomain,
  67. userStatus,
  68. groupRegion: region
  69. })
  70. } else {
  71. this.setState ( {
  72. groupName: 'graphql_endpoint',
  73. environmentName: 'test',
  74. defaultDomain: '',
  75. frontType: 'http&https',
  76. userDomain: '',
  77. userStatus: 'open',
  78. groupRegion: next.region
  79. });
  80. }
  81. };
  82. switchConfig = (label) => {
  83. return (e) => {
  84. this.setState({
  85. [label]: e.target.value
  86. })
  87. };
  88. };
  89. ok = (id) => {
  90. let {userStatus, userDomain, groupName, frontType, environmentName} = this.state;
  91. let varObj = {
  92. id,
  93. cloud_id: this.props.cloudID,
  94. user_id: this.props.userID,
  95. userStatus,
  96. userDomain,
  97. groupName,
  98. frontType,
  99. region: this.state.groupRegion,
  100. environmentName,
  101. defaultDomain: '',
  102. status: '',
  103. serviceId: '',
  104. createdAt: new Date().getTime(),
  105. updatedAt: ''
  106. };
  107. if (this.props.group === '') {
  108. request(graphqlUrl, ADD_APIGROUP, varObj).then(
  109. data => {
  110. if (data.create_apiGWGroup !== null) {
  111. this.setState({
  112. showOK: true
  113. })
  114. }
  115. setTimeout(()=>{
  116. this.setState({
  117. showOK: false
  118. })
  119. }, 1500)
  120. }
  121. )
  122. } else {
  123. let {userStatus, userDomain, groupName, frontType, environmentName} = this.state;
  124. let varObj = {
  125. id: this.props.group.id,
  126. userStatus,
  127. userDomain,
  128. groupName,
  129. frontType,
  130. region: this.state.groupRegion,
  131. environmentName,
  132. updatedAt: new Date().getTime()
  133. };
  134. request(graphqlUrl, UPDATE_APIGROUP, varObj).then(
  135. data => {
  136. if (data.update_apiGWGroup !== null) {
  137. this.setState({
  138. showOK: true
  139. })
  140. }
  141. setTimeout(()=>{
  142. this.setState({
  143. showOK: false
  144. })
  145. }, 1500)
  146. }
  147. )
  148. }
  149. };
  150. render() {
  151. const customPanelStyle = {
  152. background: '#f7f7f7',
  153. borderRadius: 4,
  154. marginBottom: 24,
  155. border: 0,
  156. overflow: 'hidden',
  157. };
  158. return (
  159. <div>
  160. <Collapse bordered={false}>
  161. <Panel header="Want more options?" style={customPanelStyle}>
  162. <div style={{marginBottom: 10}}>
  163. <span className='vice-title'>{valueToKey['groupName']}
  164. <span> </span>
  165. <Tooltip placement="top" title={toolTipTitle['groupName']}>
  166. <Icon type="question-circle"/>
  167. </Tooltip>
  168. </span>
  169. <Input value={this.state.groupName} style={{width: 400}}
  170. onChange={this.switchConfig('groupName')}/>
  171. </div>
  172. <div style={{marginBottom: 10}}>
  173. <span className='vice-title'>{valueToKey['region']}
  174. <span> </span>
  175. <Tooltip placement="top" title={toolTipTitle['region']}>
  176. <Icon type="question-circle"/>
  177. </Tooltip>
  178. </span>
  179. <Radio.Group onChange={this.switchConfig('groupRegion')} value={this.state.groupRegion} buttonStyle="solid">
  180. <Radio.Button value="guangzhou">Guangzhou</Radio.Button>
  181. <Radio.Button value="shanghai">Shanghai</Radio.Button>
  182. <Radio.Button value="beijing">Beijing</Radio.Button>
  183. <Radio.Button value="chengdu">Chengdu</Radio.Button>
  184. </Radio.Group>
  185. </div>
  186. <div style={{marginBottom: 10}}>
  187. <span className='vice-title'>{valueToKey['frontType']}
  188. <span> </span>
  189. <Tooltip placement="top" title={toolTipTitle['frontType']}>
  190. <Icon type="question-circle"/>
  191. </Tooltip>
  192. </span>
  193. <Radio.Group onChange={this.switchConfig('frontType')} defaultValue={this.state.frontType}
  194. buttonStyle="solid">
  195. <Radio.Button value="http">http</Radio.Button>
  196. <Radio.Button value="https">https</Radio.Button>
  197. <Radio.Button value="http&https">http&https</Radio.Button>
  198. </Radio.Group>
  199. </div>
  200. <div style={{marginBottom: 10}}>
  201. <span className='vice-title'>{valueToKey['defaultDomain']}
  202. <span> </span>
  203. <Tooltip placement="top" title={toolTipTitle['defaultDomain']}>
  204. <Icon type="question-circle"/>
  205. </Tooltip>
  206. </span>
  207. <Input value={this.state.defaultDomain} style={{width: 400}} disabled/>
  208. </div>
  209. <div style={{marginBottom: 10}}>
  210. <span className='vice-title'>{valueToKey['environmentName']}
  211. <span> </span>
  212. <Tooltip placement="top" title={toolTipTitle['environmentName']}>
  213. <Icon type="question-circle"/>
  214. </Tooltip>
  215. </span>
  216. <Radio.Group onChange={this.switchConfig('environmentName')} defaultValue={this.state.environmentName}
  217. buttonStyle="solid">
  218. <Radio.Button value="test">test</Radio.Button>
  219. <Radio.Button value="prepub">prepub</Radio.Button>
  220. <Radio.Button value="release">release</Radio.Button>
  221. </Radio.Group>
  222. </div>
  223. <div style={{marginBottom: 10}}>
  224. <span className='vice-title'>{valueToKey['userDomain']}
  225. <span> </span>
  226. <Tooltip placement="top" title={toolTipTitle['userDomain']}>
  227. <Icon type="question-circle"/>
  228. </Tooltip>
  229. </span>
  230. <Input value={this.state.userDomain} style={{width: 400}}
  231. onChange={this.switchConfig('userDomain')}/>
  232. </div>
  233. <div style={{marginBottom: 10}}>
  234. <span className='vice-title'>{valueToKey['userStatus']}
  235. <span> </span>
  236. <Tooltip placement="top" title={toolTipTitle['userStatus']}>
  237. <Icon type="question-circle"/>
  238. </Tooltip>
  239. </span>
  240. <Radio.Group onChange={this.switchConfig('userStatus')} defaultValue={this.state.userStatus}
  241. buttonStyle="solid">
  242. <Radio.Button value="open">open</Radio.Button>
  243. <Radio.Button value="close">close</Radio.Button>
  244. </Radio.Group>
  245. </div>
  246. </Panel>
  247. </Collapse>
  248. {
  249. manageUsers.includes(this.props.userID)?
  250. <div>
  251. <Button onClick={()=>{
  252. const id = idGen('group');
  253. this.ok(id);
  254. this.props.pass(id, 'group');
  255. }} type='primary'>save</Button>
  256. {
  257. this.state.showOK === true?
  258. <Icon type="check-circle" theme="twoTone" twoToneColor="#52c41a"/>
  259. :
  260. ''
  261. }
  262. </div>
  263. :
  264. this.props.trialcase?
  265. ''
  266. :
  267. <div>
  268. <Button onClick={()=>{
  269. const id = idGen('group');
  270. this.ok(id);
  271. this.props.pass(id, 'group');
  272. }} type='primary'>save</Button>
  273. {
  274. this.state.showOK === true?
  275. <Icon type="check-circle" theme="twoTone" twoToneColor="#52c41a"/>
  276. :
  277. ''
  278. }
  279. </div>
  280. }
  281. </div>
  282. )
  283. }
  284. }
  285. export default APIGroupCard;