"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const react_1 = tslib_1.__importStar(require("react"));
const frontend_global_components_1 = tslib_1.__importDefault(require("@oak/frontend-global-components"));
const frontend_global_components_runtime_1 = require("@oak/frontend-global-components-runtime");
const ErrorBoundary = (0, react_1.lazy)(() => Promise.resolve().then(() => tslib_1.__importStar(require('./ErrorBoundary'))));
const AppContainer = (props) => {
    const { children, messageHandler } = props;
    const globalComponents = (0, react_1.useMemo)(() => {
        if (!messageHandler) {
            return frontend_global_components_1.default;
        }
        return frontend_global_components_1.default.map((entry) => {
            if (entry.name !== 'oak-message') {
                return entry;
            }
            const MessageComponent = entry.Component;
            return {
                ...entry,
                Component: () => <MessageComponent messageHandler={messageHandler}/>,
            };
        });
    }, [messageHandler]);
    return (<react_1.default.Fragment>
            {(0, frontend_global_components_runtime_1.renderOakFrontendGlobalComponents)(globalComponents, process.env.NODE_ENV)}
            <react_1.default.Suspense fallback={<></>}>
                <ErrorBoundary>
                    {children}
                </ErrorBoundary>
            </react_1.default.Suspense>
        </react_1.default.Fragment>);
};
exports.default = AppContainer;
