Files
30-seconds-of-code/node_modules/gatsby/cache-dir/commonjs/json-store.js
2019-08-20 15:52:05 +02:00

93 lines
3.2 KiB
JavaScript

"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _pageRenderer = _interopRequireDefault(require("./page-renderer"));
var _normalizePagePath = _interopRequireDefault(require("./normalize-page-path"));
var _gatsby = require("gatsby");
var _socketIo = require("./socketIo");
if (process.env.NODE_ENV === `production`) {
throw new Error(`It appears like Gatsby is misconfigured. JSONStore is Gatsby internal ` + `development-only component and should never be used in production.\n\n` + `Unless your site has a complex or custom webpack/Gatsby ` + `configuration this is likely a bug in Gatsby. ` + `Please report this at https://github.com/gatsbyjs/gatsby/issues ` + `with steps to reproduce this error.`);
}
const getPathFromProps = props => props.pageResources && props.pageResources.page ? (0, _normalizePagePath.default)(props.pageResources.page.path) : undefined;
class JSONStore extends _react.default.Component {
constructor(props) {
super(props);
(0, _defineProperty2.default)(this, "handleMittEvent", (type, event) => {
this.setState({
staticQueryData: (0, _socketIo.getStaticQueryData)(),
pageQueryData: (0, _socketIo.getPageQueryData)()
});
});
this.state = {
staticQueryData: (0, _socketIo.getStaticQueryData)(),
pageQueryData: (0, _socketIo.getPageQueryData)(),
path: null
};
}
componentDidMount() {
(0, _socketIo.registerPath)(getPathFromProps(this.props));
___emitter.on(`*`, this.handleMittEvent);
}
componentWillUnmount() {
(0, _socketIo.unregisterPath)(this.state.path);
___emitter.off(`*`, this.handleMittEvent);
}
static getDerivedStateFromProps(props, state) {
const newPath = getPathFromProps(props);
if (newPath !== state.path) {
(0, _socketIo.unregisterPath)(state.path);
(0, _socketIo.registerPath)(newPath);
return {
path: newPath
};
}
return null;
}
shouldComponentUpdate(nextProps, nextState) {
// We want to update this component when:
// - location changed
// - page data for path changed
// - static query results changed
return this.props.location !== nextProps.location || this.state.path !== nextState.path || this.state.pageQueryData[(0, _normalizePagePath.default)(nextState.path)] !== nextState.pageQueryData[(0, _normalizePagePath.default)(nextState.path)] || this.state.staticQueryData !== nextState.staticQueryData;
}
render() {
const data = this.state.pageQueryData[getPathFromProps(this.props)]; // eslint-disable-next-line
if (!data) {
return _react.default.createElement("div", null);
}
return _react.default.createElement(_gatsby.StaticQueryContext.Provider, {
value: this.state.staticQueryData
}, _react.default.createElement(_pageRenderer.default, (0, _extends2.default)({}, this.props, data)));
}
}
var _default = JSONStore;
exports.default = _default;