) => {
const domEvent = e && e.nativeEvent;
if (domEvent) {
// Block this event to prevent the pop-up layer from closing
domEvent.stopImmediatePropagation();
// Prevent bubbling and default events to prevent label click events from triggering twice
domEvent.stopPropagation();
domEvent.preventDefault();
}
// In confirm mode, update tempFilteredValue instead of calling onSelect
if (filterConfirmMode === 'confirm') {
const currentTempValue = tempFilteredValue ?? [...filteredValue];
let values = [...currentTempValue];
const included = values.includes(filter.value);
const idx = values.indexOf(filter.value);
if (idx > -1) {
values.splice(idx, 1);
} else if (filterMultiple) {
values.push(filter.value);
} else {
values = [filter.value];
}
setTempFilteredValue?.(values);
} else {
// Immediate mode: original behavior
let values = [...filteredValue];
const included = values.includes(filter.value);
const idx = values.indexOf(filter.value);
if (idx > -1) {
values.splice(idx, 1);
} else if (filterMultiple) {
values.push(filter.value);
} else {
values = [filter.value];
}
return onSelect({
value: filter.value,
filteredValue: values,
included: !included,
domEvent,
});
}
};
const checked = displayValue.includes(filter.value);
const { text } = filter;
const { value } = filter;
const key = `${level}_${index}`;
const dropdownItem =
typeof renderFilterDropdownItem === 'function' ?
renderFilterDropdownItem({
onChange: changeFn,
filterMultiple,
value,
text,
checked,
filteredValue: displayValue,
level,
}) :
null;
let item =
dropdownItem && React.isValidElement(dropdownItem) ? (
React.cloneElement(dropdownItem, { key })
) : (
{filterMultiple ? (
{text}
) : (
{text}
)}
);
if (Array.isArray(filter.children) && filter.children.length) {
const childrenDropdownProps = {
...props,
filters: filter.children,
trigger: 'hover' as const,
position: 'right' as const,
};
delete childrenDropdownProps.filterDropdownVisible;
item = renderDropdown(childrenDropdownProps, item, level + 1, locale);
}
return item;
})}
{/* Show confirm and reset buttons in confirm mode */}
{filterConfirmMode === 'confirm' && level === 0 && (
)}