UNPKG

@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
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")); }