@tomino/dynamic-form-semantic-ui
Version:
Semantic UI form renderer based on dynamic form generation
47 lines • 2.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const react_1 = tslib_1.__importDefault(require("react"));
const classnames_1 = tslib_1.__importDefault(require("classnames"));
const error_view_1 = require("../semantic/error_view");
const control_factory_1 = require("./control_factory");
const toolbelt_1 = require("@tomino/toolbelt");
const helpers_1 = require("../helpers");
const common_1 = require("../common");
function renderElements(context, elements, owner, handlers, catalogue, editorState, uid, filter) {
const filtered = elements.filter(e => (!filter ||
(e.props.label || '').toLowerCase().indexOf(filter.toLowerCase()) >= 0 ||
(e.elements &&
e.elements.some(child => (child.props.label || '').toLowerCase().indexOf(filter.toLowerCase()) >= 0))) &&
helpers_1.getValue({ formElement: e, owner, handlers, catalogue }, editorState, 'visible', true));
const props = {
owner,
catalogue,
handlers,
formElement: null
};
let group = toolbelt_1.groupByArray(filtered, e => e.tuple || helpers_1.getPropValue(props, e, context, 'label'));
return group.map((group, i) => {
let display = group.values[0].props.display;
return (react_1.default.createElement("div", { key: i, className: classnames_1.default('property-table-row', { flexed: !display || display === 'inlineLabel' }), onClick: e => {
e.preventDefault();
e.stopPropagation();
editorState.help = group.values.map(g => g.documentation).join('<br />');
} },
group.key && (react_1.default.createElement("label", { className: "first", htmlFor: `corpix-${group.key}` }, group.key)),
display === 'topLabel' && react_1.default.createElement("br", null),
group.values.map((formElement, i) => {
display = formElement.props.display;
return (react_1.default.createElement("div", { key: i, className: classnames_1.default({
full: display === 'topLabel',
second: group.key,
only: !group.key,
padded: display === 'padded'
}) },
control_factory_1.renderControl({ formElement, owner, handlers, catalogue, uid }, filter),
common_1.prop(formElement) && (react_1.default.createElement(error_view_1.ErrorView, { control: formElement, owner: owner, source: common_1.prop(formElement) }))));
})));
});
}
exports.renderElements = renderElements;
//# sourceMappingURL=control_factory_helpers.js.map