Skip to content

Commit 0dcb345

Browse files
committed
Always show interactive icon for stress tester too
1 parent c3fc74e commit 0dcb345

File tree

4 files changed

+87
-29
lines changed

4 files changed

+87
-29
lines changed

src/extension/providers/StressViewProvider.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,10 @@ export default class extends BaseViewProvider<typeof ProviderMessageSchema, Webv
141141
break;
142142
case "TOGGLE_VISIBILITY":
143143
this._toggleVisibility(msg);
144+
break;
145+
case "TOGGLE_INTERACTIVE":
146+
this._toggleInteractive();
147+
break;
144148
}
145149
}
146150

@@ -804,6 +808,23 @@ export default class extends BaseViewProvider<typeof ProviderMessageSchema, Webv
804808
}
805809
}
806810

811+
private _toggleInteractive() {
812+
const ctx = this._currentContext;
813+
if (!ctx) {
814+
return;
815+
}
816+
817+
// Toggle interactive mode
818+
ctx.interactiveMode = !ctx.interactiveMode;
819+
820+
// Notify webview
821+
super._postMessage({ type: "INIT", interactiveMode: ctx.interactiveMode });
822+
823+
if (this._currentFile) {
824+
void this._saveState(this._currentFile);
825+
}
826+
}
827+
807828
private _saveState(file: string) {
808829
const ctx = this._contexts.get(file);
809830
if (!ctx) {

src/shared/stress-messages.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ export const ProviderMessageTypeValues = [
7979
"CLEAR",
8080
"SAVE",
8181
"TOGGLE_VISIBILITY",
82+
"TOGGLE_INTERACTIVE",
8283
] as const;
8384

8485
export type ProviderMessageTypeValue = (typeof ProviderMessageTypeValues)[number];
@@ -127,6 +128,10 @@ export const ToggleVisibilityMessageSchema = v.object({
127128
id: v.picklist(StateIdValue),
128129
});
129130

131+
export const ToggleInteractiveMessageSchema = v.object({
132+
type: v.literal("TOGGLE_INTERACTIVE"),
133+
});
134+
130135
export const ProviderMessageSchema = v.union([
131136
LoadedMessageSchema,
132137
RunMessageSchema,
@@ -137,6 +142,7 @@ export const ProviderMessageSchema = v.union([
137142
ResetMessageSchema,
138143
SaveMessageSchema,
139144
ToggleVisibilityMessageSchema,
145+
ToggleInteractiveMessageSchema,
140146
]);
141147

142148
export type ProviderMessage = v.InferOutput<typeof ProviderMessageSchema>;

src/webview/stress/App.svelte

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,10 @@
126126
postProviderMessage({ type: "TOGGLE_VISIBILITY", id });
127127
}
128128
129+
function handleToggleInteractive() {
130+
postProviderMessage({ type: "TOGGLE_INTERACTIVE" });
131+
}
132+
129133
function handleInteractiveModeChange(e: Event) {
130134
const target = e.target as HTMLInputElement;
131135
interactiveMode = target.checked;
@@ -207,6 +211,7 @@
207211
onAdd={handleAdd}
208212
onOpen={handleOpen}
209213
onToggleVisibility={handleToggleVisibility}
214+
onToggleInteractive={handleToggleInteractive}
210215
/>
211216
<State
212217
id={item.id}

src/webview/stress/StateToolbar.svelte

Lines changed: 55 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,19 @@
1111
onAdd: (id: StateId) => void;
1212
onOpen: (id: StateId) => void;
1313
onToggleVisibility: (id: StateId) => void;
14+
onToggleInteractive: () => void;
1415
}
1516
16-
let { id, status, interactiveMode, shown, onAdd, onOpen, onToggleVisibility }: Props = $props();
17+
let {
18+
id,
19+
status,
20+
interactiveMode,
21+
shown,
22+
onAdd,
23+
onOpen,
24+
onToggleVisibility,
25+
onToggleInteractive,
26+
}: Props = $props();
1727
1828
function handleAdd() {
1929
onAdd(id);
@@ -27,6 +37,10 @@
2737
onToggleVisibility(id);
2838
}
2939
40+
function handleToggleInteractive() {
41+
onToggleInteractive();
42+
}
43+
3044
// Derived value for whether details should be shown
3145
const showDetails = $derived(shown);
3246
</script>
@@ -40,13 +54,16 @@
4054
</div>
4155
<p class="state-badge-text state-badge-text-id">{id}</p>
4256
</div>
43-
{#if interactiveMode}
44-
<div class="state-badge state-status" data-status="CE">
45-
<div class="state-toolbar-icon state-toolbar-icon-exclude-highlight">
46-
<div class="codicon codicon-bolded codicon-chat-sparkle"></div>
47-
</div>
48-
</div>
49-
{/if}
57+
<div class="state-badge state-status" data-status={interactiveMode ? "CE" : "NA"}>
58+
<button
59+
class="state-toolbar-icon state-toolbar-icon-exclude-highlight"
60+
data-tooltip={interactiveMode ? "Make Non-Interactive" : "Make Interactive"}
61+
aria-label={interactiveMode ? "Make Non-Interactive" : "Make Interactive"}
62+
onclick={handleToggleInteractive}
63+
>
64+
<div class="codicon codicon-bolded codicon-chat-sparkle"></div>
65+
</button>
66+
</div>
5067
<div class="state-badge state-status" data-status={status}>
5168
<div class="state-toolbar-icon state-toolbar-icon-exclude-highlight">
5269
<div class="codicon codicon-loading codicon-modifier-spin"></div>
@@ -78,13 +95,16 @@
7895
</div>
7996
<p class="state-badge-text state-badge-text-id">{id}</p>
8097
</div>
81-
{#if interactiveMode}
82-
<div class="state-badge state-status" data-status="CE">
83-
<div class="state-toolbar-icon state-toolbar-icon-exclude-highlight">
84-
<div class="codicon codicon-bolded codicon-chat-sparkle"></div>
85-
</div>
86-
</div>
87-
{/if}
98+
<div class="state-badge state-status" data-status={interactiveMode ? "CE" : "NA"}>
99+
<button
100+
class="state-toolbar-icon state-toolbar-icon-exclude-highlight"
101+
data-tooltip={interactiveMode ? "Make Non-Interactive" : "Make Interactive"}
102+
aria-label={interactiveMode ? "Make Non-Interactive" : "Make Interactive"}
103+
onclick={handleToggleInteractive}
104+
>
105+
<div class="codicon codicon-bolded codicon-chat-sparkle"></div>
106+
</button>
107+
</div>
88108
<div class="state-toolbar-icon state-toolbar-icon-exclude-highlight">
89109
<div class="codicon codicon-loading codicon-modifier-spin"></div>
90110
</div>
@@ -113,13 +133,16 @@
113133
</div>
114134
<p class="state-badge-text state-badge-text-id">{id}</p>
115135
</div>
116-
{#if interactiveMode}
117-
<div class="state-badge state-status" data-status="CE">
118-
<div class="state-toolbar-icon state-toolbar-icon-exclude-highlight">
119-
<div class="codicon codicon-bolded codicon-chat-sparkle"></div>
120-
</div>
121-
</div>
122-
{/if}
136+
<div class="state-badge state-status" data-status={interactiveMode ? "CE" : "NA"}>
137+
<button
138+
class="state-toolbar-icon state-toolbar-icon-exclude-highlight"
139+
data-tooltip={interactiveMode ? "Make Non-Interactive" : "Make Interactive"}
140+
aria-label={interactiveMode ? "Make Non-Interactive" : "Make Interactive"}
141+
onclick={handleToggleInteractive}
142+
>
143+
<div class="codicon codicon-bolded codicon-chat-sparkle"></div>
144+
</button>
145+
</div>
123146
<div class="state-badge state-status" data-status={status}>
124147
<div class="state-toolbar-icon state-toolbar-icon-exclude-highlight">
125148
<div class="codicon codicon-bolded codicon-terminal-bash"></div>
@@ -169,13 +192,16 @@
169192
<p class="state-badge-text">{status}</p>
170193
</div>
171194
{/if}
172-
{#if interactiveMode}
173-
<div class="state-badge state-status" data-status="CE">
174-
<div class="state-toolbar-icon state-toolbar-icon-exclude-highlight">
175-
<div class="codicon codicon-bolded codicon-chat-sparkle"></div>
176-
</div>
177-
</div>
178-
{/if}
195+
<div class="state-badge state-status" data-status={interactiveMode ? "CE" : "NA"}>
196+
<button
197+
class="state-toolbar-icon state-toolbar-icon-exclude-highlight"
198+
data-tooltip={interactiveMode ? "Make Non-Interactive" : "Make Interactive"}
199+
aria-label={interactiveMode ? "Make Non-Interactive" : "Make Interactive"}
200+
onclick={handleToggleInteractive}
201+
>
202+
<div class="codicon codicon-bolded codicon-chat-sparkle"></div>
203+
</button>
204+
</div>
179205
</div>
180206
<div class="state-toolbar-right">
181207
<button

0 commit comments

Comments
 (0)