All files / src/pages/flowsheet-page/dynamics/results-panel/components ResultObjectPicker.tsx

77.77% Statements 28/36
82.6% Branches 19/23
16.66% Functions 1/6
79.16% Lines 19/24

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81                            103x               168x                 42x     42x     42x         42x 42x 42x 42x 42x   18x         42x 42x 42x                   42x                 504x 168x 252x 168x      
import {
  Select,
  SelectContent,
  SelectGroup,
  SelectItem,
  SelectLabel,
  SelectTrigger,
  SelectValue,
} from "@/ahuora-design-system/ui/select";
import {
  ObjectTypeEnum,
  SimulationObjectRetrieveRead,
} from "@/api/apiStore.gen";
 
const STREAM_OBJECT_TYPES = new Set<ObjectTypeEnum>([
  ObjectTypeEnum.Stream,
  ObjectTypeEnum.HumidAirStream,
  ObjectTypeEnum.EnergyStream,
  ObjectTypeEnum.AcStream,
  ObjectTypeEnum.TransformerStream,
]);
 
export function ResultObjectPicker({
  objects,
  onObjectChange,
  selectedObjectId,
}: {
  objects: SimulationObjectRetrieveRead[];
  onObjectChange: (objectId: string) => void;
  selectedObjectId: number | undefined;
}) {
  const selectableObjects = objects.filter(
    (object) => object.objectType !== ObjectTypeEnum.Group,
  );
  const streamObjects = selectableObjects.filter((object) =>
    STREAM_OBJECT_TYPES.has(object.objectType),
  );
  const unitOperationObjects = selectableObjects.filter(
    (object) => !STREAM_OBJECT_TYPES.has(object.objectType),
  );
 
  return (
    <div className="flex min-w-0 items-center gap-2">
      <span className="text-sm font-medium text-muted-foreground">Object</span>
      <Select
        value={selectedObjectId ? String(selectedObjectId) : undefined}
        onValueChange={onObjectChange}
      >
        <SelectTrigger
          aria-label="Scenario result object"
          className="h-8 w-52 rounded-md border px-2 py-1 text-sm"
        >
          <SelectValue placeholder="Select object" />
        </SelectTrigger>
        <SelectContent>
          {streamObjects.length > 0 && (
            <SelectGroup>
              <SelectLabel>Streams</SelectLabel>
              {streamObjects.map((object) => (
                <SelectItem key={object.id} value={String(object.id)}>
                  {object.componentName}
                </SelectItem>
              ))}
            </SelectGroup>
          )}
          {unitOperationObjects.length > 0 && (
            <SelectGroup>
              <SelectLabel>Unit operations</SelectLabel>
              {unitOperationObjects.map((object) => (
                <SelectItem key={object.id} value={String(object.id)}>
                  {object.componentName}
                </SelectItem>
              ))}
            </SelectGroup>
          )}
        </SelectContent>
      </Select>
    </div>
  );
}