mirror of
https://github.com/apache/superset.git
synced 2026-04-21 00:54:44 +00:00
* Added virtualized select to SelectControl, allow onPaste to create new options * Added unit tests * Added virtualized/paste select to filterbox
57 lines
1.4 KiB
JavaScript
57 lines
1.4 KiB
JavaScript
import React from 'react';
|
|
import PropTypes from 'prop-types';
|
|
|
|
export default function VirtualizedRendererWrap(renderer) {
|
|
function WrapperRenderer({
|
|
focusedOption,
|
|
focusOption,
|
|
key,
|
|
option,
|
|
selectValue,
|
|
style,
|
|
valueArray,
|
|
}) {
|
|
if (!option) {
|
|
return null;
|
|
}
|
|
const className = ['VirtualizedSelectOption'];
|
|
if (option === focusedOption) {
|
|
className.push('VirtualizedSelectFocusedOption');
|
|
}
|
|
if (option.disabled) {
|
|
className.push('VirtualizedSelectDisabledOption');
|
|
}
|
|
if (valueArray && valueArray.indexOf(option) >= 0) {
|
|
className.push('VirtualizedSelectSelectedOption');
|
|
}
|
|
if (option.className) {
|
|
className.push(option.className);
|
|
}
|
|
const events = option.disabled ? {} : {
|
|
onClick: () => selectValue(option),
|
|
onMouseEnter: () => focusOption(option),
|
|
};
|
|
return (
|
|
<div
|
|
className={className.join(' ')}
|
|
key={key}
|
|
style={Object.assign(option.style || {}, style)}
|
|
title={option.title}
|
|
{...events}
|
|
>
|
|
{renderer(option)}
|
|
</div>
|
|
);
|
|
}
|
|
WrapperRenderer.propTypes = {
|
|
focusedOption: PropTypes.object.isRequired,
|
|
focusOption: PropTypes.func.isRequired,
|
|
key: PropTypes.string,
|
|
option: PropTypes.object,
|
|
selectValue: PropTypes.func.isRequired,
|
|
style: PropTypes.object,
|
|
valueArray: PropTypes.array,
|
|
};
|
|
return WrapperRenderer;
|
|
}
|