@sketchpixy/rubix
Version:
Rubix Bootstrap
277 lines (209 loc) • 8.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _class, _temp;
exports.default = render;
exports.setRoutes = setRoutes;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
var _server = require('react-dom/server');
var _server2 = _interopRequireDefault(_server);
var _reactRouter = require('react-router');
var _reactHotLoader = require('react-hot-loader');
var _reactRouterScroll = require('react-router-scroll');
var _reactRouterScroll2 = _interopRequireDefault(_reactRouterScroll);
var _onRouterSetup = require('./onRouterSetup');
var _onRouterSetup2 = _interopRequireDefault(_onRouterSetup);
var _checkScroll = require('./checkScroll');
var _checkScroll2 = _interopRequireDefault(_checkScroll);
var _isBrowser = require('../isBrowser');
var _isBrowser2 = _interopRequireDefault(_isBrowser);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
if ((0, _isBrowser2.default)()) {
(0, _onRouterSetup2.default)();
}
var WrapperComponent = function (_React$Component) {
(0, _inherits3.default)(WrapperComponent, _React$Component);
function WrapperComponent() {
(0, _classCallCheck3.default)(this, WrapperComponent);
return (0, _possibleConstructorReturn3.default)(this, (0, _getPrototypeOf2.default)(WrapperComponent).apply(this, arguments));
}
(0, _createClass3.default)(WrapperComponent, [{
key: 'render',
value: function render() {
return this.props.children;
}
}]);
return WrapperComponent;
}(_react2.default.Component);
var isRouterSet = false,
history,
routes;
function getPreloadedDataElement() {
return document.getElementById('preloadedData');
}
function getData() {
var data = '';
if ((0, _isBrowser2.default)()) {
var preloadedData = getPreloadedDataElement();
data = preloadedData ? JSON.parse(preloadedData.textContent) : '';
}
return data;
}
function clearData() {
if ((0, _isBrowser2.default)()) {
var preloadedData = getPreloadedDataElement();
if (preloadedData) {
preloadedData.textContent = '';
}
}
}
var FetchData = function (_React$Component2) {
(0, _inherits3.default)(FetchData, _React$Component2);
function FetchData() {
var _Object$getPrototypeO;
(0, _classCallCheck3.default)(this, FetchData);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var _this2 = (0, _possibleConstructorReturn3.default)(this, (_Object$getPrototypeO = (0, _getPrototypeOf2.default)(FetchData)).call.apply(_Object$getPrototypeO, [this].concat(args)));
var context = args[1];
_this2.state = {
data: context.data || getData() || ""
};
return _this2;
}
(0, _createClass3.default)(FetchData, [{
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(nextProps) {
var _this3 = this;
if ((0, _isBrowser2.default)()) {
var component = nextProps.component;
if (component.fetchData) {
component.fetchData(this.props).then(function (result) {
_this3.setState({
data: result.data,
errors: result.errors
});
});
}
}
}
}, {
key: 'componentWillMount',
value: function componentWillMount() {
if ((0, _isBrowser2.default)()) {
// clear server data once rendered
clearData();
}
}
}, {
key: 'render',
value: function render() {
var _props = this.props;
var component = _props.component;
var routerProps = _props.routerProps;
var Component = component;
return _react2.default.createElement(Component, (0, _extends3.default)({}, routerProps, { data: this.state.data }));
}
}]);
return FetchData;
}(_react2.default.Component);
function onCreateElement(Component, routerProps) {
return _react2.default.createElement(FetchData, { component: Component, routerProps: routerProps });
}
function render(Component, onRender) {
if (!onRender) onRender = function onRender() {};
if ((0, _isBrowser2.default)()) {
// in browser
if (!isRouterSet) {
isRouterSet = true;
history = Modernizr.history ? _reactRouter.browserHistory : _reactRouter.hashHistory;
routes = _react2.default.createElement(
_reactRouter.Router,
{ history: history,
createElement: onCreateElement,
render: (0, _reactRouter.applyRouterMiddleware)((0, _reactRouterScroll2.default)(_checkScroll2.default)) },
Component
);
}
_reactDom2.default.render(_react2.default.createElement(
_reactHotLoader.AppContainer,
null,
_react2.default.createElement(
WrapperComponent,
null,
routes
)
), document.getElementById('app-container'), onRender);
}
}
var RoutingContextWrapper = (_temp = _class = function (_React$Component3) {
(0, _inherits3.default)(RoutingContextWrapper, _React$Component3);
function RoutingContextWrapper() {
(0, _classCallCheck3.default)(this, RoutingContextWrapper);
return (0, _possibleConstructorReturn3.default)(this, (0, _getPrototypeOf2.default)(RoutingContextWrapper).apply(this, arguments));
}
(0, _createClass3.default)(RoutingContextWrapper, [{
key: 'getChildContext',
value: function getChildContext() {
return {
data: this.props.data
};
}
}, {
key: 'render',
value: function render() {
return _react2.default.createElement(_reactRouter.RouterContext, this.props.renderProps);
}
}]);
return RoutingContextWrapper;
}(_react2.default.Component), _class.childContextTypes = {
data: _react2.default.PropTypes.oneOfType([_react2.default.PropTypes.string, _react2.default.PropTypes.object])
}, _temp);
var StaticComponentInternal = function (_React$Component4) {
(0, _inherits3.default)(StaticComponentInternal, _React$Component4);
function StaticComponentInternal() {
(0, _classCallCheck3.default)(this, StaticComponentInternal);
return (0, _possibleConstructorReturn3.default)(this, (0, _getPrototypeOf2.default)(StaticComponentInternal).apply(this, arguments));
}
(0, _createClass3.default)(StaticComponentInternal, [{
key: 'render',
value: function render() {
var Handler = null,
props = this.props,
data = props.data || '""';
var location = this.props.path + (this.props.query ? '?' + this.props.query : '');
(0, _reactRouter.match)({ routes: routes, location: location }, function (error, redirectLocation, renderProps) {
Handler = _react2.default.createElement(
_reactHotLoader.AppContainer,
null,
_react2.default.createElement(RoutingContextWrapper, { data: data, renderProps: renderProps })
);
});
return Handler;
}
}]);
return StaticComponentInternal;
}(_react2.default.Component);
function setRoutes(_routes) {
routes = _routes;
}
if (!(0, _isBrowser2.default)()) {
global.StaticComponent = StaticComponentInternal;
}