1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-25 00:09:40 +02:00
portainer/app/react/docker/host/SetupView/GpusList.tsx
Ali d38085a560
Some checks are pending
ci / build_images (map[arch:amd64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
ci / build_images (map[arch:arm platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:arm64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:ppc64le platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:s390x platform:linux version:]) (push) Waiting to run
ci / build_manifests (push) Blocked by required conditions
/ triage (push) Waiting to run
Lint / Run linters (push) Waiting to run
Test / test-client (push) Waiting to run
Test / test-server (map[arch:amd64 platform:linux]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
Test / test-server (map[arch:arm64 platform:linux]) (push) Waiting to run
chore(data-cy): require data-cy attributes [EE-6880] (#11453)
2024-04-11 12:11:38 +12:00

76 lines
2.1 KiB
TypeScript

import { array, object, string } from 'yup';
import { r2a } from '@/react-tools/react2angular';
import { withControlledInput } from '@/react-tools/withControlledInput';
import { InputList } from '@@/form-components/InputList';
import { ItemProps } from '@@/form-components/InputList/InputList';
import { InputGroup } from '@@/form-components/InputGroup';
export interface Gpu {
value: string;
name: string;
}
interface Props {
value: Gpu[];
onChange(value: Gpu[]): void;
}
function Item({ item, onChange, index }: ItemProps<Gpu>) {
return (
<div className="flex flex-grow gap-2">
<InputGroup size="small" className="flex-grow">
<InputGroup.Addon>GPU Name</InputGroup.Addon>
<InputGroup.Input
placeholder="my-gpu"
value={item.name}
onChange={(e) => {
onChange({ ...item, name: e.target.value });
}}
data-cy={`docker-gpu-name_${index}`}
/>
</InputGroup>
<InputGroup size="small" className="flex-grow">
<InputGroup.Addon>Index or UUID</InputGroup.Addon>
<InputGroup.Input
placeholder="0 or GPU-6e2c7185-c3d3-ae22-da43-bc5267b89061"
value={item.value}
onChange={(e) => {
onChange({ ...item, value: e.target.value });
}}
data-cy={`docker-gpu-value_${index}`}
/>
</InputGroup>
</div>
);
}
export function GpusList({ value, onChange }: Props) {
return (
<InputList<Gpu>
label="GPUs"
tooltip="You may optionally set up the GPUs that will be selectable against containers, although 'All GPUs' will always be available."
value={value}
onChange={onChange}
itemBuilder={() => ({ value: '', name: '' })}
addLabel="Add GPU"
item={Item}
data-cy="docker-containers-gpus"
/>
);
}
export function gpusListValidation() {
const gpuShape = object().shape({
name: string().required(),
value: string().required(),
});
return array().of(gpuShape).default([]);
}
export const GpusListAngular = r2a(withControlledInput(GpusList), [
'value',
'onChange',
]);