@tdb/web
Version:
Common condiguration for serving a web-site and testing web-based UI components.
216 lines (183 loc) • 6.44 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime-corejs2/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createUrl = createUrl;
exports.Container = exports.default = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/extends"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _utils = require("./utils");
var _router = require("./router");
var App =
/*#__PURE__*/
function (_Component) {
(0, _inherits2.default)(App, _Component);
function App() {
(0, _classCallCheck2.default)(this, App);
return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(App).apply(this, arguments));
}
(0, _createClass2.default)(App, [{
key: "getChildContext",
value: function getChildContext() {
var headManager = this.props.headManager;
return {
headManager: headManager,
router: (0, _router.makePublicRouterInstance)(this.props.router)
};
} // Kept here for backwards compatibility.
// When someone ended App they could call `super.componentDidCatch`. This is now deprecated.
}, {
key: "componentDidCatch",
value: function componentDidCatch(err) {
throw err;
}
}, {
key: "render",
value: function render() {
var _this$props = this.props,
router = _this$props.router,
Component = _this$props.Component,
pageProps = _this$props.pageProps;
var url = createUrl(router);
return _react.default.createElement(Container, null, _react.default.createElement(Component, (0, _extends2.default)({}, pageProps, {
url: url
})));
}
}], [{
key: "getInitialProps",
value: function () {
var _getInitialProps = (0, _asyncToGenerator2.default)(
/*#__PURE__*/
_regenerator.default.mark(function _callee(_ref) {
var Component, router, ctx, pageProps;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
Component = _ref.Component, router = _ref.router, ctx = _ref.ctx;
_context.next = 3;
return (0, _utils.loadGetInitialProps)(Component, ctx);
case 3:
pageProps = _context.sent;
return _context.abrupt("return", {
pageProps: pageProps
});
case 5:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
return function getInitialProps(_x) {
return _getInitialProps.apply(this, arguments);
};
}()
}]);
return App;
}(_react.Component);
exports.default = App;
(0, _defineProperty2.default)(App, "childContextTypes", {
headManager: _propTypes.default.object,
router: _propTypes.default.object
});
var Container =
/*#__PURE__*/
function (_Component2) {
(0, _inherits2.default)(Container, _Component2);
function Container() {
(0, _classCallCheck2.default)(this, Container);
return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Container).apply(this, arguments));
}
(0, _createClass2.default)(Container, [{
key: "componentDidMount",
value: function componentDidMount() {
this.scrollToHash();
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate() {
this.scrollToHash();
}
}, {
key: "scrollToHash",
value: function scrollToHash() {
var hash = window.location.hash;
hash = hash ? hash.substring(1) : false;
if (!hash) return;
var el = document.getElementById(hash);
if (!el) return; // If we call scrollIntoView() in here without a setTimeout
// it won't scroll properly.
setTimeout(function () {
return el.scrollIntoView();
}, 0);
}
}, {
key: "render",
value: function render() {
return this.props.children;
}
}]);
return Container;
}(_react.Component);
exports.Container = Container;
var warnUrl = (0, _utils.execOnce)(function () {
if (process.env.NODE_ENV !== 'production') {
console.error("Warning: the 'url' property is deprecated. https://err.sh/zeit/next.js/url-deprecated");
}
});
function createUrl(router) {
// This is to make sure we don't references the router object at call time
var pathname = router.pathname,
asPath = router.asPath,
query = router.query;
return {
get query() {
warnUrl();
return query;
},
get pathname() {
warnUrl();
return pathname;
},
get asPath() {
warnUrl();
return asPath;
},
back: function back() {
warnUrl();
router.back();
},
push: function push(url, as) {
warnUrl();
return router.push(url, as);
},
pushTo: function pushTo(href, as) {
warnUrl();
var pushRoute = as ? href : null;
var pushUrl = as || href;
return router.push(pushRoute, pushUrl);
},
replace: function replace(url, as) {
warnUrl();
return router.replace(url, as);
},
replaceTo: function replaceTo(href, as) {
warnUrl();
var replaceRoute = as ? href : null;
var replaceUrl = as || href;
return router.replace(replaceRoute, replaceUrl);
}
};
}