UNPKG

@shopify/react-html

Version:

A component to render your react app with no static HTML.

57 lines (56 loc) 2.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = tslib_1.__importDefault(require("react")); var react_effect_1 = require("@shopify/react-effect"); var context_1 = require("./context"); var hooks_1 = require("./hooks"); exports.EXTRACT_ID = Symbol('serialize'); function useSerialized(id) { var manager = react_1.default.useContext(context_1.HtmlContext); var data = react_1.default.useMemo(function () { return manager.getSerialization(id); }, [ id, manager, ]); var Serialize = react_1.default.useMemo(function () { return function Serialize(_a) { var data = _a.data; hooks_1.useServerDomEffect(function (manager) { var result = data(); var 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]; } exports.useSerialized = useSerialized; function createSerializer(id) { function Serialize(_a) { var data = _a.data; var manager = react_1.default.useContext(context_1.HtmlContext); react_effect_1.useServerEffect(function () { var result = data(); var handleResult = manager.setSerialization.bind(manager, id); return typeof result === 'object' && result != null && isPromise(result) ? result.then(handleResult) : handleResult(result); }, manager ? manager.effect : undefined); return null; } function WithSerialized(_a) { var children = _a.children; var manager = react_1.default.useContext(context_1.HtmlContext); return children(manager.getSerialization(id)); } return { Serialize: Serialize, WithSerialized: WithSerialized }; } exports.createSerializer = createSerializer; function isPromise(maybePromise) { return maybePromise != null && maybePromise.then != null; }