Guest User

Untitled

a guest
Jun 29th, 2022
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.51 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>GraphiQL by Endre F. Kiss</title><style>
  6. th.MuiTableCell-head {
  7. font-weight: bold;
  8. }
  9. tr {
  10. height: 30px;
  11. }
  12. table.detailTable {
  13. font-family: Arial;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18.  
  19. <h2>Launches</h2>
  20.  
  21. <script src="https://server3.kproxy.com/servlet/redirect.srv/sruj/spuazh/p2/[email protected]/umd/react.development.js" crossorigin></script>
  22. <script src="https://server3.kproxy.com/servlet/redirect.srv/sruj/spuazh/p2/[email protected]/umd/react-dom.development.js" crossorigin></script>
  23. <script src="https://server3.kproxy.com/servlet/redirect.srv/sruj/spuazh/p2/@material-ui/core@latest/umd/material-ui.production.min.js"></script>
  24. <script src="https://server3.kproxy.com/servlet/redirect.srv/sruj/spuazh/p2/babel-standalone@latest/babel.min.js" crossorigin="anonymous"></script>
  25.  
  26. <div id="root"></div>
  27. <script type="text/babel">
  28. const {
  29. colors,
  30. ThemeProvider,
  31. makeStyles,
  32. Table,
  33. TableBody,
  34. TableCell,
  35. TableContainer,
  36. TableHead,
  37. TableRow,
  38. TablePagination,
  39. Paper,
  40. Grid,
  41. withStyles,
  42. createStyles,
  43. createMuiTheme,
  44. } = MaterialUI;
  45.  
  46. const theme = createMuiTheme({
  47. palette: {
  48. primary: {
  49. main: '#556cd6',
  50. },
  51. secondary: {
  52. main: '#19857b',
  53. },
  54. error: {
  55. main: colors.red.A400,
  56. },
  57. background: {
  58. default: '#fff',
  59. },
  60. },
  61. });
  62.  
  63.  
  64.  
  65. function App() {
  66.  
  67. const useStyles = makeStyles({
  68. table: {
  69. minWidth: 650,
  70. }
  71. });
  72.  
  73. const classes = useStyles();
  74. const [page, setPage] = React.useState(0);
  75. const [rowsPerPage, setRowsPerPage] = React.useState(10);
  76.  
  77. const handleChangePage = (event: unknown, newPage: number) => {
  78. setPage(newPage);
  79. };
  80.  
  81. const handleChangeRowsPerPage = (event: React.ChangeEvent<HTMLInputElement>) => {
  82. setRowsPerPage(parseInt(event.target.value, 10));
  83. setPage(0);
  84. };
  85.  
  86. const StyledTableRow = withStyles((theme: Theme) =>
  87. createStyles({
  88. root: {
  89. '&:nth-of-type(odd)': {
  90. backgroundColor: theme.palette.action.hover,
  91. },
  92. },
  93. }),
  94. )(TableRow);
  95.  
  96. let row2 = {};
  97.  
  98. const showDetails = (row) => (event: React.MouseEvent<unknown>) => {
  99.  
  100. let tableContent = ''
  101. +'<table class="detailTable">'
  102. + '<tbody>'
  103. + '<tr>'
  104. + '<th style="width: 130px">Name</th>'
  105. + '<td>' + row.mission_name + '</td>'
  106. + '</tr>'
  107. + '<tr>'
  108. + '<th>Launch date</th>'
  109. + '<td>' + row.launch_date_local + '</td>'
  110. + '</tr>'
  111. + '<tr>'
  112. + '<th>Launch site</th>'
  113. + '<td>' + row.launch_site.site_name_long + '</td>'
  114. + '</tr>'
  115. + '<tr>'
  116. + '<th>Article link</th>'
  117. + '<td>' + row.links.article_link + '</td>'
  118. + '</tr>'
  119. + '<tr>'
  120. + '<th>Video link</th>'
  121. + '<td>' + row.links.video_link + '</td>'
  122. + '</tr>'
  123. + '<tr>'
  124. + '<th>Rocket</th>'
  125. + '<td>' + row.rocket.rocket_name + '</td>'
  126. + '</tr>';
  127.  
  128. let shipNumber = 1;
  129. row.ships = row.ships.filter(x => x !== null);
  130. row.ships.map((ship) =>
  131. (
  132. tableContent += ''
  133. + '<tr>'
  134. + '<th colspan="2" style="text-align: center">Ship #' + shipNumber++ + '</th>'
  135. + '</tr>'
  136. + '<tr>'
  137. + '<th>Ship name</th>'
  138. + '<td>' + ship.name + '</td>'
  139. + '</tr>'
  140. + '<tr>'
  141. + '<th>Home port</th>'
  142. + '<td>' + ship.home_port + '</td>'
  143. + '</tr>'
  144. ))
  145.  
  146. let payloadNumber = 1;
  147. console.log(row);
  148. row.rocket.second_stage.payloads = row.rocket.second_stage.payloads.filter(x => x !== null);
  149.  
  150. row.rocket.second_stage.payloads.map((payload) =>
  151. (
  152. tableContent += ''
  153. + '<tr>'
  154. + '<th colspan="2" style="text-align: center">Payload #' + payloadNumber++ + '</th>'
  155. + '</tr>'
  156. + '<tr>'
  157. + '<th>Payload type</th>'
  158. + '<td>' + payload.payload_type + '</td>'
  159. + '</tr>'
  160. + '<tr>'
  161. + '<th>Payload mass kg</th>'
  162. + '<td>' + payload.payload_mass_kg + '</td>'
  163. + '</tr>'
  164. + '<tr>'
  165. + '<th>Payload mass lps</th>'
  166. + '<td>' + payload.payload_mass_lps + '</td>'
  167. + '</tr>'
  168. ))
  169.  
  170. tableContent += ''
  171. + '</tbody></table>';
  172.  
  173. document.getElementById("kutya").innerHTML = tableContent;
  174. };
  175.  
  176. return (
  177. <div style={{ height: 400, width: '100%' }}>
  178. <Grid container spacing={3}>
  179. <Grid item xs={12} sm={6}>
  180. <TableContainer component={Paper}>
  181. <Table className={classes.table} aria-label="simple table">
  182. <TableHead>
  183. <TableRow>
  184. <TableCell>Name</TableCell>
  185. <TableCell align="right">Launch date</TableCell>
  186. <TableCell align="right">Launch site</TableCell>
  187. </TableRow>
  188. </TableHead>
  189. <TableBody>
  190. {window.result.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage).map((row) => (
  191. <StyledTableRow onClick={showDetails(row)} key={row.mission_name}>
  192. <TableCell component="th" scope="row">
  193. {row.mission_name}
  194. </TableCell>
  195. <TableCell align="right">{row.launch_date_local}</TableCell>
  196. <TableCell align="right">{row.launch_site.site_name_long}</TableCell>
  197. </StyledTableRow>
  198. ))}
  199. </TableBody>
  200. </Table>
  201. </TableContainer>
  202. <TablePagination
  203. rowsPerPageOptions={[10, 15]}
  204. component="div"
  205. count={window.result.length}
  206. rowsPerPage={rowsPerPage}
  207. page={page}
  208. onChangePage={handleChangePage}
  209. onChangeRowsPerPage={handleChangeRowsPerPage}
  210. />
  211. </Grid>
  212. <Grid item xs={12} sm={6}>
  213. <Paper id="kutya" className={classes.paper}>
  214. <table>
  215. <tbody>
  216. <tr>
  217. <td>Name</td>
  218. <td>{row2.mission_name}</td>
  219. </tr>
  220. </tbody>
  221. </table>
  222. </Paper>
  223. </Grid>
  224. </Grid>
  225. </div>
  226. );
  227. }
  228.  
  229. const requestOptions = {
  230. method: 'POST',
  231. headers: { 'Content-Type': 'application/json' },
  232. body: JSON.stringify({ query:
  233. '{\n' +
  234. ' launchesPast(limit: 0) {\n' +
  235. ' mission_name\n' +
  236. ' launch_date_local\n' +
  237. ' launch_site {\n' +
  238. ' site_name_long\n' +
  239. ' }\n' +
  240. ' links {\n' +
  241. ' article_link\n' +
  242. ' video_link\n' +
  243. ' }\n' +
  244. ' rocket {\n' +
  245. ' rocket_name\n' +
  246. ' first_stage {\n' +
  247. ' cores {\n' +
  248. ' flight\n' +
  249. ' core {\n' +
  250. ' reuse_count\n' +
  251. ' status\n' +
  252. ' }\n' +
  253. ' }\n' +
  254. ' }\n' +
  255. ' second_stage {\n' +
  256. ' payloads {\n' +
  257. ' payload_type\n' +
  258. ' payload_mass_kg\n' +
  259. ' payload_mass_lbs\n' +
  260. ' }\n' +
  261. ' }\n' +
  262. ' }\n' +
  263. ' ships {\n' +
  264. ' name\n' +
  265. ' home_port\n' +
  266. ' image\n' +
  267. ' }\n' +
  268. ' }\n' +
  269. '}\n'
  270. })
  271. };
  272.  
  273. fetch("https://api.spacex.land/graphql", requestOptions)
  274. .then(res => res.json())
  275. .then(
  276. (result) => {
  277. console.log(result.data.launchesPast);
  278. window.result=result.data.launchesPast;
  279. ReactDOM.render(
  280. <ThemeProvider theme={theme}>
  281. <App />
  282. </ThemeProvider>,
  283. document.querySelector('#root'),
  284. );
  285. },
  286. (error) => {
  287. alert(error);
  288. }
  289. )
  290. </script>
  291.  
  292. </body>
  293. </html>
Advertisement
Add Comment
Please, Sign In to add comment