File "table-checkbox.js"
Full Path: /home/warrior1/public_html/languages/wp-content-20241001222009/plugins/elementor/app/assets/js/ui/table/table-checkbox.js
File size: 1.9 KB
MIME-type: text/x-java
Charset: utf-8
import { useContext } from 'react';
import { Context } from './table-context';
import { arrayToClassName } from 'elementor-app/utils/utils.js';
import Checkbox from 'elementor-app/ui/atoms/checkbox';
export default function TableCheckbox( props ) {
const context = useContext( Context ),
{ selected, disabled, setSelected } = context || {},
isSelectAllCheckbox = Object.prototype.hasOwnProperty.call( props, 'allSelectedCount' ),
isAllSelected = selected.length === props.allSelectedCount,
isIndeterminate = isSelectAllCheckbox ? ! ! ( ( selected.length - disabled.length ) && ! isAllSelected ) : false,
isSelected = isSelectAllCheckbox ? isAllSelected : selected.includes( props.index ),
isDisabled = ! isSelectAllCheckbox ? disabled.includes( props.index ) : null,
onSelectAll = () => {
setSelected( () => {
if ( isAllSelected || isIndeterminate ) {
// Disabled checkboxes should not be unchecked.
return disabled.length ? [ ...disabled ] : [];
}
return Array( props.allSelectedCount )
.fill( true )
.map( ( value, index ) => index );
} );
},
onSelectRow = () => {
setSelected( ( prevState ) => {
const currentSelections = [ ...prevState ],
currentIndexPosition = currentSelections.indexOf( props.index );
if ( currentIndexPosition > -1 ) {
currentSelections.splice( currentIndexPosition, 1 );
} else {
currentSelections.push( props.index );
}
return currentSelections;
} );
},
onChange = () => isSelectAllCheckbox ? onSelectAll() : onSelectRow();
return (
<Checkbox
checked={ isSelected }
indeterminate={ isIndeterminate }
onChange={ onChange }
disabled={ isDisabled }
className={ arrayToClassName( [ 'eps-table__checkbox', props.className ] ) }
/>
);
}
TableCheckbox.propTypes = {
className: PropTypes.string,
index: PropTypes.number,
initialChecked: PropTypes.bool,
allSelectedCount: PropTypes.number,
};