import variables from 'modules/variables'; import { PureComponent } from 'react'; import { MdEmail, MdContactPage } from 'react-icons/md'; import { FaDiscord, FaTwitter } from 'react-icons/fa'; import { SiGithubsponsors, SiOpencollective } from 'react-icons/si'; import { BiDonateHeart } from 'react-icons/bi'; import Tooltip from 'components/helpers/tooltip/Tooltip'; import other_contributors from 'modules/other_contributors.json'; export default class About extends PureComponent { constructor() { super(); this.state = { contributors: [], sponsors: [], other_contributors: [], photographers: [], update: variables.getMessage('modals.main.settings.sections.about.version.checking_update'), loading: variables.getMessage('modals.main.loading'), image: document.body.classList.contains('dark') ? 'icons/mue_dark.png' : 'icons/mue_light.png', }; this.controller = new AbortController(); } async getGitHubData() { let contributors, sponsors, photographers, versionData; try { versionData = await ( await fetch( variables.constants.GITHUB_URL + '/repos/' + variables.constants.ORG_NAME + '/' + variables.constants.REPO_NAME + '/releases', { signal: this.controller.signal }, ) ).json(); contributors = await ( await fetch( variables.constants.GITHUB_URL + '/repos/' + variables.constants.ORG_NAME + '/' + variables.constants.REPO_NAME + '/contributors', { signal: this.controller.signal }, ) ).json(); sponsors = ( await ( await fetch(variables.constants.SPONSORS_URL + '/list', { signal: this.controller.signal, }) ).json() ).sponsors; photographers = await ( await fetch(variables.constants.API_URL + '/images/photographers', { signal: this.controller.signal, }) ).json(); } catch (e) { if (this.controller.signal.aborted === true) { return; } return this.setState({ update: variables.getMessage('modals.main.settings.sections.about.version.error.title'), loading: variables.getMessage( 'modals.main.settings.sections.about.version.error.description', ), }); } if (sponsors.length === 0) { sponsors = [{ handle: 'empty' }]; } if (this.controller.signal.aborted === true) { return; } const newVersion = versionData[0].tag_name; let update = variables.getMessage('modals.main.settings.sections.about.version.no_update'); if ( Number(variables.constants.VERSION.replaceAll('.', '')) < Number(newVersion.replaceAll('.', '')) ) { update = `${variables.getMessage( 'modals.main.settings.sections.about.version.update_available', )}: ${newVersion}`; } this.setState({ // exclude bots contributors: contributors.filter((contributor) => !contributor.login.includes('bot')), sponsors, update, other_contributors, photographers, loading: null, }); } componentDidMount() { if (navigator.onLine === false || localStorage.getItem('offlineMode') === 'true') { this.setState({ update: variables.getMessage('modals.main.settings.sections.about.version.checking_update'), loading: variables.getMessage('modals.main.marketplace.offline.description'), }); return; } this.getGitHubData(); } componentWillUnmount() { // stop making requests this.controller.abort(); } render() { return ( <> {variables.getMessage('modals.main.settings.sections.about.title')}
Logo {variables.getMessage('modals.main.settings.sections.about.version.title')}{' '} {variables.constants.VERSION} ({this.state.update}) {variables.getMessage('modals.main.settings.sections.about.copyright')}{' '} {variables.constants.COPYRIGHT_YEAR}-{new Date().getFullYear()}{' '} {variables.constants.COPYRIGHT_NAME} {' '} ({variables.constants.COPYRIGHT_LICENSE}) {variables.getMessage('modals.welcome.sections.privacy.links.privacy_policy')}
{variables.getMessage('modals.main.settings.sections.about.contact_us')}
{variables.getMessage('modals.main.settings.sections.about.form_button')}
{variables.getMessage('modals.main.settings.sections.about.support_mue')}

{variables.getMessage('modals.main.settings.sections.about.support_subtitle')}

{variables.getMessage('modals.main.settings.sections.about.support_donate')}
{variables.getMessage('modals.main.settings.sections.about.resources_used.title')} Pexels ,{' '} Unsplash {' '} ({variables.getMessage('modals.main.settings.sections.about.resources_used.bg_images')})
{variables.getMessage('modals.main.settings.sections.about.contributors')}

{this.state.loading}

{this.state.contributors.map(({ login, id }) => ( {login} ))} { // for those who contributed without opening a pull request this.state.other_contributors.map(({ login, avatar_url }) => ( {login} )) }
{variables.getMessage('modals.main.settings.sections.about.supporters')}

{this.state.loading}

{this.state.sponsors.map(({ handle, avatar }) => { if (handle === 'empty') { return (

{variables.getMessage('modals.main.settings.sections.about.no_supporters')}

); } return ( {handle} ); })}
{variables.getMessage('modals.main.settings.sections.about.photographers')} {!!this.state.loading ?

{this.state.loading}

: <> }
); } }