import React, { Component } from "react"; import { Loader, Message, Segment, Header, Comment, Divider, Breadcrumb } from "semantic-ui-react"; import { Link } from "@reach/router"; import Post from "./Post"; class Board extends Component { constructor() { super(); this.state = { isLoaded: false, threadList: [], error: null, loadingMore: false, endReached: false }; this.handleScroll = this.handleScroll.bind(this); this.threadOffset = 10; } componentDidMount() { fetch( `https://bienvenidoainternet.org/cgi/api/list?dir=${this.props.dir}&replies=5&limit=10` ) .then(response => { return response.json(); }) .then(resource => { if (resource["state"] === "error") { this.setState({ error: resource }); } this.setState( { isLoaded: true, threadList: resource["threads"] }, () => { window.scrollTo(0, 0); } ); }); window.scrollTo(0, 0); window.addEventListener("scroll", this.handleScroll); } componentWillUnmount() { window.removeEventListener("scroll", this.handleScroll); } handleScroll() { const { scrollHeight, scrollTop, clientHeight } = document.documentElement; if ( scrollHeight - scrollTop === clientHeight && !this.state.loadingMore && !this.state.endReached ) { this.setState({ loadingMore: true }); this.fetchMoreThreads(); } } fetchMoreThreads() { fetch( `https://bienvenidoainternet.org/cgi/api/list?dir=${this.props.dir}&replies=5&limit=10&offset=${this.threadOffset}` ) .then(response => { return response.json(); }) .then(resource => { if (resource.state === "success") { if (resource.threads.length > 0) { const moreThreads = this.state.threadList.concat(resource.threads); this.threadOffset += 10; this.setState({ threadList: moreThreads, loadingMore: false }); } else { this.setState({ endReached: true, loadingMore: false }); } } return; }); } componentDidUpdate(prevProps) { // Uso tipico (no olvides de comparar los props): if (this.props.dir !== prevProps.dir) { this.setState({ isLoaded: false, threadList: [], error: null }); this.componentDidMount(); } } render() { const { isLoaded, error, threadList, loadingMore, endReached } = this.state; const { boardList, dir, nightMode } = this.props; if (error != null) { return (
API Status: {error.state}

{error.message}

); } if (!isLoaded) { return ( Cargando ... ); } const currentBoard = boardList.find(board => { return board.dir === dir; }); document.title = currentBoard.name + " - B.a.I"; return ( Home {currentBoard.name}
{currentBoard.name} /{currentBoard.dir}/

Lista de hilos
{threadList.map(thread => (
{thread.subject} {thread.total_replies} respuestas
{thread.replies.map((reply, index, replies) => ( ))}
))} {loadingMore ? ( Cargando más hilos ... ) : null} {endReached ? ( ) : null}
); } } export default Board;