Create a specific widget for network filters
This commit is contained in:
		
							
								
								
									
										32
									
								
								virtweb_frontend/src/widgets/forms/NWFilterSelectInput.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								virtweb_frontend/src/widgets/forms/NWFilterSelectInput.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
import { NWFilter } from "../../api/NWFilterApi";
 | 
			
		||||
import { SelectInput } from "./SelectInput";
 | 
			
		||||
 | 
			
		||||
export function NWFilterSelectInput(p: {
 | 
			
		||||
  editable: boolean;
 | 
			
		||||
  label?: string;
 | 
			
		||||
  nwfilters: NWFilter[];
 | 
			
		||||
  value?: string;
 | 
			
		||||
  onChange?: (name?: string) => void;
 | 
			
		||||
  canBeNull: boolean;
 | 
			
		||||
}): React.ReactElement {
 | 
			
		||||
  return (
 | 
			
		||||
    <SelectInput
 | 
			
		||||
      editable={p.editable}
 | 
			
		||||
      label={p.label ?? "Network filter"}
 | 
			
		||||
      value={p.value}
 | 
			
		||||
      onValueChange={(v) => p.onChange?.(v)}
 | 
			
		||||
      options={[
 | 
			
		||||
        ...(p.canBeNull
 | 
			
		||||
          ? [{ label: "No network filer", value: undefined }]
 | 
			
		||||
          : []),
 | 
			
		||||
        ...p.nwfilters.map((v) => {
 | 
			
		||||
          return {
 | 
			
		||||
            value: v.name,
 | 
			
		||||
            label: `${v.name} (${v.chain?.protocol ?? "unspecified"})`,
 | 
			
		||||
            description: `${v.rules.length} rules - ${v.join_filters.length} joint filters`,
 | 
			
		||||
          };
 | 
			
		||||
        }),
 | 
			
		||||
      ]}
 | 
			
		||||
    />
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
@@ -21,6 +21,7 @@ import { MACInput } from "./MACInput";
 | 
			
		||||
import { SelectInput } from "./SelectInput";
 | 
			
		||||
import { VMNetworkFilterParameters } from "./VMNetworkFilterParameters";
 | 
			
		||||
import { EditSection } from "./EditSection";
 | 
			
		||||
import { NWFilterSelectInput } from "./NWFilterSelectInput";
 | 
			
		||||
 | 
			
		||||
export function VMNetworksList(p: {
 | 
			
		||||
  vm: VMInfo;
 | 
			
		||||
@@ -174,11 +175,11 @@ function NetworkInfoWidget(p: {
 | 
			
		||||
            />
 | 
			
		||||
 | 
			
		||||
            {/* Network Filter */}
 | 
			
		||||
            <SelectInput
 | 
			
		||||
            <NWFilterSelectInput
 | 
			
		||||
              editable={p.editable}
 | 
			
		||||
              label="Network filter"
 | 
			
		||||
              value={p.network.nwfilterref?.name}
 | 
			
		||||
              onValueChange={(v) => {
 | 
			
		||||
              onChange={(v) => {
 | 
			
		||||
                if (v && !p.network.nwfilterref) {
 | 
			
		||||
                  p.network.nwfilterref = { name: v, parameters: [] };
 | 
			
		||||
                } else if (v) {
 | 
			
		||||
@@ -188,16 +189,8 @@ function NetworkInfoWidget(p: {
 | 
			
		||||
                }
 | 
			
		||||
                p.onChange?.();
 | 
			
		||||
              }}
 | 
			
		||||
              options={[
 | 
			
		||||
                { label: "No network filer", value: undefined },
 | 
			
		||||
                ...p.networkFiltersList.map((v) => {
 | 
			
		||||
                  return {
 | 
			
		||||
                    value: v.name,
 | 
			
		||||
                    label: `${v.name} (${v.chain?.protocol ?? "unspecified"})`,
 | 
			
		||||
                    description: `${v.rules.length} rules - ${v.join_filters.length} joint filters`,
 | 
			
		||||
                  };
 | 
			
		||||
                }),
 | 
			
		||||
              ]}
 | 
			
		||||
              canBeNull={true}
 | 
			
		||||
              nwfilters={p.networkFiltersList}
 | 
			
		||||
            />
 | 
			
		||||
 | 
			
		||||
            {p.network.nwfilterref && (
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user