1 | import map from 'lodash/fp/map';
|
2 | import toPairs from 'lodash/fp/toPairs';
|
3 | import kebabCase from 'lodash/fp/kebabCase';
|
4 | import {createElement} from 'react';
|
5 | import {renderToStaticMarkup} from 'react-dom/server';
|
6 |
|
7 | const DefaultProvider = ({children}) => children;
|
8 |
|
9 | const 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 |
|
28 | export default toHelpers;
|