respond-framework
Version:
create as fast you think
41 lines (39 loc) • 1.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = render;
var React = require("react");
var _reactNative = require("react-native");
var _client = require("react-dom/client");
var _constants = require("../helpers/constants.js");
var _Provider = require("./Provider.js");
function render(props = {}, opts = {}) {
const app = createApp(this, props, opts.last);
if (_constants.isTest) return app;else if (!_constants.isNative) renderWeb(app, this.mem, this);else renderNative(app, this.mem);
}
const createApp = (respond, props, last) => {
if (last) respond.state.replayTools.playing = false; // optimization, so additional render isn't queued after main render -- see replayEvents.js
respond.mem.rendered = true;
respond.mem.props ??= props;
const state = respond.proxify();
const Provider = props.Provider || state.components?.Provider || _Provider.default;
return /*#__PURE__*/React.createElement(Provider, {
state,
...respond.mem.props
});
};
const renderWeb = (app, mem, respond) => {
const el = document.getElementById('root');
if (respond.state.options.unmountOnReplays) {
if (mem.app) mem.app.unmount();
mem.app = (0, _client.createRoot)(el);
} else mem.app ??= (0, _client.createRoot)(el);
mem.app.render(app);
};
const renderNative = (app, {
props
}) => {
_reactNative.AppRegistry.registerComponent(props.appName, () => () => app);
_reactNative.AppRegistry.runApplication(props.appName, props.appParams);
};