@ima/react-page-renderer
Version:
IMA.js React page renderer.
79 lines (78 loc) • 3.03 kB
JavaScript
import { PageRenderer } from '@ima/core';
import { createElement } from 'react';
import { BlankManagedRootView } from '../component/BlankManagedRootView';
import { ViewAdapter } from '../component/ViewAdapter';
/**
* Base class for implementations of the {@linkcode PageRenderer} interface.
*/ export class AbstractPageRenderer extends PageRenderer {
_dispatcher;
_factory;
_helpers;
_settings;
_viewAdapter;
_viewAdapterProps = {};
/**
* Initializes the abstract page renderer.
*
* @param factory Factory for receive $Utils to view.
* @param helpers The IMA.js helper methods.
* to render the page.
* @param dispatcher Dispatcher fires events to app.
* @param settings Application settings for the current
* application environment.
*/ constructor(factory, helpers, dispatcher, settings){
super();
/**
* Factory for receive $Utils to view.
*/ this._factory = factory;
/**
* The IMA.js helper methods.
*/ this._helpers = helpers;
/**
* Dispatcher fires events to app.
*/ this._dispatcher = dispatcher;
/**
* Application setting for the current application environment.
*/ this._settings = settings;
}
/**
* @inheritDoc
*/ _getViewAdapterElement(props = {}) {
if (this._viewAdapter) {
this._viewAdapterProps = Object.assign(this._viewAdapterProps, props);
return /*#__PURE__*/ createElement(this._viewAdapter, this._viewAdapterProps);
}
}
/**
* Generate properties for view from state.
*
* @param view The page view React component to wrap.
*/ _generateViewAdapterProps(managedRootView, pageView, state = {}) {
const props = {
$Utils: this._factory.getUtils(),
managedRootView,
pageView,
state
};
return props;
}
/**
* Returns wrapped page view component with managed root view and view adapter.
*
* @param routeOptions The current route options.
*/ _prepareViewAdapter(controller, pageView, routeOptions) {
const managedRootView = this._factory.getManagedRootView(routeOptions.managedRootView || this._settings.$Page.$Render.managedRootView || BlankManagedRootView);
const props = this._generateViewAdapterProps(managedRootView, pageView, Object.assign({}, controller.getState()));
this._viewAdapter = routeOptions.viewAdapter || this._settings.$Page.$Render.viewAdapter || ViewAdapter;
this._viewAdapterProps = Object.assign(this._viewAdapterProps, props);
}
/**
* Returns the class constructor of the specified document view component.
*
* @param routeOptions The current route options.
* @return The constructor of the document view component.
*/ _getDocumentView(routeOptions) {
return this._factory.getDocumentView(routeOptions.documentView || this._settings.$Page.$Render.documentView);
}
}
//# sourceMappingURL=AbstractPageRenderer.js.map