Skip to main content

Class: ControllerDecorator<S, R, SS>

@ima/core.ControllerDecorator

Decorator for page controllers. The decorator manages references to the meta attributes manager and other utilities so these can be easily provided to the decorated page controller when needed.

Type parameters

NameType
Sextends PageState = {}
Rextends RouteParams = {}
SSextends S = S

Hierarchy

Constructors

constructor

new ControllerDecorator<S, R, SS>(controller, metaManager, router, dictionary, settings)

Initializes the controller decorator.

Type parameters

NameType
Sextends PageState = {}
Rextends RouteParams = {}
SSextends PageState = S

Parameters

NameTypeDescription
controllerController<S, R, SS>The controller being decorated.
metaManagerMetaManagerThe meta page attributes manager.
routerRouterThe application router.
dictionaryDictionaryLocalization phrases dictionary.
settingsSettingsApplication settings for the current application environment.

Overrides

Controller.constructor

Defined in

packages/core/src/controller/ControllerDecorator.ts:54

Properties

_controller

Protected _controller: Controller<S, R, SS>

The controller being decorated.

Defined in

packages/core/src/controller/ControllerDecorator.ts:26


_dictionary

Protected _dictionary: Dictionary

Localization phrases dictionary.

Defined in

packages/core/src/controller/ControllerDecorator.ts:38


_metaManager

Protected _metaManager: MetaManager

The meta page attributes manager.

Defined in

packages/core/src/controller/ControllerDecorator.ts:30


_router

Protected _router: Router

The application router.

Defined in

packages/core/src/controller/ControllerDecorator.ts:34


_settings

Protected _settings: Settings

Application settings for the current application environment.

Defined in

packages/core/src/controller/ControllerDecorator.ts:42


$dependencies

Static $dependencies: Dependencies

Inherited from

Controller.$dependencies

Defined in

packages/core/src/controller/Controller.ts:44


$extensions

Static Optional $extensions: Dependencies<Extension<{}, {}, {}>>

Inherited from

Controller.$extensions

Defined in

packages/core/src/controller/Controller.ts:45


$name

Static Optional $name: string

Inherited from

Controller.$name

Defined in

packages/core/src/controller/Controller.ts:43

Methods

activate

activate(): void | Promise<void>

Callback for activating the controller in the UI. This is the last method invoked during controller initialization, called after all the promises returned from the load method have been resolved and the controller has configured the meta manager.

The controller may register any React and DOM event listeners in this method. The controller may start receiving event bus event after this method completes.

Returns

void | Promise<void>

Overrides

Controller.activate

Defined in

packages/core/src/controller/ControllerDecorator.ts:87


addExtension

addExtension(extension, extensionInstance?): void

Adds the provided extension to this controller. All extensions should be added to the controller before the init method is invoked.

Parameters

NameType
extensionkeyof OCAliasMap | Constructor<Extension<any, any, any>> | AbstractConstructor<Extension<any, any, any>> | Extension<PageState, RouteParams, PageState>
extensionInstance?Extension<PageState, RouteParams, PageState>

Returns

void

Overrides

Controller.addExtension

Defined in

packages/core/src/controller/ControllerDecorator.ts:150


beginStateTransaction

beginStateTransaction(): void

Starts queueing state patches off the controller state. While the transaction is active every setState call has no effect on the current state.

Note that call to getState after the transaction has begun will return state as it was before the transaction.

Returns

void

Overrides

Controller.beginStateTransaction

Defined in

packages/core/src/controller/ControllerDecorator.ts:129


cancelStateTransaction

cancelStateTransaction(): void

Cancels ongoing state transaction. Uncommitted state changes are lost.

Returns

void

Overrides

Controller.cancelStateTransaction

Defined in

packages/core/src/controller/ControllerDecorator.ts:143


commitStateTransaction

commitStateTransaction(): void

Applies queued state patches to the controller state. All patches are squashed and applied with one setState call.

Returns

void

Overrides

Controller.commitStateTransaction

Defined in

packages/core/src/controller/ControllerDecorator.ts:136


deactivate

deactivate(): void | Promise<void>

Callback for deactivating the controller in the UI. This is the first method invoked during controller deinitialization. This usually happens when the user navigates to a different URL.

This method is the lifecycle counterpart of the activate method.

The controller should deregister listeners registered and release all resources obtained in the activate method.

Returns

void | Promise<void>

Overrides

Controller.deactivate

Defined in

packages/core/src/controller/ControllerDecorator.ts:94


destroy

destroy(): void | Promise<void>

Finalization callback, called when the controller is being discarded by the application. This usually happens when the user navigates to a different URL.

This method is the lifecycle counterpart of the init method.

The controller should release all resources obtained in the init method. The controller must release any resources that might not be released automatically when the controller's instance is destroyed by the garbage collector.

Returns

void | Promise<void>

Overrides

Controller.destroy

Defined in

packages/core/src/controller/ControllerDecorator.ts:80


getExtension

getExtension(extension): undefined | Extension<PageState, RouteParams, PageState>

Returns extension instance defined by it's class constructor from controller's extension intance map.

Parameters

NameType
extensiontypeof Extension

Returns

undefined | Extension<PageState, RouteParams, PageState>

Overrides

Controller.getExtension

Defined in

packages/core/src/controller/ControllerDecorator.ts:164


getExtensions

getExtensions(): Extension<{}, {}, {}>[]

Returns the controller's extensions.

Returns

