Skip to content

Commit 51678d7

Browse files
committed
refactor: update to setIncorporator/useModules approach
1 parent 22b03eb commit 51678d7

File tree

4 files changed

+24
-13
lines changed

4 files changed

+24
-13
lines changed

example/index.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import xs from 'xstream';
22
import {createElement} from 'react';
33
import {render} from 'react-dom';
4-
import {setModules} from '../src/Modulizer'
5-
import {h, makeComponent} from '../src/index';
4+
import {h, makeComponent, useModules} from '../src/index';
65

76
function main(sources) {
87
const init$ = xs.of(() => 0);
@@ -42,7 +41,7 @@ function main(sources) {
4241

4342
const App = makeComponent(main);
4443

45-
setModules({
44+
useModules({
4645
domProps: {
4746
componentDidUpdate: (element, props) => {
4847
Object.entries(props).forEach(([key, val]) => {

src/h.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,24 @@ import {
66
ReactHTML,
77
Attributes,
88
} from 'react';
9-
import {incorporate} from './incorporate';
10-
import {hasModuleProps} from './Modulizer';
9+
import {incorporate, setIncorporator} from './incorporate';
10+
import {setModules, hasModuleProps, Modulizer} from './Modulizer';
11+
import Incorporator from './Incorporator';
1112

1213
export type PropsExtensions = {
1314
sel?: string | symbol;
1415
};
1516

17+
let shouldIncorporate = props => props.sel
18+
19+
export function useModules(modules: any) {
20+
if (!modules || typeof modules !== 'object') return
21+
22+
setModules(modules);
23+
shouldIncorporate = props => props.sel || hasModuleProps(props)
24+
setIncorporator(Modulizer)
25+
}
26+
1627
type PropsLike<P> = P & PropsExtensions & Attributes;
1728

1829
type Children = string | Array<ReactNode>;
@@ -33,7 +44,7 @@ function hyperscriptProps<P = any>(
3344
type: ReactType<P> | keyof ReactHTML,
3445
props: PropsLike<P>,
3546
): ReactElement<P> {
36-
if (!props.sel && !hasModuleProps(props)) {
47+
if (!shouldIncorporate(props)) {
3748
return createElement(type, props);
3849
} else {
3950
return createElement(incorporate(type), props);
@@ -52,7 +63,7 @@ function hyperscriptPropsChildren<P = any>(
5263
props: PropsLike<P>,
5364
children: Children,
5465
): ReactElement<P> {
55-
if (!props.sel && !hasModuleProps(props)) {
66+
if (!shouldIncorporate(props)) {
5667
return createElementSpreading(type, props, children);
5768
} else {
5869
return createElementSpreading(incorporate(type), props, children);

src/incorporate.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
import {createElement, forwardRef} from 'react';
22
import {Scope} from './scope';
33
import {ScopeContext} from './context';
4-
import {Modulizer} from './Modulizer'
5-
4+
import {default as defaultIncorporator} from './Incorporator'
65

6+
let Incorporator = defaultIncorporator
7+
export function setIncorporator(f: any) {
8+
Incorporator = f
9+
}
710

811
const wrapperComponents: Map<any, React.ComponentType<any>> = new Map();
9-
const identity = x => x
1012
export function incorporate(type: any) {
1113
if (!wrapperComponents.has(type)) {
1214
wrapperComponents.set(
1315
type,
1416
forwardRef<any, any>((props, ref) =>
1517
createElement(ScopeContext.Consumer, null, (scope: Scope) =>
16-
createElement(Modulizer, {
18+
createElement(Incorporator, {
1719
targetProps: props,
1820
targetRef: ref,
1921
target: type,

src/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ export {makeComponent, makeCycleReactComponent} from './convert';
22
export {ScopeContext} from './context';
33
export {Scope} from './scope';
44
export {ReactSource} from './ReactSource';
5-
export {h} from './h';
5+
export {h, useModules} from './h';
66
export {incorporate} from './incorporate';
7-
export {setModules} from './Modulizer'
87
export {StreamRenderer} from './StreamRenderer';

0 commit comments

Comments
 (0)