Spaces:
Running
Running
File size: 1,117 Bytes
19abe39 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | function groupByLevel(targets) {
const levels = {};
Object.values(targets).forEach(t => {
if (!levels[t.level]) levels[t.level] = [];
levels[t.level].push(t);
});
return levels;
}
export default function TargetSelector({ targets, selected, onChange }) {
const levels = groupByLevel(targets);
const sortedLevels = Object.keys(levels).sort((a, b) => Number(a) - Number(b));
return (
<div className="target-selector">
<span className="target-selector-label">TARGET</span>
<select
className="target-select"
value={selected}
onChange={e => onChange(e.target.value)}
>
{sortedLevels.length === 0 ? (
<option value="">LOADING...</option>
) : (
sortedLevels.map(level => (
<optgroup key={level} label={`── LEVEL ${level}`}>
{levels[level].map(t => (
<option key={t.name} value={t.name}>
{t.name.replace(/_/g, ' ').toUpperCase()}
</option>
))}
</optgroup>
))
)}
</select>
</div>
);
}
|