Extension<{}, {}, {}>[]

The extensions added to this controller.

Overrides

Controller.getExtensions

Defined in

packages/core/src/controller/ControllerDecorator.ts:173


getHttpStatus

getHttpStatus(): number

Returns the HTTP status code to send to the client, should the controller be used at the server-side.

Returns

number

The HTTP status code to send to the client.

Overrides

Controller.getHttpStatus

Defined in

packages/core/src/controller/ControllerDecorator.ts:214


getMetaManager

getMetaManager(): MetaManager

Returns the meta attributes manager configured by the decorated controller.

Returns

MetaManager

The Meta attributes manager configured by the decorated controller.

Defined in

packages/core/src/controller/ControllerDecorator.ts:225


getRouteParams

getRouteParams(): R

Returns the current route parameters.

Returns

R

The current route parameters.

Overrides

Controller.getRouteParams

Defined in

packages/core/src/controller/ControllerDecorator.ts:200


getState

getState(): SS

Returns the controller's current state.

Returns

SS

The current state of this controller.

Overrides

Controller.getState

Defined in

packages/core/src/controller/ControllerDecorator.ts:122


init

init(): void | Promise<void>

Callback for initializing the controller after the route parameters have been set on this controller.

Returns

void | Promise<void>

Overrides

Controller.init

Defined in

packages/core/src/controller/ControllerDecorator.ts:73


load

load(): S | Promise<S>

Callback the controller uses to request the resources it needs to render its view. This method is invoked after the init method.

The controller should request all resources it needs in this method, and represent each resource request as a promise that will resolve once the resource is ready for use (these can be data fetched over HTTP(S), database connections, etc).

The method must return a plain flat object. The field names of the object identify the resources being fetched and prepared, each value must be either the resource (e.g. view configuration or a value retrieved synchronously) or a Promise that will resolve to the resource.

The IMA will use the object to set the state of the controller.

If at the server side, the IMA will wait for all the promises to resolve, replaces the promises with the resolved values and sets the resulting object as the controller's state.

If at the client side, the IMA will first set the controller's state to an object containing only the fields of the returned object that were not promises. IMA will then update the controller's state every time a promise of the returned object resolves. IMA will update the state by adding the resolved resource to the controller's state.

Any returned promise that gets rejected will redirect the application to the error page. The error page that will be used depends on the status code of the error.

Returns

S | Promise<S>

A map object of promises resolved when all resources the controller requires are ready. The resolved values will be pushed to the controller's state.

Overrides

Controller.load

Defined in

packages/core/src/controller/ControllerDecorator.ts:101


setMetaParams

setMetaParams(loadedResources): void

Callback used to configure the meta attribute manager. The method is called after the the controller's state has been patched with the all loaded resources and the view has been rendered.

Parameters

NameTypeDescription
loadedResourcesIntersection<Partial<Pick<SS, Matching<SS, Promise<any>>>>, Required<Pick<SS, NonMatching<SS, Promise<any>>>>>A plain object representing a map of resource names to resources loaded by the load method. This is the same object as the one passed to the setState method.

Returns

void

Overrides

Controller.setMetaParams

Defined in

packages/core/src/controller/ControllerDecorator.ts:180


setPageStateManager

setPageStateManager(pageStateManager?): void

Sets the page state manager. The page state manager manages the controller's state. The state manager can be set to null if this controller loses the right to modify the state of the current page (e.g. the user has navigated to a different route using a different controller).

Parameters

NameTypeDescription
pageStateManager?PageStateManager<SS>The current state manager to use.

Returns

void

Overrides

Controller.setPageStateManager

Defined in

packages/core/src/controller/ControllerDecorator.ts:207


setRouteParams

setRouteParams(params?): void

Sets the current route parameters. This method is invoked before the init method.

Parameters

NameTypeDescription
paramsRThe current route parameters.

Returns

void

Overrides

Controller.setRouteParams

Defined in

packages/core/src/controller/ControllerDecorator.ts:193


setState

setState<K>(statePatch): void

Patches the state of this controller using the provided object by copying the provided patch object fields to the controller's state object.

You can use this method to modify the state partially or add new fields to the state object.

Note that the state is not patched recursively but by replacing the values of the top-level fields of the state object.

Once the promises returned by the load method are resolved, this method is called with the an object containing the resolved values. The field names of the passed object will match the field names in the object returned from the load method.

Type parameters

NameType
Kextends string | number | symbol

Parameters

NameTypeDescription
statePatchnull | S | Pick<S, K>Patch of the controller's state to apply.

Returns

void

Overrides

Controller.setState

Defined in

packages/core/src/controller/ControllerDecorator.ts:115


update

update(prevParams?): S | Promise<S>

Callback for updating the controller after a route update. This method is invoked if the current route has the onlyUpdate flag set to true and the current controller and view match those used by the previously active route, or, the onlyUpdate option of the current route is a callback and returned true.

The method must return an object with the same semantics as the result of the load method. The controller's state will only be patched by the returned object instead of replacing it completely.

The other controller lifecycle callbacks (init, load, activate, deactivate, Controller#deinit) are not call in case this method is used.

Parameters

NameTypeDescription
prevParamsRPrevious route parameters.

Returns

S | Promise<S>

A map object of promises resolved when all resources the controller requires are ready. The resolved values will be pushed to the controller's state.

Overrides

Controller.update

Defined in

packages/core/src/controller/ControllerDecorator.ts:108