/** * WordPress dependencies */ import { CheckboxControl } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; /** * Internal dependencies */ import type { SetSelection } from '../../types/private'; import type { NormalizedField } from '../../types'; interface DataViewsSelectionCheckboxProps< Item > { selection: string[]; onChangeSelection: SetSelection; item: Item; getItemId: ( item: Item ) => string; titleField?: NormalizedField< Item >; disabled: boolean; tabIndex?: number; } export default function DataViewsSelectionCheckbox< Item >( { selection, onChangeSelection, item, getItemId, titleField, disabled, ...extraProps }: DataViewsSelectionCheckboxProps< Item > ) { const id = getItemId( item ); const isInSelectionArray = selection.includes( id ); const checked = ! disabled && isInSelectionArray; // Fallback label to ensure accessibility const selectionLabel = titleField?.getValue?.( { item } ) || __( '(no title)' ); return ( { if ( disabled ) { return; } // Toggle in/out of selection array onChangeSelection( isInSelectionArray ? selection.filter( ( itemId ) => id !== itemId ) : [ ...selection, id ] ); } } { ...extraProps } /> ); }