Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.98 KB | None | 0 0
  1. import * as React from 'react';
  2. import { List, Collapse, ListItem, ListItemIcon, ListItemText, ListSubheader } from '@material-ui/core';
  3. import { Favorite, Computer, ExpandLess, ExpandMore } from "@material-ui/icons";
  4. import ServerListItem from "./ServerListItem";
  5. import SearchBar from './SearchBar';
  6.  
  7. export default class ServerList extends React.Component {
  8.  
  9. constructor(props) {
  10. super(props);
  11. this.state = {
  12. offset: 0,
  13. favoritesOpen: false,
  14. allOpen: true,
  15. };
  16.  
  17. this.favorites = [];
  18. this.serverList = this.props.servers
  19. .sort((a, b) => {
  20. if(a.players > b.players) {
  21. return -1;
  22. } else {
  23. return 1;
  24. }
  25. })
  26. .map((server) => {
  27. return (
  28. <ServerListItem
  29. country={server.country}
  30. hostname={server.hostname}
  31. players={server.players}
  32. maxplayers={server.maxplayers}
  33. level={server.level}
  34. host={server.endpoint}
  35. onFavorited={ flag => {
  36. let index = this.favorites.indexOf(server.hostname);
  37.  
  38. !flag && index >= 0
  39. ? this.favorites.splice(index, 1)
  40. : this.favorites.push(server.hostname);
  41. this.forceUpdate();
  42. }}
  43. />
  44. )
  45. });
  46. }
  47.  
  48. render() {
  49. let allServersFiltered = this.serverList.filter(... função de filtro ...);
  50.  
  51. let otherServers = allServersFiltered
  52. .filter((it, index) => {
  53. return !this.favorites.includes(it.props.hostname) &&
  54. index >= this.state.offset && index < this.state.offset + 10
  55. });
  56.  
  57. return(
  58. <List
  59. subheader={
  60. ... search box ...
  61. }
  62. >
  63. <ListItem button onClick={() => { this.setState({favoritesOpen: !this.state.favoritesOpen}) }}>
  64. <ListItemIcon>
  65. <Favorite />
  66. </ListItemIcon>
  67. <ListItemText inset primary="Favorites" />
  68. { this.state.favoritesOpen ? <ExpandLess /> : <ExpandMore /> }
  69. </ListItem>
  70. {
  71. <Collapse in={this.state.favoritesOpen} timeout={"auto"} unmountOnEdit>
  72. <List component={"div"}>
  73. {
  74. this.favorites.length === 0
  75. ? <ListItemText inset primary={"You have no favorite servers :c"}/>
  76. : this.serverList.filter((it) => this.favorites.includes(it.props.hostname))
  77. }
  78. </List>
  79. </Collapse>
  80. }
  81. <List>
  82. <ListItem button onClick={() => {this.setState({ allOpen: !this.state.allOpen })}}>
  83. <ListItemIcon>
  84. <Computer />
  85. </ListItemIcon>
  86. <ListItemText inset primary="All Servers" />
  87. { this.state.allOpen ? <ExpandLess /> : <ExpandMore /> }
  88. </ListItem>
  89. <Collapse in={this.state.allOpen} unmountOnEdit>
  90. {
  91. otherServers.length === 0
  92. ? <ListItemText inset primary={"No more servers found :c"}/>
  93. : otherServers
  94. }
  95. </Collapse>
  96. </List>
  97. </List>
  98. );
  99. }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement