import { Component } from 'preact'; import { formatDate } from "../util"; import sanitizeHtml from 'sanitize-html'; import BlogCommentsForm from "./BlogCommentsForm.jsx"; class BlogComments extends Component { state = { message: null, error: null, page: 1, }; fetchMessages = async (page) => { try { const response = await fetch(`${import.meta.env.PUBLIC_API_URL}/comments/${this.props.slug}?page=${page}`); if (!response.ok) { const errorData = await response.json(); this.setState({ error: errorData.message }); console.error('Failed to fetch data:', errorData.message); return; } const { messages, totalPages } = await response.json(); this.setState({ message: messages, totalPages: totalPages, error: null // clear any previous error }); } catch (error) { this.setState({ error: `${error.message}` }); console.error('Failed to fetch data:', error); } } refresh = async () => { await this.fetchMessages(this.state.page); } async componentDidMount() { await this.fetchMessages(this.state.page); } handleNext = async () => { const nextPage = this.state.page + 1; if (nextPage > this.state.totalPages) { return; } this.setState({ page: nextPage }); await this.fetchMessages(nextPage); } handlePrevious = async () => { const previousPage = this.state.page - 1; this.setState({ page: previousPage }); await this.fetchMessages(previousPage); } render() { const { message, error, page, totalPages } = this.state; return (
{error}
) : message ? (Loading comments...
)}