🐛 Fix broken checkbox logic

This commit is contained in:
Philipp Stracker 2025-01-27 18:54:27 +01:00
parent 94069238f3
commit 408b7eede5
No known key found for this signature in database

View file

@ -1,15 +1,39 @@
import { PayPalCheckbox } from './index';
import { useCallback } from '@wordpress/element';
const CheckboxGroup = ( { options, value, onChange } ) => {
const handleChange = ( key, checked ) => {
const getNewValue = () => {
if ( checked ) {
return [ ...value, key ];
}
return value.filter( ( val ) => val !== key );
};
const CheckboxGroup = ( { name, options, value, onChange } ) => {
const handleChange = useCallback(
( key, checked ) => {
const getNewValue = () => {
if ( 'boolean' === typeof value ) {
return checked;
}
onChange( getNewValue() );
if ( checked ) {
return [ ...value, key ];
}
return value.filter( ( val ) => val !== key );
};
onChange( getNewValue() );
},
[ onChange, value ]
);
const isItemChecked = ( checked, itemValue ) => {
if ( typeof checked === 'boolean' ) {
return checked;
}
if ( Array.isArray( value ) ) {
return value.includes( itemValue );
}
if ( typeof value === 'boolean' ) {
return value;
}
return value === itemValue;
};
return (
@ -21,16 +45,14 @@ const CheckboxGroup = ( { options, value, onChange } ) => {
checked,
disabled,
description,
tooltip,
} ) => (
<PayPalCheckbox
key={ itemValue }
key={ name + itemValue }
value={ itemValue }
label={ label }
checked={ checked }
checked={ isItemChecked( checked, itemValue ) }
disabled={ disabled }
description={ description }
tooltip={ tooltip }
changeCallback={ handleChange }
/>
)