Make node.js setup have a more explicit error state

This commit is contained in:
Will Chen
2025-04-23 13:21:49 -07:00
parent d651a6aa7e
commit a7b3e66499

View File

@@ -27,7 +27,8 @@ import { usePostHog } from "posthog-js/react";
type NodeInstallStep = type NodeInstallStep =
| "install" | "install"
| "waiting-for-continue" | "waiting-for-continue"
| "continue-processing"; | "continue-processing"
| "finished-checking";
export function SetupBanner() { export function SetupBanner() {
const posthog = usePostHog(); const posthog = usePostHog();
@@ -81,6 +82,7 @@ export function SetupBanner() {
setNodeInstallStep("continue-processing"); setNodeInstallStep("continue-processing");
await IpcClient.getInstance().reloadEnvPath(); await IpcClient.getInstance().reloadEnvPath();
await checkNode(); await checkNode();
setNodeInstallStep("finished-checking");
}, [checkNode, setNodeInstallStep]); }, [checkNode, setNodeInstallStep]);
// We only check for node version because pnpm is not required for the app to run. // We only check for node version because pnpm is not required for the app to run.
@@ -185,22 +187,11 @@ export function SetupBanner() {
. .
</p> </p>
)} )}
{nodeInstallStep === "install" ? ( <NodeInstallButton
<Button className="mt-3" onClick={handleNodeInstallClick}> nodeInstallStep={nodeInstallStep}
Install Node.js Runtime handleNodeInstallClick={handleNodeInstallClick}
</Button> finishNodeInstall={finishNodeInstall}
) : ( />
<Button className="mt-3" onClick={finishNodeInstall}>
{nodeInstallStep === "continue-processing" ? (
<div className="flex items-center gap-2">
<Loader2 className="h-4 w-4 animate-spin" />
Checking Node.js setup...
</div>
) : (
"Continue | I installed Node.js"
)}
</Button>
)}
</div> </div>
)} )}
<NodeJsHelpCallout /> <NodeJsHelpCallout />
@@ -313,3 +304,47 @@ function NodeJsHelpCallout() {
</div> </div>
); );
} }
function NodeInstallButton({
nodeInstallStep,
handleNodeInstallClick,
finishNodeInstall,
}: {
nodeInstallStep: NodeInstallStep;
handleNodeInstallClick: () => void;
finishNodeInstall: () => void;
}) {
switch (nodeInstallStep) {
case "install":
return (
<Button className="mt-3" onClick={handleNodeInstallClick}>
Install Node.js Runtime
</Button>
);
case "continue-processing":
return (
<Button className="mt-3" onClick={finishNodeInstall} disabled>
<div className="flex items-center gap-2">
<Loader2 className="h-4 w-4 animate-spin" />
Checking Node.js setup...
</div>
</Button>
);
case "waiting-for-continue":
return (
<Button className="mt-3" onClick={finishNodeInstall}>
<div className="flex items-center gap-2">
Continue | I installed Node.js
</div>
</Button>
);
case "finished-checking":
return (
<div className="mt-3 text-sm text-red-600 dark:text-red-400">
Node.js not detected. Closing and re-opening Dyad usually fixes this.
</div>
);
default:
const _exhaustiveCheck: never = nodeInstallStep;
}
}