in webview-ui/src/TCPDump/filterScenarios/TwoPodsFilters.tsx [20:157]
export function TwoPodsFilters(props: TwoPodsFiltersProps) {
const updates: EventHandlerFunc[] = [];
const { lazySourceNodes, lazySourcePods, lazyDestNodes, lazyDestPods } = prepareData(
props.referenceData,
props.filter,
updates,
);
useEffect(() => {
updates.map((fn) => fn(props.eventHandlers));
});
function handleSourceNodeChange(node: NodeName | null) {
props.eventHandlers.onSetCaptureScenarioFilters({
node: props.captureNode,
scenario: "TwoPods",
filters: { ...props.filter, sourceNode: node, sourcePod: null },
});
props.eventHandlers.onRefreshPcapFilterString({ node: props.captureNode });
}
function handleSourcePodChange(pod: FilterPod | null) {
props.eventHandlers.onSetCaptureScenarioFilters({
node: props.captureNode,
scenario: "TwoPods",
filters: { ...props.filter, sourcePod: pod },
});
props.eventHandlers.onRefreshPcapFilterString({ node: props.captureNode });
}
function handleDestNodeChange(node: NodeName | null) {
props.eventHandlers.onSetCaptureScenarioFilters({
node: props.captureNode,
scenario: "TwoPods",
filters: { ...props.filter, destNode: node, destPod: null },
});
props.eventHandlers.onRefreshPcapFilterString({ node: props.captureNode });
}
function handleDestPodChange(pod: FilterPod | null) {
props.eventHandlers.onSetCaptureScenarioFilters({
node: props.captureNode,
scenario: "TwoPods",
filters: { ...props.filter, destPod: pod },
});
props.eventHandlers.onRefreshPcapFilterString({ node: props.captureNode });
}
function handlePacketDirectionChange(value: string) {
// const elem = e.target as HTMLInputElement;
const packetDirection = value as DualEndpointPacketDirection;
props.eventHandlers.onSetCaptureScenarioFilters({
node: props.captureNode,
scenario: "TwoPods",
filters: { ...props.filter, packetDirection },
});
props.eventHandlers.onRefreshPcapFilterString({ node: props.captureNode });
}
const packetDirectionLabels: Record<DualEndpointPacketDirection, string> = {
Bidirectional: "Bidirectional",
SourceToDestination: "Source to destination",
};
return (
<>
<label htmlFor="source-node-input" className={styles.label}>
Source Node
</label>
<ResourceSelector<NodeName>
id="source-node-input"
className={styles.controlDropdown}
resources={lazySourceNodes}
selectedItem={props.filter.sourceNode}
valueGetter={(n) => n}
labelGetter={(n) => n}
onSelect={handleSourceNodeChange}
/>
<label htmlFor="source-pod-input" className={styles.label}>
Source Pod
</label>
<ResourceSelector<FilterPod>
id="source-pod-input"
className={styles.controlDropdown}
resources={lazySourcePods}
selectedItem={props.filter.sourcePod}
valueGetter={(p) => p.name}
labelGetter={(p) => p.name}
onSelect={handleSourcePodChange}
/>
<label htmlFor="dest-node-input" className={styles.label}>
Destination Node
</label>
<ResourceSelector<NodeName>
id="dest-node-input"
className={styles.controlDropdown}
resources={lazyDestNodes}
selectedItem={props.filter.destNode}
valueGetter={(n) => n}
labelGetter={(n) => n}
onSelect={handleDestNodeChange}
/>
<label htmlFor="dest-pod-input" className={styles.label}>
Destination Pod
</label>
<ResourceSelector<FilterPod>
id="dest-pod-input"
className={styles.controlDropdown}
resources={lazyDestPods}
selectedItem={props.filter.destPod}
valueGetter={(p) => p.name}
labelGetter={(p) => p.name}
onSelect={handleDestPodChange}
/>
<label htmlFor="packet-direction-input" className={styles.label}>
Packet Direction
</label>
<CustomDropdown
className={styles.controlDropdown}
id="packet-direction-input"
value={props.filter.packetDirection}
onChange={handlePacketDirectionChange}
>
{Object.keys(packetDirectionLabels).map((d) => (
<CustomDropdownOption
key={d}
value={d}
label={packetDirectionLabels[d as DualEndpointPacketDirection]}
/>
))}
</CustomDropdown>
</>
);
}