import React, { Component } from 'react'; import { IntlProvider, FormattedMessage } from 'react-intl'; import browser from 'browser-detect'; import './styles.css'; // This class is the only component loaded on legacy (unsupported) browsers. // What is included here needs to be minimal and carefully considered because some // things can't be polyfilled. const FETCHING = 'fetching'; const FALLBACK = 'fallback'; const READY = 'ready'; const supportedBrowsers = ['chrome', 'firefox', 'safari', 'opera', 'edge']; export default class Legacy extends Component { constructor(props) { super(props); const locale = navigator.languages ? navigator.languages[0] : false || navigator.language || Meteor.settings.public.app.defaultSettings.application.fallbackLocale; const url = `/html5client/locale?locale=${locale}`; const that = this; this.state = { viewState: FETCHING }; fetch(url) .then((response) => { if (!response.ok) { return Promise.reject(); } return response.json(); }) .then(({ messages, normalizedLocale }) => { const dasherizedLocale = normalizedLocale.replace('_', '-'); that.setState({ messages, normalizedLocale: dasherizedLocale, viewState: READY }); }) .catch(() => { that.setState({ viewState: FALLBACK }); }); } render() { const { messages, normalizedLocale, viewState } = this.state; const isSupportedBrowser = supportedBrowsers.includes(browser().name); const isChromeIos = browser().name === 'crios'; let messageId = isSupportedBrowser ? 'app.legacy.upgradeBrowser' : 'app.legacy.unsupportedBrowser'; if (isChromeIos) messageId = 'app.legacy.criosBrowser'; switch (viewState) { case READY: return (

Chrome, 1: Firefox, }} />

); case FALLBACK: return (

{isChromeIos ? ( Please use Safari on iOS for full support. ) : ( It looks like you're using a browser that is not fully supported. Please use either {' '} Chrome or Firefox for full support. ) }

); case FETCHING: default: return null; } } }