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 | 76x 12796x 12796x 12796x 12796x 12796x 12796x 12796x 12796x 12796x 74x 11x 38388x 12796x 74x 38388x 12796x 81x 12796x 25592x 22x 12774x 12855x 226x 13000x 12774x 76644x 226x 226x 12855x 12774x 13226x 12774x 13000x 38322x | 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>
);
}
|