1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/src/renderer/components/dock/log-resource-selector.tsx
Alex Andreev 99f70f3401 Adding Pod selector in logs tab
Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
2021-01-18 13:57:06 +03:00

87 lines
2.3 KiB
TypeScript

import "./log-resource-selector.scss";
import React from "react";
import { observer } from "mobx-react";
import { Pod } from "../../api/endpoints";
import { Badge } from "../badge";
import { Select, SelectOption } from "../select";
import { LogTabData } from "./log-tab.store";
import { podsStore } from "../+workloads-pods/pods.store";
interface Props {
tabData: LogTabData
save: (data: Partial<LogTabData>) => void
reload: () => void
}
export const LogResourceSelector = observer((props: Props) => {
const { tabData, save, reload } = props;
const { selectedPod, selectedContainer, containers, initContainers, pods } = tabData;
const pod = new Pod(tabData.selectedPod);
const onContainerChange = (option: SelectOption) => {
save({
selectedContainer: containers
.concat(initContainers)
.find(container => container.name === option.value)
});
reload();
};
const onPodChange = (option: SelectOption) => {
save({ selectedPod: podsStore.getByName(option.value, selectedPod.getNs()) });
// Change tab title
// Refresh container list
reload();
};
const getSelectOptions = (items: string[]) => {
return items.map(item => {
return {
value: item,
label: item
};
});
};
const containerSelectOptions = [
{
label: `Containers`,
options: getSelectOptions(containers.map(container => container.name))
},
{
label: `Init Containers`,
options: getSelectOptions(initContainers.map(container => container.name)),
}
];
const podSelectOptions = [
{
label: pod.getOwnerRefs()[0]?.name,
options: getSelectOptions(pods.map(pod => pod.getName()))
}
];
return (
<div className="LogResourceSelector flex gaps align-center">
<span>Namespace</span> <Badge label={pod.getNs()}/>
<span>Pod</span>
<Select
options={podSelectOptions}
value={{ label: pod.getName(), value: pod.getName() }}
onChange={onPodChange}
autoConvertOptions={false}
/>
<span>Container</span>
<Select
options={containerSelectOptions}
value={{ label: selectedContainer.name, value: selectedContainer.name }}
onChange={onContainerChange}
autoConvertOptions={false}
/>
</div>
);
});