Skip to content

Commit 802f539

Browse files
committed
Enhance SessionsWalkthroughOverlay to manage disclaimer links and focusable elements more effectively
1 parent 7808e42 commit 802f539

1 file changed

Lines changed: 14 additions & 5 deletions

File tree

src/vs/sessions/contrib/welcome/browser/sessionsWalkthrough.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,10 @@ export class SessionsWalkthroughOverlay extends Disposable {
3535
private readonly contentContainer: HTMLElement;
3636
private readonly footerContainer: HTMLElement;
3737
private readonly disclaimerElement: HTMLElement;
38+
private readonly disclaimerLinks: readonly HTMLAnchorElement[];
3839
private readonly stepDisposables = this._register(new MutableDisposable<DisposableStore>());
3940
private readonly previouslyFocusedElement: HTMLElement | undefined;
41+
private currentFocusableElements: readonly HTMLElement[] = [];
4042
private _resolveOutcome!: (outcome: WalkthroughOutcome) => void;
4143
private _outcomeResolved = false;
4244

@@ -88,7 +90,9 @@ export class SessionsWalkthroughOverlay extends Disposable {
8890

8991
// Fixed footer
9092
this.footerContainer = append(this.card, $('.sessions-walkthrough-footer'));
91-
this.disclaimerElement = this._createDisclaimer();
93+
const disclaimer = this._createDisclaimer();
94+
this.disclaimerElement = disclaimer.element;
95+
this.disclaimerLinks = disclaimer.links;
9296

9397
this._renderSignIn();
9498
}
@@ -147,6 +151,7 @@ export class SessionsWalkthroughOverlay extends Disposable {
147151
}, 0, stepDisposables);
148152

149153
const providerButtons = [githubBtn, googleBtn, appleBtn];
154+
this.currentFocusableElements = [...providerButtons, ...this.disclaimerLinks];
150155
const providerStrategies = [
151156
ChatSetupStrategy.SetupWithoutEnterpriseProvider,
152157
ChatSetupStrategy.SetupWithGoogleProvider,
@@ -180,6 +185,7 @@ export class SessionsWalkthroughOverlay extends Disposable {
180185
for (const btn of providerButtons) {
181186
btn.disabled = true;
182187
}
188+
this.currentFocusableElements = [];
183189

184190
error.style.display = 'none';
185191

@@ -315,6 +321,7 @@ export class SessionsWalkthroughOverlay extends Disposable {
315321

316322
const getStartedBtn = stepDisposables.add(new Button(actions, { ...defaultButtonStyles }));
317323
getStartedBtn.label = localize('walkthrough.getStarted', "Get Started");
324+
this.currentFocusableElements = [getStartedBtn.element];
318325
getStartedBtn.focus();
319326
stepDisposables.add(getStartedBtn.onDidClick(() => {
320327
this._finish('completed');
@@ -383,15 +390,14 @@ export class SessionsWalkthroughOverlay extends Disposable {
383390
}
384391

385392
private _getFocusableElements(): HTMLElement[] {
386-
return Array.from(this.overlay.querySelectorAll<HTMLElement>('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'))
387-
.filter(element => element.getClientRects().length > 0);
393+
return this.currentFocusableElements.filter(element => element.isConnected);
388394
}
389395

390396
private _shouldAbortUpdate(...elements: HTMLElement[]): boolean {
391397
return !this.overlay.isConnected || elements.some(element => !element.isConnected);
392398
}
393399

394-
private _createDisclaimer(): HTMLElement {
400+
private _createDisclaimer(): { element: HTMLElement; links: readonly HTMLAnchorElement[] } {
395401
const defaultChatAgent = this.productService.defaultChatAgent;
396402
const disclaimer = append(this.overlay, $('p.sessions-walkthrough-disclaimer.hidden'));
397403
const termsLink = this._appendDisclaimerLink(defaultChatAgent?.termsStatementUrl ?? '', localize('walkthrough.disclaimer.terms', "Terms"));
@@ -409,7 +415,10 @@ export class SessionsWalkthroughOverlay extends Disposable {
409415
disclaimer.appendChild(settingsLink);
410416
append(disclaimer, document.createTextNode(localize('walkthrough.disclaimer.end', " anytime.")));
411417

412-
return disclaimer;
418+
return {
419+
element: disclaimer,
420+
links: [termsLink, privacyLink, publicCodeLink, settingsLink]
421+
};
413422
}
414423

415424
private _appendDisclaimerLink(href: string, label: string): HTMLAnchorElement {

0 commit comments

Comments
 (0)