UNPKG

core-app-worona

Version:
70 lines (62 loc) 2 kB
/* eslint-disable no-undef, no-underscore-dangle */ import React from 'react'; import { connect } from 'react-redux'; import * as deps from '../../deps'; class LinkCssClass extends React.Component { componentDidMount() { this.linkElement.addEventListener('load', this.props.assetsFileDownloaded); this.linkElement.addEventListener('error', this.props.assetsFileDontDownloaded); } render() { return ( <link rel="stylesheet" ref={linkElement => { this.linkElement = linkElement; }} type="text/css" href={`${this.props.cdn}${this.props.path}`} /> ); } } LinkCssClass.propTypes = { cdn: React.PropTypes.string.isRequired, path: React.PropTypes.string.isRequired, assetsFileDownloaded: React.PropTypes.func.isRequired, assetsFileDontDownloaded: React.PropTypes.func.isRequired, }; const mapDispatchToProps = (dispatch, { path, pkgName }) => ({ assetsFileDownloaded: () => dispatch(deps.actions.packageAssetFileDownloaded({ path, pkgName, assetType: 'css' })), assetsFileDontDownloaded: error => dispatch( deps.actions.packageAssetFileDontDownloaded({ path, pkgName, assetType: 'css', error }) ), }); const LinkCss = connect(null, mapDispatchToProps)(LinkCssClass); const CssLoader = ({ cssAssets, cdn }) => ( <div> {cssAssets.map(asset => ( <LinkCss pkgName={asset.pkgName} cdn={`https://${cdn}.worona.io/packages/`} path={asset.path} key={asset.path} /> ))} </div> ); CssLoader.propTypes = { cssAssets: React.PropTypes.arrayOf(React.PropTypes.object).isRequired, cdn: React.PropTypes.string.isRequired, }; export const mapStateToProps = state => ({ cssAssets: deps.selectors.getCssAssets(state), cdn: window.location.host.startsWith('preapp.worona.org') || window.location.host.startsWith('localhost') || window.__worona__.pre ? 'precdn' : 'cdn', }); export default connect(mapStateToProps)(CssLoader);