import React from 'react'; import { OptionsControl, OptionsControlProps, Option, FormOptionsControl } from './Options'; import cx from 'classnames'; import Checkbox from '../../components/Checkbox'; import chunk from 'lodash/chunk'; import {Icon} from '../../components/icons'; import {Api} from '../../types'; import {autobind, hasAbility} from '../../utils/helper'; /** * 复选框 * 文档:https://baidu.gitee.io/amis/docs/components/form/checkboxes */ export interface CheckboxesControlSchema extends FormOptionsControl { type: 'checkboxes'; /** * 是否开启全选功能 */ checkAll?: boolean; /** * 是否默认全选 */ defaultCheckAll?: boolean; /** * 每行显示多少个 */ columnsCount?: number; } export interface CheckboxesProps extends OptionsControlProps, Omit< CheckboxesControlSchema, | 'options' | 'type' | 'className' | 'descriptionClassName' | 'inputClassName' > { placeholder?: any; itemClassName?: string; columnsCount?: number; labelClassName?: string; onAdd?: () => void; addApi?: Api; creatable: boolean; createBtnLabel: string; editable?: boolean; removable?: boolean; } export default class CheckboxesControl extends React.Component< CheckboxesProps, any > { static defaultProps = { columnsCount: 1, multiple: true, placeholder: 'placeholder.noOption', creatable: false, inline: true, createBtnLabel: 'Select.createLabel' }; componentDidMount() { const {defaultCheckAll, onToggleAll} = this.props; defaultCheckAll && onToggleAll(); } componentDidUpdate(prevProps: OptionsControlProps) { let {options: currOptions, onToggleAll, defaultCheckAll} = this.props; let {options: prevOptions} = prevProps; if (defaultCheckAll && prevOptions != currOptions) { onToggleAll(); } } reload() { const reload = this.props.reloadOptions; reload && reload(); } @autobind handleAddClick() { const {onAdd} = this.props; onAdd && onAdd(); } @autobind handleEditClick(e: Event, item: any) { const {onEdit} = this.props; e.preventDefault(); e.stopPropagation(); onEdit && onEdit(item); } @autobind handleDeleteClick(e: Event, item: any) { const {onDelete} = this.props; e.preventDefault(); e.stopPropagation(); onDelete && onDelete(item); } renderGroup(option: Option, index: number) { const {classnames: cx, labelField} = this.props; if (!option.children?.length) { return null; } return (