UNPKG

@limetech/lime-elements

Version:
69 lines (68 loc) 2.73 kB
import React from 'react'; import { renderDescription, renderTitle } from './common'; import { GridLayout } from './grid-layout'; import { RowLayout } from './row-layout'; export const ObjectFieldTemplate = (props) => { const id = props.idSchema.$id; if (id === 'root' || !isCollapsible(props.schema)) { return renderFieldWithTitle(props); } if (isCollapsible(props.schema)) { return renderCollapsibleField(props); } return renderProperties(props.properties, props.schema); }; function renderFieldWithTitle(props) { return React.createElement(React.Fragment, {}, renderTitle(props.title), renderDescription(props.description), renderProperties(props.properties, props.schema)); } function renderCollapsibleField(props) { const defaultOpen = !isCollapsed(props.schema); return React.createElement('limel-collapsible-section', { header: props.title, id: getSchemaObjectPropertyPath(props.formContext.schema, props.idSchema), 'is-open': defaultOpen, }, renderDescription(props.description), renderProperties(props.properties, props.schema)); } function getSchemaObjectPropertyPath(schema, subSchema) { var _a, _b; const refPrefixLength = 2; const matchAllForwardSlashes = /\//g; const rootPath = (_a = schema.$ref) === null || _a === void 0 ? void 0 : _a.replace(matchAllForwardSlashes, '.').slice(refPrefixLength); const subSchemaPath = (_b = subSchema.$id) === null || _b === void 0 ? void 0 : _b.replace('_', '.properties.'); return subSchemaPath.replace('root', rootPath); } function renderProperties(properties, schema) { var _a; const layout = (_a = schema.lime) === null || _a === void 0 ? void 0 : _a.layout; return renderLayout(properties, layout); } function renderLayout(properties, layout) { const type = (layout === null || layout === void 0 ? void 0 : layout.type) || 'default'; const layouts = { default: renderDefaultLayout, grid: renderGridLayout, row: renderRowLayout, }; return layouts[type](properties, layout); } function renderDefaultLayout(properties) { return React.createElement('div', { className: 'limel-form-layout--default', }, properties.map((element) => element.content)); } function renderGridLayout(properties, layout) { return React.createElement(GridLayout, { options: layout, }, properties.map((element) => element.content)); } function renderRowLayout(properties) { return React.createElement(RowLayout, {}, properties.map((element) => element.content)); } function isCollapsible(schema) { var _a; return !!((_a = schema.lime) === null || _a === void 0 ? void 0 : _a.collapsible); } function isCollapsed(schema) { return schema.lime.collapsed !== false; } //# sourceMappingURL=object-field.js.map