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(createElement(Provider, providerProps, createElement(Component, props)));
|
17 |
|
18 | chunk.write(html);
|
19 | };
|
20 | };
|
21 | };
|
22 |
|
23 | return map(toHelper, toPairs(components));
|
24 | };
|
25 |
|
26 | export default toHelpers;
|
27 |
|
\ | No newline at end of file |