import variables from 'modules/variables'; import { PureComponent, createRef } from 'react'; import { MdOutlineWifiOff } from 'react-icons/md'; import Modal from 'react-modal'; import Lightbox from '../../marketplace/Lightbox'; export default class Changelog extends PureComponent { constructor() { super(); this.state = { title: null, showLightbox: false, lightboxImg: null, }; this.offlineMode = localStorage.getItem('offlineMode') === 'true'; this.controller = new AbortController(); this.changelog = createRef(); } async getUpdate() { const res = await fetch(variables.constants.BLOG_POST + '/index.json', { signal: this.controller.signal, }); if (res.status === 404) { this.setState({ error: true }); return; } if (this.controller.signal.aborted === true) { return; } const data = await res.json(); let date = new Date(data.date.split(' ')[0]); date = date.toLocaleDateString(variables.languagecode.replace('_', '-'), { year: 'numeric', month: 'long', day: 'numeric', }); this.setState({ title: data.title, date, image: data.featured_image || null, author: variables.getMessage('modals.main.settings.sections.changelog.by', { author: data.authors.join(', '), }), content: data.markdown, }); // lightbox etc const images = this.changelog.current.getElementsByTagName('img'); const links = this.changelog.current.getElementsByTagName('a'); for (const img of images) { img.draggable = false; img.onclick = () => { this.setState({ showLightbox: true, lightboxImg: img.src, }); }; } // open in new tab for (let link = 0; link < links.length; link++) { links[link].target = '_blank'; links[link].rel = 'noopener noreferrer'; } } componentDidMount() { if (navigator.onLine === false || this.offlineMode) { return; } this.getUpdate(); } componentWillUnmount() { // stop making requests this.controller.abort(); } render() { const errorMessage = (msg) => { return (
{msg}
); }; if (navigator.onLine === false || this.offlineMode) { return errorMessage( <>

{variables.getMessage('modals.main.marketplace.offline.title')}

{variables.getMessage('modals.main.marketplace.offline.description')}

, ); } if (this.state.error === true) { return errorMessage( <> {variables.getMessage('modals.main.error_boundary.title')} {variables.getMessage('modals.main.error_boundary.message')} , ); } if (!this.state.title) { return errorMessage(
{variables.getMessage('modals.main.loading')}
, ); } return (

{this.state.title}

{this.state.author} • {this.state.date}
{this.state.image ? ( {this.state.title} ) : null}
{this.state.content}
this.setState({ showLightbox: false })} isOpen={this.state.showLightbox} className="Modal lightBoxModal" overlayClassName="Overlay resetoverlay" ariaHideApp={false} > this.setState({ showLightbox: false })} img={this.state.lightboxImg} />
); } }