UNPKG

@shopify/react-html

Version:

A component to render your React app with no static HTML

58 lines (51 loc) 1.99 kB
'use strict'; 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;