A plugin to expose & add related documents with shared tags for a given document to a view-model or other object.
npm install --save @uttori/plugin-vm-related-documents
There must be a plugin registered with the hooks to listen for a storage-query
event and respond with an array containing documents matching the query.
{
// Registration Events
events: {
callback: ['view-model-home'],
},
// Key to use in the view model
key: 'relatedDocuments',
// Number of documents to return.
limit: 10,
// A list of slugs to ignore
ignore_slugs: [],
}
Uttori View Model Enrichment - Related Documents
Kind: global class
- ViewModelRelatedDocuments
- .configKey ⇒
string
- .defaultConfig() ⇒
object
- .validateConfig(config, _context)
- .register(context)
- .callback(viewModel, context) ⇒
Promise.<object>
- .configKey ⇒
The configuration key for plugin to look for in the provided configuration.
Kind: static property of ViewModelRelatedDocuments
Returns: string
- The configuration key.
Example (ViewModelRelatedDocuments.configKey)
const config = { ...ViewModelRelatedDocuments.defaultConfig(), ...context.config[ViewModelRelatedDocuments.configKey] };
The default configuration.
Kind: static method of ViewModelRelatedDocuments
Returns: object
- The configuration.
Example (ViewModelRelatedDocuments.defaultConfig())
const config = { ...ViewModelRelatedDocuments.defaultConfig(), ...context.config[ViewModelRelatedDocuments.configKey] };
Validates the provided configuration for required entries.
Kind: static method of ViewModelRelatedDocuments
Param | Type | Description |
---|---|---|
config | object |
A configuration object. |
config.configKey | object |
A configuration object specifically for this plugin. |
config.configKey.key | string |
The that will be added to the passed in object and returned with the related documents. |
config.configKey.limit | string |
The maximum number of documents to be returned. |
_context | object |
A Uttori-like context (unused). |
Example (ViewModelRelatedDocuments.validateConfig(config, _context))
ViewModelRelatedDocuments.validateConfig({ ... });
Register the plugin with a provided set of events on a provided Hook system.
Kind: static method of ViewModelRelatedDocuments
Param | Type | Description |
---|---|---|
context | object |
A Uttori-like context. |
context.config | object |
A provided configuration to use. |
context.config.events | object |
An object whose keys correspong to methods, and contents are events to listen for. |
context.hooks | object |
An event system / hook system to use. |
context.hooks.on | function |
An event registration function. |
Example (ViewModelRelatedDocuments.register(context))
const context = {
hooks: {
on: (event, callback) => { ... },
},
config: {
[ViewModelRelatedDocuments.configKey]: {
...,
events: {
callback: ['document-save', 'document-delete'],
validateConfig: ['validate-config'],
},
},
},
};
ViewModelRelatedDocuments.register(context);
Queries for related documents based on similar tags and searches the storage provider.
Kind: static method of ViewModelRelatedDocuments
Returns: Promise.<object>
- The provided view-model document.
Param | Type | Description |
---|---|---|
viewModel | object |
A Uttori view-model object. |
viewModel.document | object |
A Uttori document object. |
viewModel.document.tags | Array.<string> |
An array of tags to compare against. |
context | object |
A Uttori-like context. |
context.config | object |
A provided configuration to use. |
context.config.key | string |
The key to add the array of documents to on the view-model. |
context.config.limit | number |
The maximum number of documents to return. |
context.config.ignore_slugs | Array.<string> |
A list of slugs to not consider when fetching related documents. |
context.hooks | object |
An event system / hook system to use. |
context.hooks.on | function |
An event registration function. |
context.hooks.fetch | function |
An event dispatch function that returns an array of results. |
Example (ViewModelRelatedDocuments.callback(viewModel, context))
const context = {
config: {
[ViewModelRelatedDocuments.configKey]: {
...,
},
},
hooks: {
on: (event) => { ... },
fetch: (event, query) => { ... },
},
};
ViewModelRelatedDocuments.callback(viewModel, context);
To run the test suite, first install the dependencies, then run npm test
:
npm install
npm test
DEBUG=Uttori* npm test