Skip to content

Commit de2a6a8

Browse files
committed
More refactors
1 parent e6eea07 commit de2a6a8

File tree

9 files changed

+166
-284
lines changed

9 files changed

+166
-284
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ yarn-debug.log*
66
yarn-error.log*
77
lerna-debug.log*
88
.pnpm-debug.log*
9+
*.local.*
910

1011
# Diagnostic reports (https://nodejs.org/api/report.html)
1112
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

CLAUDE.md

Lines changed: 0 additions & 168 deletions
This file was deleted.

extension/src/components/Header.tsx

Lines changed: 25 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,41 @@
11
import { StatusIndicator } from "./StatusIndicator";
22
import { Button } from "./Button";
3-
import { ConnectionStatus } from "../types";
3+
import { connectionStore } from "../models/ConnectionModel";
4+
import { updatesStore } from "../models/UpdatesModel";
45

56
interface HeaderProps {
6-
connectionStatus: ConnectionStatus;
7-
onClear?: () => void;
8-
onTogglePause?: () => void;
97
onToggleSettings?: () => void;
10-
isPaused?: boolean;
11-
showControls?: boolean;
12-
title?: string;
13-
subtitle?: string;
148
}
159

16-
export function Header({
17-
connectionStatus,
18-
onClear,
19-
onTogglePause,
20-
onToggleSettings,
21-
isPaused = false,
22-
showControls = true,
23-
title = "Preact Signals",
24-
subtitle,
25-
}: HeaderProps) {
10+
export function Header({ onToggleSettings }: HeaderProps) {
11+
const onTogglePause = () => {
12+
connectionStore.isPaused = !connectionStore.isPaused;
13+
};
14+
15+
const onClear = () => {
16+
updatesStore.clearUpdates();
17+
};
18+
2619
return (
2720
<header className="header">
2821
<div className="header-title">
29-
<h1>{title}</h1>
30-
{subtitle && <p>{subtitle}</p>}
22+
<h1>Signals</h1>
3123
<StatusIndicator
32-
status={connectionStatus.status}
33-
message={connectionStatus.message}
24+
status={connectionStore.status}
25+
message={connectionStore.message}
3426
/>
3527
</div>
36-
{showControls && (
37-
<div className="header-controls">
38-
{onClear && <Button onClick={onClear}>Clear</Button>}
39-
{onTogglePause && (
40-
<Button onClick={onTogglePause} active={isPaused}>
41-
{isPaused ? "Resume" : "Pause"}
42-
</Button>
43-
)}
44-
{onToggleSettings && (
45-
<Button onClick={onToggleSettings}>Settings</Button>
46-
)}
47-
</div>
48-
)}
28+
<div className="header-controls">
29+
{onClear && <Button onClick={onClear}>Clear</Button>}
30+
{onTogglePause && (
31+
<Button onClick={onTogglePause} active={connectionStore.isPaused}>
32+
{connectionStore.isPaused ? "Resume" : "Pause"}
33+
</Button>
34+
)}
35+
{onToggleSettings && (
36+
<Button onClick={onToggleSettings}>Settings</Button>
37+
)}
38+
</div>
4939
</header>
5040
);
5141
}

extension/src/components/SettingsPanel.tsx

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import { useState, useEffect } from "preact/hooks";
1+
import { Signal, useSignal, useSignalEffect } from "@preact/signals";
22
import { Button } from "./Button";
33
import { Settings } from "../types";
44

55
interface SettingsPanelProps {
6-
isVisible: boolean;
7-
settings: Settings;
6+
isVisible: Signal<boolean>;
7+
settings: Signal<Settings>;
88
onApply: (settings: Settings) => void;
99
onCancel: () => void;
1010
}
@@ -15,17 +15,19 @@ export function SettingsPanel({
1515
onApply,
1616
onCancel,
1717
}: SettingsPanelProps) {
18-
const [localSettings, setLocalSettings] = useState<Settings>(settings);
18+
const localSettings = useSignal<Settings>(settings.value);
1919

20-
useEffect(() => {
21-
setLocalSettings(settings);
22-
}, [settings]);
20+
useSignalEffect(() => {
21+
localSettings.value = settings.value;
22+
});
2323

2424
const handleApply = () => {
25-
onApply(localSettings);
25+
onApply(localSettings.value);
2626
};
2727

28-
if (!isVisible) return null;
28+
if (!isVisible.value) {
29+
return null;
30+
}
2931

3032
return (
3133
<div className="settings-panel">
@@ -36,10 +38,10 @@ export function SettingsPanel({
3638
<label>
3739
<input
3840
type="checkbox"
39-
checked={localSettings.enabled}
41+
checked={localSettings.value.enabled}
4042
onChange={e =>
41-
setLocalSettings({
42-
...localSettings,
43+
(localSettings.value = {
44+
...localSettings.value,
4345
enabled: (e.target as HTMLInputElement).checked,
4446
})
4547
}
@@ -52,10 +54,10 @@ export function SettingsPanel({
5254
<label>
5355
<input
5456
type="checkbox"
55-
checked={localSettings.grouped}
57+
checked={localSettings.value.grouped}
5658
onChange={e =>
57-
setLocalSettings({
58-
...localSettings,
59+
(localSettings.value = {
60+
...localSettings.value,
5961
grouped: (e.target as HTMLInputElement).checked,
6062
})
6163
}
@@ -69,12 +71,12 @@ export function SettingsPanel({
6971
<input
7072
type="number"
7173
id="maxUpdatesInput"
72-
value={localSettings.maxUpdatesPerSecond}
74+
value={localSettings.value.maxUpdatesPerSecond}
7375
min="1"
7476
max="1000"
7577
onChange={e =>
76-
setLocalSettings({
77-
...localSettings,
78+
(localSettings.value = {
79+
...localSettings.value,
7880
maxUpdatesPerSecond:
7981
parseInt((e.target as HTMLInputElement).value) || 60,
8082
})
@@ -89,10 +91,10 @@ export function SettingsPanel({
8991
<textarea
9092
id="filterPatternsInput"
9193
placeholder="user.*&#10;.*State$&#10;global"
92-
value={localSettings.filterPatterns.join("\n")}
94+
value={localSettings.value.filterPatterns.join("\n")}
9395
onChange={e =>
94-
setLocalSettings({
95-
...localSettings,
96+
(localSettings.value = {
97+
...localSettings.value,
9698
filterPatterns: (e.target as HTMLTextAreaElement).value
9799
.split("\n")
98100
.map(pattern => pattern.trim())

0 commit comments

Comments
 (0)