2017-09-20 12:30:53 +03:00
|
|
|
import { Component } from 'react';
|
2017-10-09 16:48:27 +03:00
|
|
|
import { withTheme, injectGlobal } from 'styled-components';
|
2017-09-20 12:30:53 +03:00
|
|
|
import FontFaceObserver from 'fontfaceobserver';
|
2017-10-09 16:48:27 +03:00
|
|
|
|
2017-09-20 12:30:53 +03:00
|
|
|
import { fontFaces } from '../typography/fonts';
|
2017-10-18 05:29:47 +03:00
|
|
|
import global from '../base/global';
|
|
|
|
|
|
|
|
const observers = Object.values(fontFaces).map(
|
|
|
|
({ family, style, weight }) =>
|
|
|
|
new FontFaceObserver(family, {
|
|
|
|
weight,
|
|
|
|
style
|
|
|
|
})
|
2017-09-20 12:30:53 +03:00
|
|
|
);
|
|
|
|
|
|
|
|
class RootContainer extends Component {
|
|
|
|
componentWillMount() {
|
2017-10-09 16:48:27 +03:00
|
|
|
const { theme } = this.props;
|
|
|
|
|
2017-09-20 12:30:53 +03:00
|
|
|
// eslint-disable-next-line no-unused-expressions
|
|
|
|
injectGlobal`
|
2017-10-18 05:29:47 +03:00
|
|
|
${global({ theme })};
|
2017-09-20 12:30:53 +03:00
|
|
|
`;
|
|
|
|
|
2017-10-18 05:29:47 +03:00
|
|
|
Promise.all(observers.map(obs => obs.load()))
|
|
|
|
.then(() => {
|
2017-10-31 12:03:44 +02:00
|
|
|
// eslint-disable-next-line
|
|
|
|
if (!document.documentElement.className.match(/fonts-loaded/)) {
|
|
|
|
document.documentElement.className += ' fonts-loaded';
|
|
|
|
}
|
2017-10-18 05:29:47 +03:00
|
|
|
})
|
|
|
|
.catch(err => {
|
2017-10-31 12:03:44 +02:00
|
|
|
// eslint-disable-next-line no-console
|
2017-10-18 05:29:47 +03:00
|
|
|
console.error(err);
|
|
|
|
});
|
2017-09-20 12:30:53 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
render() {
|
|
|
|
return this.props.children;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default withTheme(RootContainer);
|