Skip to content

Commit 47ec7e9

Browse files
committed
ref: remove disabled button, instead add better a11y for required field
1 parent 4690889 commit 47ec7e9

File tree

8 files changed

+29
-64
lines changed

8 files changed

+29
-64
lines changed

packages/feedback/src/integration.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ export class Feedback implements Integration {
190190
/**
191191
* Adds click listener to attached element to open a feedback dialog
192192
*/
193-
public attachTo(el: Node | string, optionOverrides: CreateWidgetOptionOverrides): Widget | null {
193+
public attachTo(el: Element | string, optionOverrides: CreateWidgetOptionOverrides): Widget | null {
194194
try {
195195
const options = {
196196
...this.options,

packages/feedback/src/sendFeedback.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ export function sendFeedback(
2727
replay && replay.flush();
2828
const replayId = replay && replay.getReplayId();
2929

30+
if (!message) {
31+
throw new Error('Unable to submit feedback with empty message')
32+
}
33+
3034
return sendFeedbackRequest({
3135
feedback: {
3236
name,

packages/feedback/src/util/handleFeedbackSubmit.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,11 @@ export async function handleFeedbackSubmit(
1919
if (!dialog) {
2020
return;
2121
}
22-
dialog.setSubmitEnabled();
2322
dialog.showError('There was a problem submitting feedback, please wait and try again.');
2423
};
2524

2625
try {
2726
dialog.hideError();
28-
dialog.setSubmitDisabled();
2927
const resp = await sendFeedback(feedback, options);
3028

3129
if (!resp) {

packages/feedback/src/widget/Dialog.css.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export function createDialogStyles(d: Document): HTMLStyleElement {
6464
}
6565
6666
.error {
67-
color: red;
67+
color: var(--error-color);
6868
margin-bottom: 16px;
6969
}
7070
@@ -91,6 +91,18 @@ export function createDialogStyles(d: Document): HTMLStyleElement {
9191
margin: 0px;
9292
}
9393
94+
.form__label__text {
95+
display: grid;
96+
gap: 4px;
97+
align-items: center;
98+
grid-auto-flow: column;
99+
grid-auto-columns: max-content;
100+
}
101+
102+
.form__label__text--required {
103+
font-size: 0.85em;
104+
}
105+
94106
.form__input {
95107
font-family: inherit;
96108
line-height: inherit;

packages/feedback/src/widget/Dialog.ts

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,6 @@ export interface DialogComponent extends FeedbackComponent<HTMLDialogElement> {
1919
*/
2020
hideError: () => void;
2121

22-
/**
23-
* Disable submit button so that it cannot be clicked
24-
*/
25-
setSubmitDisabled: () => void;
26-
27-
/**
28-
* Enable submit buttons so that it can be clicked
29-
*/
30-
setSubmitEnabled: () => void;
31-
3222
/**
3323
* Opens and shows the dialog and form
3424
*/
@@ -102,8 +92,6 @@ export function Dialog({
10292

10393
const {
10494
el: formEl,
105-
setSubmitEnabled,
106-
setSubmitDisabled,
10795
showError,
10896
hideError,
10997
} = Form({
@@ -143,8 +131,6 @@ export function Dialog({
143131
el,
144132
showError,
145133
hideError,
146-
setSubmitDisabled,
147-
setSubmitEnabled,
148134
open,
149135
close,
150136
checkIsOpen,

packages/feedback/src/widget/Form.ts

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,6 @@ interface FormComponent extends FeedbackComponent<HTMLFormElement> {
3232
* Hides the error message
3333
*/
3434
hideError: () => void;
35-
36-
/**
37-
* Disables the submit button
38-
*/
39-
setSubmitDisabled: () => void;
40-
41-
/**
42-
* Enables the submit button
43-
*/
44-
setSubmitEnabled: () => void;
4535
}
4636

4737
function retrieveStringValue(formData: FormData, key: string): string {
@@ -76,8 +66,6 @@ export function Form({
7666
}: FormComponentProps): FormComponent {
7767
const {
7868
el: submitEl,
79-
setDisabled: setSubmitDisabled,
80-
setEnabled: setSubmitEnabled,
8169
} = SubmitButton({
8270
label: submitButtonLabel,
8371
});
@@ -147,19 +135,9 @@ export function Form({
147135
autoFocus: 'true',
148136
rows: '5',
149137
name: 'message',
138+
required: true,
150139
className: 'form__input form__input--textarea',
151140
placeholder: messagePlaceholder,
152-
onKeyup: (e: Event) => {
153-
if (!(e.currentTarget instanceof HTMLTextAreaElement)) {
154-
return;
155-
}
156-
157-
if (e.currentTarget.value) {
158-
setSubmitEnabled();
159-
} else {
160-
setSubmitDisabled();
161-
}
162-
},
163141
});
164142

165143
const cancelEl = createElement(
@@ -213,7 +191,8 @@ export function Form({
213191
htmlFor: 'message',
214192
className: 'form__label',
215193
},
216-
[messageLabel, messageEl],
194+
[createElement('span', {className: 'form__label__text'}, messageLabel,
195+
createElement('span', {className: 'form__label__text--required'}, ' (required)')), messageEl],
217196
),
218197

219198
createElement(
@@ -227,9 +206,7 @@ export function Form({
227206
);
228207

229208
return {
230-
el: formEl,
231-
setSubmitDisabled,
232-
setSubmitEnabled,
209+
get el() { return formEl },
233210
showError,
234211
hideError,
235212
};

packages/feedback/src/widget/SubmitButton.ts

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,6 @@ export interface SubmitButtonProps {
66
}
77

88
interface SubmitButtonComponent extends FeedbackComponent<HTMLButtonElement> {
9-
/**
10-
* Disables the submit button
11-
*/
12-
setDisabled: () => void;
13-
14-
/**
15-
* Enables the submit button
16-
*/
17-
setEnabled: () => void;
189
}
1910

2011
/**
@@ -26,21 +17,12 @@ export function SubmitButton({ label }: SubmitButtonProps): SubmitButtonComponen
2617
{
2718
type: 'submit',
2819
className: 'btn btn--primary',
29-
disabled: true,
30-
ariaDisabled: 'true',
20+
['aria-label']: label,
3121
},
3222
label,
3323
);
3424

3525
return {
3626
el,
37-
setDisabled: () => {
38-
el.disabled = true;
39-
el.ariaDisabled = 'true';
40-
},
41-
setEnabled: () => {
42-
el.disabled = false;
43-
el.ariaDisabled = 'false';
44-
},
4527
};
4628
}

packages/feedback/src/widget/createWidget.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ export function createWidget({ shadow, options, attachTo }: CreateWidgetParams):
6464
return;
6565
}
6666

67+
// Simple validation for now, just check for non-empty message
68+
if (!feedback.message) {
69+
dialog.showError('Please enter in some feedback before submitting!');
70+
return;
71+
}
72+
6773
const result = await handleFeedbackSubmit(dialog, feedback);
6874

6975
// Error submitting feedback

0 commit comments

Comments
 (0)