optigami / src /components /TargetSelector.js
sissississi's picture
iana (#1)
19abe39
raw
history blame
1.12 kB
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>
);
}