@agentlab/rjsf-antd
Version:
Ant Design theme, fields and widgets for react-jsonschema-form
63 lines • 4.45 kB
JavaScript
import React from 'react';
import { isMultiSelect, getDefaultRegistry } from 'react-jsonschema-form/lib/utils';
import AddButton from '../AddButton/AddButton';
import IconButton from '../IconButton/IconButton';
const ArrayFieldTemplate = (props) => {
const { schema, registry = getDefaultRegistry() } = props;
if (isMultiSelect(schema, registry.definitions)) {
return React.createElement(DefaultFixedArrayFieldTemplate, Object.assign({}, props));
}
return React.createElement(DefaultNormalArrayFieldTemplate, Object.assign({}, props));
};
const ArrayFieldTitle = (props) => {
const { TitleField, idSchema, title, required } = props;
if (!title) {
return React.createElement("div", null);
}
const id = `${idSchema.$id}__title`;
return React.createElement(TitleField, { id: id, title: title, required: required });
};
const ArrayFieldDescription = (props) => {
const { DescriptionField, idSchema, description } = props;
if (!description) {
return React.createElement("div", null);
}
const id = `${idSchema.$id}__description`;
return React.createElement(DescriptionField, { id: id, description: description });
};
// Used in the two templates
const DefaultArrayItem = (props) => {
const btnStyle = {
flex: 1,
paddingLeft: 6,
paddingRight: 6,
fontWeight: 'bold',
};
const { index, children, hasMoveUp, hasMoveDown, disabled, readonly, onDropIndexClick, hasToolbar, onReorderClick, hasRemove, } = props;
return (React.createElement("div", { key: index },
React.createElement("div", null, children),
hasToolbar && (React.createElement("div", null,
(hasMoveUp || hasMoveDown) && (React.createElement(IconButton, { icon: 'arrow-up', className: 'array-item-move-up', tabIndex: -1, style: btnStyle, disabled: disabled || readonly || !hasMoveUp, onClick: onReorderClick(index, index - 1) })),
(hasMoveUp || hasMoveDown) && (React.createElement(IconButton, { icon: 'arrow-down', tabIndex: -1, style: btnStyle, disabled: disabled || readonly || !hasMoveDown, onClick: onReorderClick(index, index + 1) })),
hasRemove && (React.createElement(IconButton, { icon: 'remove', tabIndex: -1, style: btnStyle, disabled: disabled || readonly, onClick: onDropIndexClick(index) }))))));
};
const DefaultFixedArrayFieldTemplate = (props) => {
const { className, TitleField, idSchema, title, uiSchema, schema, items, canAdd, required, onAddClick, disabled, readonly, } = props;
return (React.createElement("fieldset", { className: className },
React.createElement(ArrayFieldTitle, { key: `array-field-title-${idSchema.$id}`, TitleField: TitleField, idSchema: idSchema, title: uiSchema['ui:title'] || title, required: required }),
(uiSchema['ui:description'] || schema.description) && (React.createElement("div", { className: 'field-description', key: `field-description-${idSchema.$id}` }, uiSchema['ui:description'] || schema.description)),
React.createElement("div", { className: 'row array-item-list', key: `array-item-list-${idSchema.$id}` }, items && items.map(DefaultArrayItem)),
canAdd && React.createElement(AddButton, { className: 'array-item-add', onClick: onAddClick, disabled: disabled || readonly })));
};
const DefaultNormalArrayFieldTemplate = (props) => {
const { TitleField, idSchema, title, required, uiSchema, schema, items, canAdd, onAddClick, disabled, readonly, DescriptionField, } = props;
return (React.createElement("div", null,
React.createElement(ArrayFieldTitle, { key: `array-field-title-${props.idSchema.$id}`, TitleField: TitleField, idSchema: idSchema, title: uiSchema['ui:title'] || title, required: required }),
(uiSchema['ui:description'] || schema.description) && (React.createElement(ArrayFieldDescription, { key: `array-field-description-${idSchema.$id}`, DescriptionField: DescriptionField, idSchema: idSchema, description: uiSchema['ui:description'] || schema.description })),
React.createElement("div", { key: `array-item-list-${idSchema.$id}` },
items && items.map((p) => DefaultArrayItem(p)),
canAdd && (React.createElement("div", null,
React.createElement(AddButton, { className: 'array-item-add', onClick: onAddClick, disabled: disabled || readonly }))))));
};
export default ArrayFieldTemplate;
//# sourceMappingURL=ArrayFieldTemplate.js.map