You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
2.3 KiB
49 lines
2.3 KiB
4 months ago
|
import { __assign } from "tslib";
|
||
|
import * as React from "rehackt";
|
||
|
import { getApolloContext } from "../context/index.js";
|
||
|
import { RenderPromises } from "./RenderPromises.js";
|
||
|
import { renderToStaticMarkup } from "react-dom/server";
|
||
|
export function getDataFromTree(tree, context) {
|
||
|
if (context === void 0) { context = {}; }
|
||
|
return getMarkupFromTree({
|
||
|
tree: tree,
|
||
|
context: context,
|
||
|
// If you need to configure this renderFunction, call getMarkupFromTree
|
||
|
// directly instead of getDataFromTree.
|
||
|
renderFunction: renderToStaticMarkup,
|
||
|
});
|
||
|
}
|
||
|
export function getMarkupFromTree(_a) {
|
||
|
var tree = _a.tree, _b = _a.context, context = _b === void 0 ? {} : _b,
|
||
|
// The rendering function is configurable! We use renderToStaticMarkup as
|
||
|
// the default, because it's a little less expensive than renderToString,
|
||
|
// and legacy usage of getDataFromTree ignores the return value anyway.
|
||
|
_c = _a.renderFunction,
|
||
|
// The rendering function is configurable! We use renderToStaticMarkup as
|
||
|
// the default, because it's a little less expensive than renderToString,
|
||
|
// and legacy usage of getDataFromTree ignores the return value anyway.
|
||
|
renderFunction = _c === void 0 ? renderToStaticMarkup : _c;
|
||
|
var renderPromises = new RenderPromises();
|
||
|
function process() {
|
||
|
// Always re-render from the rootElement, even though it might seem
|
||
|
// better to render the children of the component responsible for the
|
||
|
// promise, because it is not possible to reconstruct the full context
|
||
|
// of the original rendering (including all unknown context provider
|
||
|
// elements) for a subtree of the original component tree.
|
||
|
var ApolloContext = getApolloContext();
|
||
|
return new Promise(function (resolve) {
|
||
|
var element = React.createElement(ApolloContext.Provider, { value: __assign(__assign({}, context), { renderPromises: renderPromises }) }, tree);
|
||
|
resolve(renderFunction(element));
|
||
|
})
|
||
|
.then(function (html) {
|
||
|
return renderPromises.hasPromises() ?
|
||
|
renderPromises.consumeAndAwaitPromises().then(process)
|
||
|
: html;
|
||
|
})
|
||
|
.finally(function () {
|
||
|
renderPromises.stop();
|
||
|
});
|
||
|
}
|
||
|
return Promise.resolve().then(process);
|
||
|
}
|
||
|
//# sourceMappingURL=getDataFromTree.js.map
|