tbleckert/react-select-search

View on GitHub
src/components/Options.jsx

Summary

Maintainability
A
1 hr
Test Coverage
/* eslint-disable react/prop-types */
import { memo } from 'react';
import Option from './Option';
import isSelected from '../lib/isSelected';

function Options(props) {
    const {
        options,
        cls,
        renderOption,
        renderGroupHeader,
        optionProps,
        snapshot,
        disabled,
    } = props;

    return (
        <ul className={cls('options')}>
            {options.map((o) => {
                if (o.type === 'group') {
                    return (
                        <li role="none" className={cls('row')} key={o.name}>
                            <div className={cls('group')}>
                                <div className={cls('group-header')}>
                                    {renderGroupHeader
                                        ? renderGroupHeader(o.name)
                                        : o.name}
                                </div>
                                <Options {...props} options={o.items} />
                            </div>
                        </li>
                    );
                }

                return (
                    <Option
                        key={o.value}
                        option={o}
                        optionProps={optionProps}
                        cls={cls}
                        renderOption={renderOption}
                        selected={isSelected(o, snapshot.option)}
                        highlighted={snapshot.highlighted === o.index}
                        disabled={o.disabled || disabled}
                    />
                );
            })}
        </ul>
    );
}

export default memo(Options);