function InstanceSelect()

in frontend/src/pages/Configure/Components.js [73:166]


function InstanceSelect({path, selectId, callback, disabled}) {
  const value = useState(path) || "";

  const generalPurposeInstances = [
    ["t2.micro", "1 vcpus, 1GB memory", "/img/od.svg"],
    ["t2.medium", "2 vcpus, 2GB memory", "/img/od.svg"],
  ]

  const computeInstances = [
    ["c5n.large", "2 vcpus, 5.25GB memory", "/img/c5n.svg"],
    ["c5n.xlarge", "4 vcpus, 10.5GB memory", "/img/c5n.svg"],
    ["c5n.2xlarge", "8 vcpus, 21GB memory", "/img/c5n.svg"],
    ["c5n.4xlarge", "16 vcpus, 42GB memory", "/img/c5n.svg"],
    ["c5n.9xlarge", "36 vcpus, 96GB memory", "/img/c5n.svg"],
    ["c5n.18xlarge", "72 vcpus, 192GB memory", "/img/c5n.svg"],
    ["c5n.metal", "72 vcpus, 192GB memory", "/img/c5n.svg"],
    ["c5.large", "2 vcpus, 4GB memory", "/img/c5.svg"],
    ["c5.xlarge", "4 vcpus, 8GB memory", "/img/c5.svg"],
    ["c5.2xlarge", "8 vcpus, 16GB memory", "/img/c5.svg"],
    ["c5.4xlarge", "16 vcpus, 32GB memory", "/img/c5.svg"],
    ["c5.9xlarge", "36 vcpus, 72GB memory", "/img/c5.svg"],
    ["c5.12xlarge", "48 vcpus, 96GB memory", "/img/c5.svg"],
    ["c5.18xlarge", "72 vcpus, 144GB memory", "/img/c5.svg"],
    ["c5.24xlarge", "96 vcpus, 192GB memory", "/img/c5.svg"],
  ];

  const mixedInstances = [
    ["m6i.large", "2 vcpus, 8GB memory", "/img/c5.svg"],
    ["m6i.xlarge", "4 vcpus, 16GB memory", "/img/c5.svg"],
    ["m6i.2xlarge", "8 vcpus, 32GB memory", "/img/c5.svg"],
    ["m6i.4xlarge", "16 vcpus, 64GB memory", "/img/c5.svg"],
    ["m6i.8xlarge", "32 vcpus, 128GB memory", "/img/c5.svg"],
    ["m6i.12xlarge", "48 vcpus, 192GB memory", "/img/c5.svg"],
    ["m6i.16xlarge", "64 vcpus, 256GB memory", "/img/c5.svg"],
    ["m6i.24xlarge", "96 vcpus, 384GB memory", "/img/c5.svg"],
    ["m6i.32xlarge", "128 vcpus, 256GB memory", "/img/c5.svg"],
  ];

  const gpuInstances = [
    ["p3.2xlarge", "1 x Tesla V100,  8 vcpus, 61GB memory", "/img/p3.svg"],
    ["p3.8xlarge", "4 x Tesla V100,  32 vcpus, 244GB memory", "/img/p3.svg"],
    ["p3.16xlarge", "8 x Tesla V100,  64 vcpus, 488GB memory", "/img/p3.svg"],
    ["p3dn.24xlarge", "8 x Tesla V100,  96 vcpus, 768GB memory", "/img/p3.svg"],
    ["p4d.24xlarge", "8 x Tensor A100,  96 vcpus, 1152GB memory", "/img/p3.svg"],
    ["g4dn.xlarge", "1 x NVIDIA T4,  4 vcpus, 16GB memory", "/img/od.svg"],
    ["g4dn.2xlarge", "1 x NVIDIA T4,  8 vcpus, 32GB memory", "/img/od.svg"],
    ["g4dn.4xlarge", "1 x NVIDIA T4,  16 vcpus, 64GB memory", "/img/od.svg"],
    ["g4dn.8xlarge", "1 x NVIDIA T4,  32 vcpus, 128GB memory", "/img/od.svg"],
    ["g4dn.16xlarge", "1 x NVIDIA T4,  64 vcpus, 256GB memory", "/img/od.svg"],
    ["g4dn.12xlarge", "4 x NVIDIA T4,  48 vcpus, 192GB memory", "/img/od.svg"],
    ["g4dn.metal", "8 x NVIDIA T4,  96 vcpus, 384GB memory", "/img/od.svg"],
  ];

  const groups = [
    ["General Purpose", generalPurposeInstances],
    ["Compute", computeInstances],
    ["Mixed", mixedInstances],
    ["GPU", gpuInstances]
  ];

  const instanceToOption = ([value, label, icon]) => {
    return {label: value,
      iconUrl: icon,
      description: label,
      value: value}}

  return (
    <Autosuggest
      value={value}
      disabled={disabled}
      onChange={({ detail }) => {
        if(detail.value !== value)
        {
          setState(path, detail.value);
          callback && callback(detail.value);
        }
      }}
      enteredTextLabel={(newValue) => {
        if(newValue !== value)
        {
          setState(path, newValue);
          callback && callback(newValue);
        }
      }}
      ariaLabel="Instance Selector"
      placeholder="Instance Type"
      empty="No matches found"
      options={groups.map(([label, instances]) => {
        return {
          label: label,
          options: instances.map(instanceToOption)}})}/>

  )
}