1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-23 15:29:42 +02:00

refactor(docker/containers): migrate networks table to react [EE-4665] (#10069)

This commit is contained in:
Chaim Lev-Ari 2023-09-07 15:14:03 +01:00 committed by GitHub
parent 776f6a62c3
commit b15812a74d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
28 changed files with 632 additions and 259 deletions

View file

@ -0,0 +1,71 @@
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"
/>
);
}
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,
}
);
}