UNPKG

react-on-rails

Version:

react-on-rails JavaScript for react_on_rails Ruby gem

39 lines (38 loc) 1.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = reactHydrateOrRender; const ReactDOM = require("react-dom"); const reactApis_1 = require("./reactApis"); // TODO: once React dependency is updated to >= 18, we can remove this and just // import ReactDOM from 'react-dom/client'; // eslint-disable-next-line @typescript-eslint/no-explicit-any let reactDomClient; if (reactApis_1.supportsRootApi) { // This will never throw an exception, but it's the way to tell Webpack the dependency is optional // https://github.com/webpack/webpack/issues/339#issuecomment-47739112 // Unfortunately, it only converts the error to a warning. try { // eslint-disable-next-line global-require,import/no-unresolved reactDomClient = require('react-dom/client'); } catch (e) { // We should never get here, but if we do, we'll just use the default ReactDOM // and live with the warning. reactDomClient = ReactDOM; } } const reactHydrate = reactApis_1.supportsRootApi ? reactDomClient.hydrateRoot : (domNode, reactElement) => ReactDOM.hydrate(reactElement, domNode); function reactRender(domNode, reactElement) { if (reactApis_1.supportsRootApi) { const root = reactDomClient.createRoot(domNode); root.render(reactElement); return root; } // eslint-disable-next-line react/no-render-return-value return ReactDOM.render(reactElement, domNode); } function reactHydrateOrRender(domNode, reactElement, hydrate) { return hydrate ? reactHydrate(domNode, reactElement) : reactRender(domNode, reactElement); }