124 lines
3.8 KiB
JavaScript
124 lines
3.8 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
||
|
|
||
|
exports.__esModule = true;
|
||
|
exports.StaticQueryStore = exports.PageQueryStore = void 0;
|
||
|
|
||
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
||
|
|
||
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
||
|
|
||
|
var _react = _interopRequireDefault(require("react"));
|
||
|
|
||
|
var _gatsby = require("gatsby");
|
||
|
|
||
|
var _socketIo = require("./socketIo");
|
||
|
|
||
|
var _pageRenderer = _interopRequireDefault(require("./page-renderer"));
|
||
|
|
||
|
var _normalizePagePath = _interopRequireDefault(require("./normalize-page-path"));
|
||
|
|
||
|
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 PageQueryStore extends _react.default.Component {
|
||
|
constructor(props) {
|
||
|
super(props);
|
||
|
(0, _defineProperty2.default)(this, "handleMittEvent", () => {
|
||
|
this.setState({
|
||
|
pageQueryData: (0, _socketIo.getPageQueryData)()
|
||
|
});
|
||
|
});
|
||
|
this.state = {
|
||
|
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
|
||
|
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)];
|
||
|
}
|
||
|
|
||
|
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(_pageRenderer.default, (0, _extends2.default)({}, this.props, data));
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
exports.PageQueryStore = PageQueryStore;
|
||
|
|
||
|
class StaticQueryStore extends _react.default.Component {
|
||
|
constructor(props) {
|
||
|
super(props);
|
||
|
(0, _defineProperty2.default)(this, "handleMittEvent", () => {
|
||
|
this.setState({
|
||
|
staticQueryData: (0, _socketIo.getStaticQueryData)()
|
||
|
});
|
||
|
});
|
||
|
this.state = {
|
||
|
staticQueryData: (0, _socketIo.getStaticQueryData)()
|
||
|
};
|
||
|
}
|
||
|
|
||
|
componentDidMount() {
|
||
|
___emitter.on(`*`, this.handleMittEvent);
|
||
|
}
|
||
|
|
||
|
componentWillUnmount() {
|
||
|
___emitter.off(`*`, this.handleMittEvent);
|
||
|
}
|
||
|
|
||
|
shouldComponentUpdate(nextProps, nextState) {
|
||
|
// We want to update this component when:
|
||
|
// - static query results changed
|
||
|
return this.state.staticQueryData !== nextState.staticQueryData;
|
||
|
}
|
||
|
|
||
|
render() {
|
||
|
return _react.default.createElement(_gatsby.StaticQueryContext.Provider, {
|
||
|
value: this.state.staticQueryData
|
||
|
}, this.props.children);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
exports.StaticQueryStore = StaticQueryStore;
|