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 117 118 119 120 121 122 123 124 125 | 9522x 9522x 9522x 9522x 9522x 9522x 9522x 9522x 10323x 9522x 9522x 9522x 1x 1x 1x 1x 10323x 9522x 38088x 9522x 1x 1x 1x 13018x 9522x 1619x 66654x 9522x 9522x 11270x 11178x 9522x 9522x 28566x 47610x | import { BugPlay, Check, Play, Plus, Rows3 } from "lucide-react";
import { useSearchParams } from "react-router-dom";
import { useCoreScenarioCreateMutation } from "@/api/apiStore.gen";
import { useFlowsheetAccess } from "@/hooks/flowsheetAccess";
import { useCurrentGroup } from "@/hooks/flowsheetObjects";
import {
DropdownMenuContent,
DropdownMenuItem,
// DropdownMenuSeparator, // uncomment if you want a divider
} from "../../../../../ahuora-design-system/ui/dropdown-menu";
import { useSolve } from "../../Solving/useSolve";
import { ContentTypes } from "../LeftSideBarTabDefinitions";
import { useScenarios } from "./useScenarios";
export function ScenarioDropdown() {
const [requestSolve] = useSolve();
const access = useFlowsheetAccess();
const canMutate = access?.can_edit ?? true;
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);
if (id === undefined) {
newParams.delete("scenario");
} else {
newParams.set("scenario", id.toString());
}
newParams.set("content", ContentTypes.scenarios);
return newParams;
});
};
const runDiagnostics = () => {
Iif (!canMutate) return;
requestSolve(selectedScenarioId, true);
};
const onAddScenario = async () => {
Iif (!canMutate) return;
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"
disabled={!canMutate}
>
<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"
disabled={!canMutate}
>
<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"
disabled={!canMutate}
>
<BugPlay /> Run Diagnostics
</DropdownMenuItem>
</DropdownMenuContent>
);
}
|