Skip to content

Commit 6714050

Browse files
authored
Installer: Improves user accessibility by adding missing <form> elements and setting the right focus (#20265)
* fix: adds a <form> element around the consent/telemetry step to ensure proper form handling also adds a submit action so that you can continue with click of ENTER * fix: adds umbFocus to select inputs to allow the user to proceed with tabbing too much around, i.e. they will start within the form
1 parent 7a3c711 commit 6714050

File tree

3 files changed

+21
-12
lines changed

3 files changed

+21
-12
lines changed

src/Umbraco.Web.UI.Client/src/apps/installer/consent/installer-consent.element.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import type {
88
TelemetryResponseModel,
99
} from '@umbraco-cms/backoffice/external/backend-api';
1010
import { TelemetryLevelModel } from '@umbraco-cms/backoffice/external/backend-api';
11-
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
11+
import { umbFocus, UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
1212

1313
@customElement('umb-installer-consent')
1414
export class UmbInstallerConsentElement extends UmbLitElement {
@@ -54,7 +54,8 @@ export class UmbInstallerConsentElement extends UmbLitElement {
5454
this._installerContext?.appendData(value);
5555
}
5656

57-
private _onNext() {
57+
private _onNext(evt: SubmitEvent) {
58+
evt.preventDefault();
5859
this._installerContext?.nextStep();
5960
}
6061

@@ -75,6 +76,7 @@ export class UmbInstallerConsentElement extends UmbLitElement {
7576

7677
return html`
7778
<uui-slider
79+
${umbFocus()}
7880
@input=${this._handleChange}
7981
name="telemetryLevel"
8082
label="telemetry-level"
@@ -91,11 +93,15 @@ export class UmbInstallerConsentElement extends UmbLitElement {
9193
return html`
9294
<div id="container" class="uui-text" data-test="installer-telemetry">
9395
<h1>Consent for telemetry data</h1>
94-
${this._renderSlider()}
95-
<div id="buttons">
96-
<uui-button label="Back" @click=${this._onBack} look="secondary"></uui-button>
97-
<uui-button id="button-install" @click=${this._onNext} label="Next" look="primary"></uui-button>
98-
</div>
96+
<uui-form>
97+
<form id="consent-form" name="consent" @submit=${this._onNext}>
98+
${this._renderSlider()}
99+
<div id="buttons">
100+
<uui-button label="Back" @click=${this._onBack} look="secondary"></uui-button>
101+
<uui-button id="button-install" type="submit" label="Next" look="primary"></uui-button>
102+
</div>
103+
</form>
104+
</uui-form>
99105
</div>
100106
`;
101107
}

src/Umbraco.Web.UI.Client/src/apps/installer/database/installer-database.element.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import type {
99
DatabaseSettingsPresentationModel,
1010
} from '@umbraco-cms/backoffice/external/backend-api';
1111
import { InstallService } from '@umbraco-cms/backoffice/external/backend-api';
12-
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
12+
import { umbFocus, UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
1313
import { tryExecute, UmbApiError } from '@umbraco-cms/backoffice/resources';
1414

1515
@customElement('umb-installer-database')
@@ -238,6 +238,7 @@ export class UmbInstallerDatabaseElement extends UmbLitElement {
238238
<uui-form-layout-item>
239239
<uui-label for="server" slot="label" required>Server address</uui-label>
240240
<uui-input
241+
${umbFocus()}
241242
type="text"
242243
id="server"
243244
name="server"
@@ -254,6 +255,7 @@ export class UmbInstallerDatabaseElement extends UmbLitElement {
254255
html` <uui-form-layout-item>
255256
<uui-label for="database-name" slot="label" required>Database Name</uui-label>
256257
<uui-input
258+
${umbFocus()}
257259
type="text"
258260
.value=${value}
259261
id="database-name"

src/Umbraco.Web.UI.Client/src/apps/installer/user/installer-user.element.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { UmbInstallerContext } from '../installer.context.js';
22
import { UMB_INSTALLER_CONTEXT } from '../installer.context.js';
33
import type { CSSResultGroup } from '@umbraco-cms/backoffice/external/lit';
44
import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit';
5-
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
5+
import { umbFocus, UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
66

77
@customElement('umb-installer-user')
88
export class UmbInstallerUserElement extends UmbLitElement {
@@ -67,9 +67,10 @@ export class UmbInstallerUserElement extends UmbLitElement {
6767
<uui-form-layout-item>
6868
<uui-label id="nameLabel" for="name" slot="label" required>Name</uui-label>
6969
<uui-input
70+
${umbFocus()}
7071
type="text"
7172
id="name"
72-
.value=${this._userFormData?.name}
73+
.value=${this._userFormData?.name ?? ''}
7374
name="name"
7475
label="name"
7576
required
@@ -81,7 +82,7 @@ export class UmbInstallerUserElement extends UmbLitElement {
8182
<uui-input
8283
type="email"
8384
id="email"
84-
.value=${this._userFormData?.email}
85+
.value=${this._userFormData?.email ?? ''}
8586
name="email"
8687
label="email"
8788
required
@@ -95,7 +96,7 @@ export class UmbInstallerUserElement extends UmbLitElement {
9596
name="password"
9697
label="password"
9798
minlength=${this._minimumPasswordLength}
98-
.value=${this._userFormData?.password}
99+
.value=${this._userFormData?.password ?? ''}
99100
required
100101
required-message="Password is required"></uui-input-password>
101102
</uui-form-layout-item>

0 commit comments

Comments
 (0)