gatsby-plugin-material-ui
Version:
Gatsby plugin for Material-UI with built-in server-side rendering support
66 lines (49 loc) • 2.3 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.onRenderBody = exports.wrapRootElement = void 0;
var _react = _interopRequireDefault(require("react"));
var _styles = require("@material-ui/styles");
var _cleanCss = _interopRequireDefault(require("clean-css"));
var _utils = require("./utils");
var _autoprefixer = _interopRequireDefault(require("./autoprefixer"));
var _stylesProviderProps = _interopRequireDefault(require("./.cache/styles-provider-props"));
// Keep track of sheets for each page
var globalLeak = new Map();
var cleanCSS = new _cleanCss["default"]();
var wrapRootElement = function wrapRootElement(_ref, pluginOptions) {
var element = _ref.element,
pathname = _ref.pathname;
if ((0, _utils.hasEntries)(_stylesProviderProps["default"]) && pluginOptions.stylesProvider) {
throw new Error("You specified both pathToStylesProvider and stylesProvider in gatsby-config.js. Remove one of them.");
}
var stylesProvider = (0, _utils.hasEntries)(_stylesProviderProps["default"]) ? _stylesProviderProps["default"] : pluginOptions.stylesProvider;
var sheets = new _styles.ServerStyleSheets(stylesProvider);
globalLeak.set(pathname, sheets);
return sheets.collect(element);
};
exports.wrapRootElement = wrapRootElement;
var onRenderBody = function onRenderBody(_ref2, _ref3) {
var setHeadComponents = _ref2.setHeadComponents,
pathname = _ref2.pathname;
var _ref3$disableAutopref = _ref3.disableAutoprefixing,
disableAutoprefixing = _ref3$disableAutopref === void 0 ? false : _ref3$disableAutopref,
_ref3$disableMinifica = _ref3.disableMinification,
disableMinification = _ref3$disableMinifica === void 0 ? false : _ref3$disableMinifica;
var sheets = globalLeak.get(pathname);
if (!sheets) {
return;
}
var css = sheets.toString();
css = disableAutoprefixing ? css : (0, _autoprefixer["default"])(css, pathname);
css = disableMinification ? css : cleanCSS.minify(css).styles;
setHeadComponents([_react["default"].createElement("style", {
id: "jss-server-side",
key: "jss-server-side",
dangerouslySetInnerHTML: {
__html: css
}
})]);
globalLeak["delete"](pathname);
};
exports.onRenderBody = onRenderBody;