Skip to content

Commit 98f7474

Browse files
author
Dylan Huang
committed
looks good
1 parent ac83ce6 commit 98f7474

4 files changed

Lines changed: 487 additions & 17 deletions

File tree

vite-app/src/App.tsx

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { useEffect, useRef } from "react";
22
import { makeAutoObservable } from "mobx";
33
import { observer } from "mobx-react";
44
import Dashboard from "./components/Dashboard";
5+
import Button from "./components/Button";
6+
import StatusIndicator from "./components/StatusIndicator";
57
import { EvaluationRowSchema, type EvaluationRow } from "./types/eval-protocol";
68
import { WebSocketServerMessageSchema } from "./types/websocket";
79

@@ -97,6 +99,18 @@ const App = observer(() => {
9799
}, delay);
98100
};
99101

102+
// Manual refresh handler
103+
const handleManualRefresh = () => {
104+
if (wsRef.current) {
105+
try {
106+
wsRef.current.onclose = null; // Prevent triggering reconnect logic
107+
wsRef.current.close();
108+
} catch (e) {}
109+
wsRef.current = null;
110+
}
111+
connectWebSocket();
112+
};
113+
100114
useEffect(() => {
101115
connectWebSocket();
102116

@@ -120,21 +134,11 @@ const App = observer(() => {
120134
Eval Protocol Logs
121135
</h1>
122136
</div>
123-
<div className="flex items-center">
124-
<div
125-
className={`inline-flex items-center px-2 py-0.5 rounded text-xs font-medium ${
126-
state.isConnected
127-
? "bg-green-100 text-green-700"
128-
: "bg-red-100 text-red-700"
129-
}`}
130-
>
131-
<div
132-
className={`w-1 h-1 rounded-full mr-1 ${
133-
state.isConnected ? "bg-green-500" : "bg-red-500"
134-
}`}
135-
></div>
136-
{state.isConnected ? "Connected" : "Disconnected"}
137-
</div>
137+
<div className="flex items-center gap-2">
138+
<StatusIndicator isConnected={state.isConnected} />
139+
<Button onClick={handleManualRefresh} className="ml-2">
140+
Refresh
141+
</Button>
138142
</div>
139143
</div>
140144
</div>

vite-app/src/components/Button.tsx

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import React from "react";
2+
3+
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
4+
variant?: "primary" | "secondary";
5+
size?: "sm" | "md";
6+
}
7+
8+
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
9+
(
10+
{ className = "", variant = "secondary", size = "sm", children, ...props },
11+
ref
12+
) => {
13+
const baseClasses = "border text-xs font-medium focus:outline-none";
14+
15+
const variantClasses = {
16+
primary: "border-gray-300 bg-gray-100 text-gray-700 hover:bg-gray-200",
17+
secondary: "border-gray-300 bg-gray-100 text-gray-700 hover:bg-gray-200",
18+
};
19+
20+
const sizeClasses = {
21+
sm: "px-2 py-0.5",
22+
md: "px-3 py-1",
23+
};
24+
25+
return (
26+
<button
27+
ref={ref}
28+
className={`${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${className}`}
29+
style={{ boxShadow: "none" }}
30+
{...props}
31+
>
32+
{children}
33+
</button>
34+
);
35+
}
36+
);
37+
38+
Button.displayName = "Button";
39+
40+
export default Button;

0 commit comments

Comments
 (0)