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
}
}