UNPKG

1.5 kBJavaScriptView Raw
1import mapKeys from 'lodash/fp/mapKeys';
2import React from 'react';
3import ReactDOM from 'react-dom';
4
5const DefaultProvider = props => props.children;
6
7const link = (Provider, Component) => (scope, element, attrs) => {
8 const update = vTree => {
9 ReactDOM.render(vTree, element[0]);
10 };
11
12 const refresh = (context = {}, props = {}) => {
13 const vTree = React.createElement(
14 Provider,
15 context,
16 React.createElement(Component, props)
17 );
18
19 update(vTree);
20 };
21
22 scope.$watch('context', () => refresh(scope.context, scope.props), true);
23 scope.$watch('props', () => refresh(scope.context, scope.props), true);
24
25 scope.$on('$destroy', () => window.angular.element(element).remove());
26};
27
28const createDirective = (app, componentName, Provider, Component) => {
29 const directive = () => {
30 return {
31 restrict: 'E',
32 link: link(Provider, Component),
33 scope: {
34 props: '=',
35 context: '='
36 }
37 };
38 };
39
40 app.directive(componentName, [directive]);
41};
42
43/**
44 * examples :
45 * <slide value="slideContent"></slide>
46 * <module-bubble value="modData()"></module-bubble>
47 */
48const createDirectives = (app, Provider, components) => {
49 const toDirective = key => {
50 const componentName = `coorp${key}`;
51 const Component = components[key];
52 createDirective(app, componentName, Provider || DefaultProvider, Component);
53 };
54
55 return mapKeys(toDirective, components);
56};
57
58export default createDirectives;
59//# sourceMappingURL=index.js.map
\No newline at end of file