UNPKG

@tomino/dynamic-form-semantic-ui

Version:

Semantic UI form renderer based on dynamic form generation

63 lines 2.69 kB
import * as React from 'react'; import { css, pointer, tryInterpolate, getValue, DynamicControl, sourceValue } from '../common'; import { observer } from 'mobx-react'; import { Context } from '../context'; import { EditorContext } from '../editor/editor_context'; const formText = css ` margin-top: 20px; label: formText; `; export const TextComponent = props => { const context = React.useContext(EditorContext); const text = getValue(props, context, 'value'); const inline = getValue(props, context, 'inline'); let parsedText = ''; try { parsedText = tryInterpolate(text, props.owner); } catch (ex) { parsedText = '<b style="color: red">Error: </b>' + ex.message; } return (React.createElement(DynamicControl, Object.assign({}, props, { styleName: inline ? formText : '', dangerouslySetInnerHTML: { __html: parsedText } }))); }; export const TextView = { Component: TextComponent, toString: f => f.props.text }; const imageProps = ['alt', 'src']; export const Image = props => { const context = React.useContext(Context); return (React.createElement(DynamicControl, Object.assign({}, props, { controlProps: imageProps, control: "img", style: { width: getValue(props, context, 'imageWidth'), height: getValue(props, context, 'imageHeight') } }))); }; Image.displayName = 'Image'; export const ImageView = { Component: Image, toString: formElement => formElement.props.url }; export const Link = props => { const { owner, formElement: { props: { text, url } } } = props; return (React.createElement(DynamicControl, Object.assign({}, props, { control: "a", href: tryInterpolate(url, owner) }), tryInterpolate(text, owner) || '[Link]')); }; export const LinkView = { Component: Link, toString: (owner, { formElement }) => { return `[${formElement.props.url}] ${tryInterpolate(formElement.props.url, owner)}`; } }; export const LinkSelectorComponent = props => { const { formElement, owner } = props; const { text, target } = formElement.props; const context = React.useContext(Context); const onClick = React.useCallback(() => owner.setValue(sourceValue(target), getValue(props, context, 'source')), [context, owner, props, target]); return (React.createElement(DynamicControl, Object.assign({}, props, { control: "a", styleName: pointer, onClick: onClick }), tryInterpolate(text, owner))); }; export const LinkSelectorView = { Component: observer(LinkSelectorComponent), toString: (owner, props, context) => { return tryInterpolate(getValue(props, context), owner); } }; //# sourceMappingURL=text_view.js.map