argo-cd
40 строк · 1.5 Кб
1import * as React from 'react';
2import {Tooltip} from 'argo-ui';
3
4export type ContainerGroup = {offset: number; containers: {name: string}[]};
5
6// ContainerSelector is a component that renders a dropdown menu of containers
7export const ContainerSelector = ({
8containerGroups,
9containerName,
10onClickContainer
11}: {
12containerGroups?: ContainerGroup[];
13containerName: string;
14onClickContainer: (group: ContainerGroup, index: number, logs: string) => void;
15}) => {
16if (!containerGroups) {
17return <></>;
18}
19
20const containers = containerGroups?.reduce((acc, group) => acc.concat(group.containers), []);
21const containerNames = containers?.map(container => container.name);
22const containerGroup = (n: string) => {
23return containerGroups?.find(group => group.containers?.find(container => container.name === n));
24};
25const containerIndex = (n: string) => {
26return containerGroup(n)?.containers.findIndex(container => container.name === n);
27};
28if (containerNames.length <= 1) return <></>;
29return (
30<Tooltip content='Select a container to view logs'>
31<select className='argo-field' value={containerName} onChange={e => onClickContainer(containerGroup(e.target.value), containerIndex(e.target.value), 'logs')}>
32{containerNames.map(n => (
33<option key={n} value={n}>
34{n}
35</option>
36))}
37</select>
38</Tooltip>
39);
40};
41