From 7bbaba409a3e6e24d52bc33fc031c93d8b918611 Mon Sep 17 00:00:00 2001 From: Wagner Trezub Date: Thu, 5 Feb 2026 15:58:28 +0100 Subject: [PATCH 1/4] feat: custom formfieldwrapper.jsx --- .../manage/Widgets/FormFieldWrapper.jsx | 188 ++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 src/customizations/volto/components/manage/Widgets/FormFieldWrapper.jsx diff --git a/src/customizations/volto/components/manage/Widgets/FormFieldWrapper.jsx b/src/customizations/volto/components/manage/Widgets/FormFieldWrapper.jsx new file mode 100644 index 000000000..5406ffbfc --- /dev/null +++ b/src/customizations/volto/components/manage/Widgets/FormFieldWrapper.jsx @@ -0,0 +1,188 @@ +/** + * FormFieldWrapper component. + * @module components/manage/Widgets/FormFieldWrapper + */ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import { Form, Grid, Icon as IconOld, Label } from 'semantic-ui-react'; +import { map } from 'lodash'; +import cx from 'classnames'; +import { defineMessages, injectIntl } from 'react-intl'; + +const messages = defineMessages({ + edit: { + id: 'Edit', + defaultMessage: 'Edit', + }, + delete: { + id: 'Delete', + defaultMessage: 'Delete', + }, + language_independent: { + id: 'Language independent field.', + defaultMessage: 'Language independent field.', + }, +}); +/** + * FormFieldWrapper component class. + * @class FormFieldWrapper + * @extends Component + */ +class FormFieldWrapper extends Component { + /** + * Property types. + * @property {Object} propTypes Property types. + * @static + */ + static propTypes = { + id: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, + description: PropTypes.oneOfType([PropTypes.string, PropTypes.element]), + required: PropTypes.bool, + error: PropTypes.arrayOf(PropTypes.string), + wrapped: PropTypes.bool, + columns: PropTypes.number, + draggable: PropTypes.bool, + isDisabled: PropTypes.bool, + onEdit: PropTypes.func, + className: PropTypes.string, + onDelete: PropTypes.func, + intl: PropTypes.object, + }; + + /** + * Default properties + * @property {Object} defaultProps Default properties. + * @static + */ + static defaultProps = { + description: null, + required: false, + error: [], + wrapped: true, + columns: 2, + onDelete: null, + intl: null, + isDisabled: null, + draggable: null, + }; + + /** + * Render method. + * @method render + * @returns {string} Markup for the component. + */ + render() { + const { + id, + title, + description, + fieldSet, + required, + error, + wrapped, + columns, + draggable, + onEdit, + className, + isDisabled, + onDelete, + intl, + noForInFieldLabel, + multilingual_options, + } = this.props; + const wdg = ( + <> + {this.props.children} + + {map(error, (message) => ( + + ))} + + ); + + return wrapped ? ( + 0} + className={cx( + description ? 'help' : '', + className, + `field-wrapper-${id}`, + multilingual_options?.language_independent + ? 'language-independent-field' + : null, + )} + > + + + {columns === 2 && ( + +
+