@hackoregon/mock-wrapper
Version:
A simple way to wrap a project as if it is in a year package
112 lines (97 loc) • 4.45 kB
JavaScript
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
import React from "react";
import { Global } from "@emotion/core";
import PropTypes from "prop-types";
import { render } from "react-dom";
import { createStore, applyMiddleware } from "redux";
import thunk from "redux-thunk";
import { syncHistoryWithStore, routerMiddleware } from "react-router-redux";
import { Provider } from "react-redux";
import { Router, browserHistory } from "react-router";
import { composeWithDevTools } from "redux-devtools-extension";
import { CardDetailPage, CardDetailPageEmbed, BrandTheme } from "@hackoregon/component-library";
import Registry from "./utils/registry";
import RootPageDefault from "./components/RootPage";
export default function MockWrapper(App, Reducers) {
var Routes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {
return [];
};
var CardRegistry = arguments.length > 3 ? arguments[3] : undefined;
var middlewares = [thunk, routerMiddleware(browserHistory)];
var store = createStore(Reducers(), {}, composeWithDevTools(applyMiddleware.apply(void 0, middlewares)));
store.asyncReducers = {};
if (module.hot) {
module.hot.accept("./index.js", function () {
var nextRootReducer = Reducers(store.asyncReducers);
store.replaceReducer(nextRootReducer);
});
}
var history = syncHistoryWithStore(browserHistory, store, {
selectLocationState: function selectLocationState(state) {
return state.routing;
}
});
var rootRoute = {
path: "/",
component: RootPageDefault,
indexRoute: {
component: App
},
childRoutes: _toConsumableArray(Routes(store))
};
if (CardRegistry) {
var CardRegistryClass = new Registry(CardRegistry);
var CardDetailWrapper = function CardDetailWrapper(_ref) {
var params = _ref.params;
return React.createElement(React.Fragment, null, React.createElement(Global, {
styles: BrandTheme
}), React.createElement(CardDetailPage, {
params: params,
CardRegistry: CardRegistryClass
}));
};
CardDetailWrapper.propTypes = {
params: PropTypes.shape({
slug: PropTypes.string.isRequired
}).isRequired
};
var CardDetailEmbedWrapper = function CardDetailEmbedWrapper(_ref2) {
var params = _ref2.params;
return React.createElement(React.Fragment, null, React.createElement(Global, {
styles: BrandTheme
}), React.createElement(CardDetailPageEmbed, {
params: params,
CardRegistry: CardRegistryClass
}));
};
CardDetailEmbedWrapper.propTypes = {
params: PropTypes.shape({
slug: PropTypes.string.isRequired
}).isRequired
};
var cardDetailRoute = {
path: "cards/:slug",
component: CardDetailWrapper
};
var cardDetailEmbedRoute = {
path: "cards/:slug/embed(/:layout)",
component: CardDetailEmbedWrapper
};
rootRoute.childRoutes.push(cardDetailRoute);
rootRoute.childRoutes.push(cardDetailEmbedRoute);
}
var Wrapper = function Wrapper() {
return React.createElement(Provider, {
store: store
}, React.createElement(Router, {
history: history,
routes: rootRoute
}));
};
render(React.createElement(Wrapper, null), document.getElementById("content"));
}