UNPKG

@patternplate/client

Version:

Universal javascript client application for patternplate

120 lines (92 loc) 3.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireDefault(require("react")); var _server = require("react-dom/server"); var _reactHelmet = _interopRequireDefault(require("react-helmet")); var _components = require("@patternplate/components"); var _platform = _interopRequireDefault(require("platform")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _slicedToArray(arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return _sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } } const THEMES = _components.themes.getThemes(); const SVG_FAVICON_SUPPORT = ["Firefox"]; class FavIcon extends _react.default.Component { constructor(...args) { super(...args); this.state = {}; } componentDidMount() { if (SVG_FAVICON_SUPPORT.indexOf(_platform.default.name) > -1) { return; } _components.svg.png(getSource(this.props)).then(pngHref => this.setState({ pngHref })).catch(err => { console.error(err); this.setState({ pngHref: null }); }); } componentWillReceiveProps(next) { if (SVG_FAVICON_SUPPORT.indexOf(_platform.default.name) > -1) { return; } _components.svg.png(getSource(next)).then(pngHref => this.setState({ pngHref })).catch(err => { console.error(err); this.setState({ pngHref: null }); }); } render() { const source = getSource(this.props); const svgHref = _components.svg.btoa(source); return _react.default.createElement(_reactHelmet.default, { link: [...(this.state.pngHref ? [{ rel: "icon", href: this.state.pngHref, type: "image/png" }] : []), { rel: "icon", href: svgHref, type: "image/svg+xml" }] }); } } const StyledFavicon = (0, _components.styled)(FavIcon).withConfig({ displayName: "favicon__StyledFavicon" })(["width:100%;height:auto;stroke:", ";stroke-width:0;fill:", ";"], props => props.theme.colors.color, props => props.theme.colors.color); var _default = props => _react.default.createElement(StyledFavicon, props); exports.default = _default; function getSource(props) { if (!props.source) { return (0, _server.renderToStaticMarkup)(_react.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, _react.default.createElement(_components.Symbol, { definition: _components.IconDefinitions.patternplate, emit: true, style: { fill: getFill(props) } }))); } const _svg$purge = _components.svg.purge([_components.svg.parse(props.source)]), _svg$purge2 = _slicedToArray(_svg$purge, 1), purged = _svg$purge2[0]; return _components.svg.stringify(purged); } function getFill(props) { if (props.error) { return THEMES.dark.error; } return THEMES.dark.active; } //# sourceMappingURL=favicon.js.map