bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/legacy/component.jsx
2019-06-21 17:45:34 +00:00

95 lines
3.0 KiB
JavaScript
Executable File

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 (
<IntlProvider locale={normalizedLocale} messages={messages}>
<p className="browserWarning">
<FormattedMessage
id={messageId}
description="Warning when someone joins with a browser that isnt supported"
values={{
0: <a href="https://www.google.com/chrome/">Chrome</a>,
1: <a href="https://getfirefox.com">Firefox</a>,
}}
/>
</p>
</IntlProvider>
);
case FALLBACK:
return (
<p className="browserWarning">
{isChromeIos ? (
<span>Please use Safari on iOS for full support.</span>
) : (
<span>
<span>
It looks like you&#39;re using a browser that
is not fully supported. Please use either
{' '}
</span>
<a href="https://www.google.com/chrome/">Chrome</a>
<span> or </span>
<a href="https://getfirefox.com">Firefox</a>
<span> for full support.</span>
</span>
)
}
</p>
);
case FETCHING:
default:
return null;
}
}
}