Creating a module
A module is a set of functions for creating components, stores and/or events.
This ensures just the definitions will be shared without the overhead of bundling the FicusJS runtime.
Modules should be minified to optimise load.
A single Javascript file exports a named object module exposing a create method.
The shared module create method will be invoked by the use function in the context of the running application and is passed a single object argument.
It is the responsibility of the create method to use the object argument to create components, stores or events (anything required by the module).
// Export a module object that is invoked by the `use` function export const module = { create (helpers) { // create stuff here } }Async create method
You can return a Promise from the create method that contains async operations.
// use async/await export const module = { async create (helpers) { await asyncFunction() } } // return a Promise export const module = { create (helpers) { return asyncFunction() } }If returning a Promise, the calling module must handle the response before continuing execution.
When using the all features build
When using the all features build dist/index.mjs, the helpers object will contain the following properties.
| Property | Type | Description |
|---|---|---|
createComponent | function | The createComponent function |
renderer | function | The renderer function for component rendering |
createEventBus | function | The createEventBus function |
createPersist | function | The createPersist function |
createStore | function | The createStore function |
getEventBus | function | The getEventBus function |
getStore | function | The getStore function |
use | function | The use for loading modules internally |
Additional arguments provided in the helpers object will be passed to the module. For example; the html tagged template literal can be passed for module components to return HTML content.
// Export a module object that is invoked by the `use` function export const module = { create (helpers) { // create stuff here } }The following example creates a component, a store and imports another module for use internally.
import { module as anotherModule } from './path/to/another-module.esm.js' function createSharedComponent (renderer, html, getStore) { return { renderer, store: getStore('test.store'), render () { if (this.store.state.hideComponent) { return '' } return html`<span>Shared component</span>` } } } // Export a module object that is invoked by the `use` function export const module = { create ({ createComponent, renderer, html, createStore, getStore, use }) { // create stores createStore('test.store', { /* store options */ }) // create components createComponent('shared-component', createSharedComponent(renderer, html, getStore)) // import and use another module use(anotherModule, { renderer, html }) } }When using the component build only
When using the component only dist/component.mjs without stores and events, the helpers object argument will contain the following properties:
| Property | Type | Description |
|---|---|---|
createComponent | function | The createComponent function |
renderer | function | The renderer function for component rendering |
use | function | The use function for loading modules internally |
Additional arguments provided in the helpers object will be passed to the module. For example; the html tagged template literal can be passed for module components to return HTML content.
// Export a module object that is invoked by the `use` function export const module = { create (helpers) { // create components here } }