@plone/volto
Version:
Volto
82 lines (74 loc) • 1.94 kB
JSX
/**
* CheckboxWidget component.
* @module components/manage/Widgets/CheckboxWidget
*/
import React from 'react';
import PropTypes from 'prop-types';
import { Checkbox } from 'semantic-ui-react';
import { injectIntl } from 'react-intl';
import FormFieldWrapper from '@plone/volto/components/manage/Widgets/FormFieldWrapper';
/**
* CheckboxWidget component class.
* @function CheckboxWidget
* @returns {string} Markup of the component.
*
* To use it, in schema properties, declare a field like:
*
* ```jsx
* {
* title: "Active",
* type: 'boolean',
* }
* ```
*/
const CheckboxWidget = (props) => {
const { id, title, value, onChange, isDisabled } = props;
return (
<FormFieldWrapper {...props} columns={1}>
<div className="wrapper">
<Checkbox
id={`field-${id}`}
name={`field-${id}`}
checked={value || false}
disabled={isDisabled}
onChange={(event, { checked }) => {
onChange(id, checked);
}}
label={<label htmlFor={`field-${id}`}>{title}</label>}
/>
</div>
</FormFieldWrapper>
);
};
/**
* Property types.
* @property {Object} propTypes Property types.
* @static
*/
CheckboxWidget.propTypes = {
id: PropTypes.string.isRequired,
title: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,
description: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),
required: PropTypes.bool,
error: PropTypes.arrayOf(PropTypes.string),
value: PropTypes.bool,
onChange: PropTypes.func,
onEdit: PropTypes.func,
onDelete: PropTypes.func,
wrapped: PropTypes.bool,
};
/**
* Default properties.
* @property {Object} defaultProps Default properties.
* @static
*/
CheckboxWidget.defaultProps = {
description: null,
required: false,
error: [],
value: null,
onChange: null,
onEdit: null,
onDelete: null,
};
export default injectIntl(CheckboxWidget);