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>
  );
}