UNPKG

909 BJavaScriptView Raw
1import map from 'lodash/fp/map';
2import toPairs from 'lodash/fp/toPairs';
3import kebabCase from 'lodash/fp/kebabCase';
4import {createElement} from 'react';
5import {renderToStaticMarkup} from 'react-dom/server';
6
7const DefaultProvider = ({children}) => children;
8
9const toHelpers = (components, Provider = DefaultProvider) => {
10 const toHelper = ([componentName, Component]) => {
11 return (dust, options) => {
12 dust.helpers[kebabCase(componentName)] = (chunk, context, bodies, props) => {
13 const providerPropsAttribute = props.context;
14 const providerProps = providerPropsAttribute ? context.get(providerPropsAttribute) : {};
15
16 const html = renderToStaticMarkup(
17 createElement(Provider, providerProps, createElement(Component, props))
18 );
19
20 chunk.write(html);
21 };
22 };
23 };
24
25 return map(toHelper, toPairs(components));
26};
27
28export default toHelpers;