Stubbing out parsing and starting on rendering flow
This commit is contained in:
parent
3378c68aed
commit
21c392752e
@ -21,9 +21,9 @@ exports[`App removing rendered expression 1`] = `
|
|||||||
>
|
>
|
||||||
<LoadNamespace(FormActions) />
|
<LoadNamespace(FormActions) />
|
||||||
</LoadNamespace(Form)>
|
</LoadNamespace(Form)>
|
||||||
<RenderJS
|
<Render
|
||||||
expr="test expression"
|
|
||||||
onRender={[Function]}
|
onRender={[Function]}
|
||||||
|
parsed="PARSED(test expression)"
|
||||||
/>
|
/>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
`;
|
`;
|
||||||
@ -138,9 +138,9 @@ exports[`App rendering an expression 3`] = `
|
|||||||
>
|
>
|
||||||
<LoadNamespace(FormActions) />
|
<LoadNamespace(FormActions) />
|
||||||
</LoadNamespace(Form)>
|
</LoadNamespace(Form)>
|
||||||
<RenderJS
|
<Render
|
||||||
expr="test expression"
|
|
||||||
onRender={[Function]}
|
onRender={[Function]}
|
||||||
|
parsed="PARSED(test expression)"
|
||||||
/>
|
/>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
`;
|
`;
|
||||||
@ -166,9 +166,9 @@ exports[`App rendering image details 1`] = `
|
|||||||
>
|
>
|
||||||
<LoadNamespace(FormActions) />
|
<LoadNamespace(FormActions) />
|
||||||
</LoadNamespace(Form)>
|
</LoadNamespace(Form)>
|
||||||
<RenderJS
|
<Render
|
||||||
expr="test expression"
|
|
||||||
onRender={[Function]}
|
onRender={[Function]}
|
||||||
|
parsed="PARSED(test expression)"
|
||||||
/>
|
/>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
`;
|
`;
|
||||||
@ -200,9 +200,9 @@ exports[`App rendering image details 2`] = `
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</LoadNamespace(Form)>
|
</LoadNamespace(Form)>
|
||||||
<RenderJS
|
<Render
|
||||||
expr="test expression"
|
|
||||||
onRender={[Function]}
|
onRender={[Function]}
|
||||||
|
parsed="PARSED(test expression)"
|
||||||
/>
|
/>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
`;
|
`;
|
||||||
|
@ -68,16 +68,19 @@ class App extends React.PureComponent {
|
|||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const Component = await import(
|
const syntaxModule = await import(
|
||||||
/* webpackChunkName: "render-[index]" */
|
/* webpackChunkName: "render-[index]" */
|
||||||
`syntax/${ syntax }`
|
`syntax/${ syntax }`
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const parsed = syntaxModule.parse(expr);
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
loading: false,
|
loading: false,
|
||||||
render: {
|
render: {
|
||||||
syntax,
|
syntax,
|
||||||
Component: Component.default
|
parsed,
|
||||||
|
Component: syntaxModule.Render
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -116,6 +119,7 @@ class App extends React.PureComponent {
|
|||||||
imageDetails,
|
imageDetails,
|
||||||
render: {
|
render: {
|
||||||
syntax: renderSyntax,
|
syntax: renderSyntax,
|
||||||
|
parsed,
|
||||||
Component
|
Component
|
||||||
}
|
}
|
||||||
} = this.state;
|
} = this.state;
|
||||||
@ -133,7 +137,7 @@ class App extends React.PureComponent {
|
|||||||
};
|
};
|
||||||
const renderProps = {
|
const renderProps = {
|
||||||
onRender: this.handleSvg,
|
onRender: this.handleSvg,
|
||||||
expr
|
parsed
|
||||||
};
|
};
|
||||||
|
|
||||||
const doRender = renderSyntax === syntax;
|
const doRender = renderSyntax === syntax;
|
||||||
|
@ -4,6 +4,11 @@ import { shallow } from 'enzyme';
|
|||||||
import { mockT } from 'i18n';
|
import { mockT } from 'i18n';
|
||||||
import { App } from 'components/App';
|
import { App } from 'components/App';
|
||||||
|
|
||||||
|
jest.mock('syntax/js', () => ({
|
||||||
|
parse: expr => `PARSED(${ expr })`,
|
||||||
|
Render: () => ''
|
||||||
|
}));
|
||||||
|
|
||||||
const syntaxList = [
|
const syntaxList = [
|
||||||
{ id: 'testJS', label: 'Testing JS' },
|
{ id: 'testJS', label: 'Testing JS' },
|
||||||
{ id: 'other', label: 'Other' }
|
{ id: 'other', label: 'Other' }
|
||||||
|
@ -6,9 +6,29 @@ import Text from 'rendering/Text';
|
|||||||
|
|
||||||
import style from './style.module.css';
|
import style from './style.module.css';
|
||||||
|
|
||||||
|
const nodeTypes = {
|
||||||
|
SVG,
|
||||||
|
Text
|
||||||
|
};
|
||||||
|
|
||||||
|
const render = (data, extraProps) => {
|
||||||
|
if (typeof data === 'string') {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
const { type, props } = data;
|
||||||
|
const children = (data.children || []).map(
|
||||||
|
(data, key) => render(data, { key }));
|
||||||
|
|
||||||
|
return React.createElement(
|
||||||
|
nodeTypes[type] || type,
|
||||||
|
{ ...extraProps, ...props },
|
||||||
|
children.length === 1 ? children[0] : children);
|
||||||
|
};
|
||||||
|
|
||||||
class Render extends React.PureComponent {
|
class Render extends React.PureComponent {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
expr: PropTypes.string,
|
parsed: PropTypes.object.isRequired,
|
||||||
onRender: PropTypes.func.isRequired
|
onRender: PropTypes.func.isRequired
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,13 +48,10 @@ class Render extends React.PureComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { expr } = this.props;
|
const { parsed } = this.props;
|
||||||
|
|
||||||
// Demo rendering for now
|
|
||||||
return <div className={ style.render } ref={ this.svgContainer }>
|
return <div className={ style.render } ref={ this.svgContainer }>
|
||||||
<SVG onReflow={ this.provideSVGData }>
|
{ render(parsed, { onReflow: this.provideSVGData }) }
|
||||||
<Text>{ this.constructor.name } => { expr }</Text>
|
|
||||||
</SVG>
|
|
||||||
</div>;
|
</div>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,23 @@
|
|||||||
import Render from 'components/Render';
|
import Render from 'components/Render';
|
||||||
|
|
||||||
class RenderJS extends Render {}
|
const parse = expr => {
|
||||||
|
return {
|
||||||
|
type: 'SVG',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
type: 'Text',
|
||||||
|
props: {
|
||||||
|
quoted: true
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
`JS => ${ expr }`
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
export default RenderJS;
|
export {
|
||||||
|
parse,
|
||||||
|
Render
|
||||||
|
};
|
||||||
|
@ -1,5 +1,23 @@
|
|||||||
import Render from 'components/Render';
|
import Render from 'components/Render';
|
||||||
|
|
||||||
class RenderPCRE extends Render {}
|
const parse = expr => {
|
||||||
|
return {
|
||||||
|
type: 'SVG',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
type: 'Text',
|
||||||
|
props: {
|
||||||
|
quoted: true
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
`PCRE => ${ expr }`
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
export default RenderPCRE;
|
export {
|
||||||
|
parse,
|
||||||
|
Render
|
||||||
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user