1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-21 22:39:41 +02:00
portainer/app/react/docker/containers/components/NetworkSelector.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

72 lines
1.8 KiB
TypeScript

import { useMemo } from 'react';
import { useNetworks } from '@/react/docker/networks/queries/useNetworks';
import { DockerNetwork } from '@/react/docker/networks/types';
import { useIsSwarm } from '@/react/docker/proxy/queries/useInfo';
import { useApiVersion } from '@/react/docker/proxy/queries/useVersion';
import { useEnvironmentId } from '@/react/hooks/useEnvironmentId';
import { Option, PortainerSelect } from '@@/form-components/PortainerSelect';
export function NetworkSelector({
onChange,
additionalOptions = [],
value,
hiddenNetworks = [],
}: {
value: string;
additionalOptions?: Array<Option<string>>;
onChange: (value: string) => void;
hiddenNetworks?: string[];
}) {
const networksQuery = useNetworksForSelector({
select(networks) {
return networks.map((n) => ({ label: n.Name, value: n.Name }));
},
});
const networks = networksQuery.data;
const options = useMemo(
() =>
(networks || [])
.concat(additionalOptions)
.filter((n) => !hiddenNetworks.includes(n.value))
.sort((a, b) => a.label.localeCompare(b.label)),
[additionalOptions, hiddenNetworks, networks]
);
return (
<PortainerSelect
value={value}
onChange={onChange}
options={options}
isLoading={networksQuery.isLoading}
bindToBody
placeholder="Select a network"
data-cy="docker-network-selector"
/>
);
}
export function useNetworksForSelector<T = DockerNetwork[]>({
select,
}: {
select?(networks: Array<DockerNetwork>): T;
} = {}) {
const environmentId = useEnvironmentId();
const isSwarmQuery = useIsSwarm(environmentId);
const dockerApiVersion = useApiVersion(environmentId);
return useNetworks(
environmentId,
{
local: true,
swarmAttachable: isSwarmQuery && dockerApiVersion >= 1.25,
},
{
select,
}
);
}