@shopify/react-html
Version:
A component to render your React app with no static HTML
58 lines (51 loc) • 1.99 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var React = require('react');
var reactEffect = require('@shopify/react-effect');
var context = require('./context.js');
var hooks = require('./hooks.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
function useSerialized(id) {
const manager = React__default["default"].useContext(context.HtmlContext);
const data = React__default["default"].useMemo(() => manager.getSerialization(id), [id, manager]);
const Serialize = React__default["default"].useMemo(() => function Serialize({
data
}) {
hooks.useServerDomEffect(manager => {
const result = data();
const handleResult = manager.setSerialization.bind(manager, id);
return typeof result === 'object' && result != null && isPromise(result) ? result.then(handleResult) : handleResult(result);
});
return null;
}, [id]);
return [data, Serialize];
}
function createSerializer(id) {
function Serialize({
data
}) {
const manager = React__default["default"].useContext(context.HtmlContext);
reactEffect.useServerEffect(() => {
const result = data();
const handleResult = manager.setSerialization.bind(manager, id);
return typeof result === 'object' && result != null && isPromise(result) ? result.then(handleResult) : handleResult(result);
}, manager === null || manager === void 0 ? void 0 : manager.effect);
return null;
}
function WithSerialized({
children
}) {
const manager = React__default["default"].useContext(context.HtmlContext);
return children(manager.getSerialization(id));
}
return {
Serialize,
WithSerialized
};
}
function isPromise(maybePromise) {
return maybePromise != null && maybePromise.then != null;
}
exports.createSerializer = createSerializer;
exports.useSerialized = useSerialized;