You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							104 lines
						
					
					
						
							3.6 KiB
						
					
					
				
			
		
		
	
	
							104 lines
						
					
					
						
							3.6 KiB
						
					
					
				"use strict";
 | 
						|
 | 
						|
Object.defineProperty(exports, "__esModule", {
 | 
						|
  value: true
 | 
						|
});
 | 
						|
exports.default = void 0;
 | 
						|
exports.getComponentHtml = getComponentHtml;
 | 
						|
 | 
						|
var _react = _interopRequireDefault(require("react"));
 | 
						|
 | 
						|
var _server = require("react-dom/server");
 | 
						|
 | 
						|
var _styledComponents = require("styled-components");
 | 
						|
 | 
						|
var _reactRedux = require("react-redux");
 | 
						|
 | 
						|
var _reactI18next = require("react-i18next");
 | 
						|
 | 
						|
var _designSystem = require("@adminjs/design-system");
 | 
						|
 | 
						|
var _i18next = _interopRequireDefault(require("i18next"));
 | 
						|
 | 
						|
var _optionsParser = require("../../../backend/utils/options-parser/options-parser");
 | 
						|
 | 
						|
var _viewHelpers = _interopRequireDefault(require("../../../backend/utils/view-helpers/view-helpers"));
 | 
						|
 | 
						|
var _initializeAssets = require("../../../frontend/store/actions/initialize-assets");
 | 
						|
 | 
						|
var _initializeBranding = require("../../../frontend/store/actions/initialize-branding");
 | 
						|
 | 
						|
var _initializeLocale = require("../../../frontend/store/actions/initialize-locale");
 | 
						|
 | 
						|
var _store = _interopRequireDefault(require("../../../frontend/store/store"));
 | 
						|
 | 
						|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 | 
						|
 | 
						|
async function getComponentHtml(Component, props, admin) {
 | 
						|
  const h = new _viewHelpers.default({
 | 
						|
    options: admin.options
 | 
						|
  });
 | 
						|
  const store = (0, _store.default)();
 | 
						|
  const branding = await (0, _optionsParser.getBranding)(admin);
 | 
						|
  const assets = await (0, _optionsParser.getAssets)(admin);
 | 
						|
  const faviconTag = (0, _optionsParser.getFaviconFromBranding)(branding);
 | 
						|
  const scripts = (assets && assets.scripts || []).map(s => `<script src="${s}"></script>`);
 | 
						|
  const styles = (assets && assets.styles || []).map(l => `<link rel="stylesheet" type="text/css" href="${l}">`);
 | 
						|
  store.dispatch((0, _initializeBranding.initializeBranding)(branding));
 | 
						|
  store.dispatch((0, _initializeAssets.initializeAssets)(assets));
 | 
						|
  store.dispatch((0, _initializeLocale.initializeLocale)(admin.locale));
 | 
						|
  const theme = (0, _designSystem.combineStyles)(branding && branding.theme || {});
 | 
						|
  const {
 | 
						|
    locale
 | 
						|
  } = store.getState();
 | 
						|
 | 
						|
  _i18next.default.init({
 | 
						|
    resources: {
 | 
						|
      [locale.language]: {
 | 
						|
        translation: locale.translations
 | 
						|
      }
 | 
						|
    },
 | 
						|
    lng: locale.language,
 | 
						|
    interpolation: {
 | 
						|
      escapeValue: false
 | 
						|
    }
 | 
						|
  });
 | 
						|
 | 
						|
  const sheet = new _styledComponents.ServerStyleSheet();
 | 
						|
  const component = (0, _server.renderToString)( /*#__PURE__*/_react.default.createElement(_styledComponents.StyleSheetManager, {
 | 
						|
    sheet: sheet.instance
 | 
						|
  }, /*#__PURE__*/_react.default.createElement(_reactRedux.Provider, {
 | 
						|
    store: store
 | 
						|
  }, /*#__PURE__*/_react.default.createElement(_reactI18next.I18nextProvider, {
 | 
						|
    i18n: _i18next.default
 | 
						|
  }, /*#__PURE__*/_react.default.createElement(_styledComponents.ThemeProvider, {
 | 
						|
    theme: theme
 | 
						|
  }, /*#__PURE__*/_react.default.createElement(Component, props))))));
 | 
						|
  sheet.collectStyles( /*#__PURE__*/_react.default.createElement(Component, props));
 | 
						|
  const style = sheet.getStyleTags();
 | 
						|
  sheet.seal();
 | 
						|
  return `
 | 
						|
    <!DOCTYPE html>
 | 
						|
    <html>
 | 
						|
    <head>
 | 
						|
      <meta charset="utf-8">
 | 
						|
      <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
 | 
						|
      <title>${branding.companyName}</title>
 | 
						|
      ${style}
 | 
						|
      ${faviconTag}
 | 
						|
      <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,700" type="text/css">
 | 
						|
      ${styles.join('\n')}
 | 
						|
 | 
						|
      <script src="${h.assetPath('global.bundle.js', assets)}"></script>
 | 
						|
      <script src="${h.assetPath('design-system.bundle.js', assets)}"></script>
 | 
						|
    </head>
 | 
						|
    <body>
 | 
						|
      <div id="app">${component}</div>
 | 
						|
      ${scripts.join('\n')}
 | 
						|
    </body>
 | 
						|
    </html>
 | 
						|
  `;
 | 
						|
}
 | 
						|
 | 
						|
var _default = getComponentHtml;
 | 
						|
exports.default = _default; |