Skip to content

Commit 3a38dbd

Browse files
Welcome Page AI Option Checkbox Should Always Be Visible and Reflect Tenant-Level State in VS Code IDEl AST-119974) (#1330)
1 parent 6b9edbb commit 3a38dbd

File tree

5 files changed

+33
-78
lines changed

5 files changed

+33
-78
lines changed

media/icons/tabler-icon-check.svg

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

media/icons/tabler-icon-uncheck.svg

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

media/welcomePage.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,3 +154,9 @@ body[data-vscode-theme-kind*="light"] .feature-card {
154154
justify-content: flex-start;
155155
padding-left: 7px;
156156
}
157+
158+
/* AI feature toggle checkbox styling */
159+
#aiFeatureToggle,
160+
.status-icon-checkbox {
161+
transform: scale(1.25);
162+
}

media/welcomePage.js

Lines changed: 21 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
let serverEnabled = false;
66

77
window.addEventListener("DOMContentLoaded", () => {
8-
const checkIcon = document.getElementById("aiFeatureCheckIcon");
9-
const uncheckIcon = document.getElementById("aiFeatureUncheckIcon");
8+
const checkbox = document.getElementById("aiFeatureToggle");
109
const loader = document.getElementById("aiFeatureLoader");
1110
const aiBoxInfo = document.getElementById("aiFeatureStatusBox");
1211
const aiFeatureBoxWrapper = document.getElementById("aiFeatureBoxWrapper");
@@ -25,37 +24,23 @@
2524

2625
currentState = newState;
2726

28-
if (newState) {
29-
checkIcon.classList.remove("hidden");
30-
uncheckIcon.classList.add("hidden");
31-
} else {
32-
checkIcon.classList.add("hidden");
33-
uncheckIcon.classList.remove("hidden");
27+
if (checkbox) {
28+
checkbox.checked = newState;
3429
}
3530

36-
checkIcon.setAttribute("aria-pressed", newState.toString());
37-
uncheckIcon.setAttribute("aria-pressed", (!newState).toString());
38-
3931
vscode.postMessage({ type: "changeAllScannersStatus", value: newState });
4032
}
4133

42-
checkIcon.addEventListener("click", () => toggleScannerState(false));
43-
uncheckIcon.addEventListener("click", () => toggleScannerState(true));
44-
45-
function handleKeydown(event, targetState) {
46-
if (event.key === "Enter" || event.key === " ") {
47-
event.preventDefault();
48-
toggleScannerState(targetState);
49-
}
34+
if (checkbox) {
35+
checkbox.addEventListener("change", () => {
36+
if (!serverEnabled) {
37+
checkbox.checked = false;
38+
return;
39+
}
40+
toggleScannerState(checkbox.checked);
41+
});
5042
}
5143

52-
checkIcon.addEventListener("keydown", (event) =>
53-
handleKeydown(event, false)
54-
);
55-
uncheckIcon.addEventListener("keydown", (event) =>
56-
handleKeydown(event, true)
57-
);
58-
5944
if (previousState.aiFeatureLoaded) {
6045
loader.classList.add("hidden");
6146
handleSetAiFeatureState(previousState.lastAiState);
@@ -75,14 +60,21 @@
7560
function handleSetAiFeatureState(message) {
7661
loader.classList.add("hidden");
7762
serverEnabled = message.enabled;
63+
if (checkbox) {
64+
checkbox.classList.remove("hidden");
65+
}
7866

7967
if (message.enabled) {
8068
toggleScannerState(message.scannersSettings);
81-
82-
checkIcon.style.cursor = "pointer";
83-
uncheckIcon.style.cursor = "pointer";
69+
if (checkbox) {
70+
checkbox.disabled = false;
71+
checkbox.style.cursor = "pointer";
72+
}
8473
} else {
8574
toggleScannerState(false);
75+
if (checkbox) {
76+
checkbox.disabled = true;
77+
}
8678
aiBoxInfo.classList.remove("hidden");
8779
aiFeatureBoxWrapper.classList.remove("hidden");
8880
}

src/welcomePage/welcomeWebview.ts

Lines changed: 6 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ export class WelcomeWebview {
1010
bootstrapCssUri: vscode.Uri,
1111
scannerImgUri: vscode.Uri,
1212
aiBoxinfo: vscode.Uri,
13-
checkSvgUri: vscode.Uri,
14-
uncheckSvgUri: vscode.Uri,
1513
doubleCheckUri: vscode.Uri,
1614
cssUri: vscode.Uri,
1715
jsUri: vscode.Uri,
@@ -50,25 +48,12 @@ export class WelcomeWebview {
5048
>
5149
<span class="visually-hidden">Loading...</span>
5250
</div>
53-
<img
54-
id="aiFeatureCheckIcon"
55-
class="status-icon-img hidden"
56-
src="${checkSvgUri}"
57-
alt="Real-time scanners enabled"
58-
role="button"
59-
tabindex="0"
60-
aria-pressed="true"
61-
aria-label="Real-time scanners are currently enabled. Click to disable all scanners."
62-
/>
63-
<img
64-
id="aiFeatureUncheckIcon"
65-
class="status-icon-img hidden"
66-
src="${uncheckSvgUri}"
67-
alt="Real-time scanners disabled"
68-
role="button"
69-
tabindex="0"
70-
aria-pressed="false"
71-
aria-label="Real-time scanners are currently disabled. Click to enable all scanners."
51+
<input
52+
id="aiFeatureToggle"
53+
type="checkbox"
54+
class="status-icon-checkbox hidden"
55+
aria-label="Toggle real-time scanners"
56+
title="Toggle real-time scanners"
7257
/>
7358
</div>
7459
<span class="card-title">Code Smarter with Checkmarx One Assist</span>
@@ -175,23 +160,6 @@ export class WelcomeWebview {
175160
)
176161
);
177162

178-
const checkSvgUri = panel.webview.asWebviewUri(
179-
vscode.Uri.joinPath(
180-
context.extensionUri,
181-
"media",
182-
"icons",
183-
"tabler-icon-check.svg"
184-
)
185-
);
186-
187-
const uncheckSvgUri = panel.webview.asWebviewUri(
188-
vscode.Uri.joinPath(
189-
context.extensionUri,
190-
"media",
191-
"icons",
192-
"tabler-icon-uncheck.svg"
193-
)
194-
);
195163

196164
const doubleCheckUri = panel.webview.asWebviewUri(
197165
vscode.Uri.joinPath(
@@ -227,8 +195,6 @@ export class WelcomeWebview {
227195
bootstrapCssUri,
228196
scannerImgUri,
229197
aiBoxinfo,
230-
checkSvgUri,
231-
uncheckSvgUri,
232198
doubleCheckUri,
233199
cssUri,
234200
jsUri,
@@ -272,8 +238,6 @@ export class WelcomeWebview {
272238
bootstrapCssUri,
273239
newScannerImgUri,
274240
newAiBoxinfo,
275-
checkSvgUri,
276-
uncheckSvgUri,
277241
newDoubleCheckUri,
278242
cssUri,
279243
jsUri,

0 commit comments

Comments
 (0)