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 | 103x 13098x 13098x 13098x 13098x 13098x 13098x 13098x 13098x 13098x 80x 13x 39294x 13098x 80x 39294x 13098x 136x 13098x 26196x 184x 12914x 13039x 278x 13192x 12914x 77484x 278x 278x 13039x 12914x 13470x 12914x 13192x 38742x | import { defineCommand, useRegisterCommand } from "just-search-it";
import { ChevronDown, Play } from "lucide-react";
import { useCallback } from "react";
import { useLocalStorage } from "usehooks-ts";
import { Button } from "@/ahuora-design-system/ui/button";
import { Spinner } from "@/ahuora-design-system/ui/spinner";
import { ToolTipCover } from "@/ahuora-design-system/ui/tooltip";
import { useFlowsheetAccess } from "@/hooks/flowsheetAccess";
import {
DropdownMenu,
DropdownMenuTrigger,
} from "../../../ahuora-design-system/ui/dropdown-menu";
import { cn } from "../../../lib/utils";
import { ScenarioDropdown } from "./LeftSideBar/Scenarios/ScenarioDropdown";
import { useCurrentScenario } from "./LeftSideBar/Scenarios/useCurrentScenario";
import { useSolve } from "./Solving/useSolve";
const solveCommand = defineCommand<[], void>("solve");
export default function SolveButton({ className }: { className?: string }) {
const [solve, solveRunning] = useSolve();
const access = useFlowsheetAccess();
const canMutate = access?.can_edit ?? true;
const scenario = useCurrentScenario();
const scenarioNumber = scenario?.id;
const [, setScenarioOpen] = useLocalStorage("scenario-result-open", false);
const solveDisabled = solveRunning;
const executeSolve = useCallback(
(targetScenario?: number) => {
solve(targetScenario);
if (targetScenario) {
setScenarioOpen(true);
}
},
[setScenarioOpen, solve],
);
const handleClick = () => {
executeSolve(scenarioNumber);
};
useRegisterCommand(
solveCommand,
{
name: "Solve",
description:
"Solve the flowsheet in steady-state with the current parameters.",
group: "Solving",
icon: <Play className="icon-ls" />,
},
() => {
executeSolve(undefined);
},
);
if (!canMutate) {
return null;
}
return (
<div className="h-full">
<ToolTipCover content={"Click to solve flowsheet."} asChild side="bottom">
<Button
size="sm"
className={cn(className, "rounded-r-none")}
onClick={handleClick}
disabled={solveDisabled}
>
{solveRunning ? (
<Spinner size="small" color="white" />
) : (
<Play size={20} />
)}
Run {scenario && ` ${scenario.displayName}`}
</Button>
</ToolTipCover>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button
size="sm"
aria-label="Select Scenario"
className={cn(className, "rounded-l-none")}
disabled={solveDisabled}
>
<ChevronDown />
</Button>
</DropdownMenuTrigger>
<ScenarioDropdown />
</DropdownMenu>
</div>
);
}
|