clay / amphora

Middleware for Express that composes components into renderable pages
https://claycms.gitbooks.io/amphora/
MIT License
31 stars 23 forks source link

Pre-Render Hook #623

Open jonwinton opened 5 years ago

jonwinton commented 5 years ago

Idea: preRender hook in model.js

Purpose: Sets context of request by providing a context specific object which components can attach data to. This would then be passed into the render function to basically allow context specific data to be shared across components.

Good use case: we want specific ad injection logic defined on the layout level to be respected by an article. A component in the layout contains the specification of the logic, attaches it to ctx, and then the article can read it. Also ,maybe some dedupe logic in feeds?

Example:

module.exports.beforeRender = (uri, data) => {
    return {foo: 'bar'};
}

module.exports.render = (uri, data, locals, ctx) => {
    data.foo = ctx.foo;
    return data;
}

Not settled, but just putting something down.

jonwinton commented 5 years ago

Updating this for the naming. Should be called beforeRender.

"also minor side point: I think beforeRender is a better name because it's a more conventional name for a lifecycle hook; prerender is a verb; before/after/on are events" - @rmfarrell

jonwinton commented 5 years ago

Testing this in Amphora now and will post the branch when it's ready.