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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | 5684x 5684x 5684x 5684x 5684x 5684x 5684x 5684x 5684x 1x 1x 1x 1x 1x 1x 5684x 5684x 1x 1x 1x 1x 1x 5684x 5684x 1117x | import { useEffect, useMemo, useState } from "react";
import { useSearchParams } from "react-router-dom";
import { BugPlay, Check, Plus, Rows3, Play } from "lucide-react";
import {
DropdownMenuContent,
DropdownMenuItem,
// DropdownMenuSeparator, // uncomment if you want a divider
} from "../../../../../ahuora-design-system/ui/dropdown-menu";
import { useCoreScenarioCreateMutation } from "@/api/apiStore.gen";
import { useCurrentGroup } from "@/hooks/flowsheetObjects";
import { ContentTypes } from "../LeftSideBarTabDefinitions";
import { useScenarios } from "./useScenarios";
import { useSolve } from "../../Solving/useSolve";
export function ScenarioDropdown() {
const [requestSolve] = useSolve();
const currentGroup = useCurrentGroup();
const rootObjectId = currentGroup?.simulationObject;
const scenarios = useScenarios() as any;
const [searchParams, setSearchParams] = useSearchParams();
const scenarioIdParam = searchParams.get("scenario");
const selectedScenarioId = scenarioIdParam ? Number(scenarioIdParam) : undefined;
const [addScenario] = useCoreScenarioCreateMutation();
const goToScenario = (id?: number) => {
setSearchParams((params) => {
const newParams = new URLSearchParams(params);
Iif (id === undefined) {
newParams.delete("scenario");
} else {
newParams.set("scenario", id.toString());
}
newParams.set("content", ContentTypes.scenarios);
return newParams;
});
};
const runDiagnostics = () => {
requestSolve(selectedScenarioId, true);
};
const onAddScenario = async () => {
Iif (!rootObjectId) return;
const result = await addScenario({
scenario: { simulationObject: rootObjectId },
} as any);
const newScenario = (result as any)?.data;
if (newScenario?.id) {
goToScenario(newScenario.id);
}
};
const hasScenarios = scenarios?.length > 0;
return (
<DropdownMenuContent align="end">
{hasScenarios && (
<div className="flex flex-col gap-2">
<DropdownMenuItem
className="gap-2"
onClick={() => requestSolve(undefined)}
aria-label="Run Without Scenario"
>
<Play /> Run without scenario
</DropdownMenuItem>
{scenarios?.map((scenario) => (
<DropdownMenuItem
className="gap-2"
key={scenario.id}
onClick={() => goToScenario(scenario.id)}
aria-label={`Select ${scenario.displayName}`}
>
{scenario.id === selectedScenarioId ? <Check /> : <div className="w-4" />}
{scenario.displayName}
</DropdownMenuItem>
))}
</div>
)}
<DropdownMenuItem
className="gap-2"
onClick={onAddScenario}
aria-label="Add New Scenario"
>
<Plus /> Add new scenario
</DropdownMenuItem>
{hasScenarios && (
<DropdownMenuItem
className="gap-2"
onClick={() => goToScenario(undefined)}
aria-label="Show All Scenarios"
>
<Rows3 /> Show All Scenarios
</DropdownMenuItem>
)}
<DropdownMenuItem
className="gap-2"
onClick={runDiagnostics}
aria-label="Run Diagnostics"
>
<BugPlay /> Run Diagnostics
</DropdownMenuItem>
</DropdownMenuContent>
);
}
|