Skip to content

Commit 7078d4b

Browse files
committed
feat(feedback): Configurable "required" label (#11152)
1 parent fc208fe commit 7078d4b

File tree

8 files changed

+26
-7
lines changed

8 files changed

+26
-7
lines changed

packages/feedback/src/constants.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,9 @@ export const MESSAGE_PLACEHOLDER = "What's the bug? What did you expect?";
7070
export const MESSAGE_LABEL = 'Description';
7171
export const NAME_PLACEHOLDER = 'Your Name';
7272
export const NAME_LABEL = 'Name';
73+
export const IS_REQUIRED_LABEL = '(required)';
7374
export const SUCCESS_MESSAGE_TEXT = 'Thank you for your report!';
75+
export const ERROR_MESSAGE_TEXT = 'Unable to send Feedback. This is because of network issues, or because you are using an ad-blocker.';
7476

7577
export const FEEDBACK_WIDGET_SOURCE = 'widget';
7678
export const FEEDBACK_API_SOURCE = 'api';

packages/feedback/src/integration.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import {
77
DEFAULT_THEME,
88
EMAIL_LABEL,
99
EMAIL_PLACEHOLDER,
10+
// ERROR_MESSAGE_TEXT,
1011
FORM_TITLE,
12+
IS_REQUIRED_LABEL,
1113
MESSAGE_LABEL,
1214
MESSAGE_PLACEHOLDER,
1315
NAME_LABEL,
@@ -103,7 +105,9 @@ class Feedback implements Integration {
103105
messageLabel = MESSAGE_LABEL,
104106
namePlaceholder = NAME_PLACEHOLDER,
105107
nameLabel = NAME_LABEL,
108+
isRequiredLabel = IS_REQUIRED_LABEL,
106109
successMessageText = SUCCESS_MESSAGE_TEXT,
110+
// errorMessageText = ERROR_MESSAGE_TEXT,
107111

108112
onFormClose,
109113
onFormOpen,
@@ -149,7 +153,9 @@ class Feedback implements Integration {
149153
messagePlaceholder,
150154
nameLabel,
151155
namePlaceholder,
156+
isRequiredLabel,
152157
successMessageText,
158+
// errorMessageText,
153159

154160
onFormClose,
155161
onFormOpen,

packages/feedback/src/types/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ export interface FeedbackTextConfiguration {
149149
* Message after feedback was sent successfully
150150
*/
151151
successMessageText: string;
152+
// errorMessageText: string;
153+
isRequiredLabel: string;
152154
}
153155

154156
/**

packages/feedback/src/widget/Form.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export function Form({
5353
emailPlaceholder,
5454
messageLabel,
5555
messagePlaceholder,
56+
isRequiredLabel,
5657
cancelButtonLabel,
5758
submitButtonLabel,
5859

@@ -176,7 +177,7 @@ export function Form({
176177
'span',
177178
{ className: 'form__label__text' },
178179
nameLabel,
179-
isNameRequired && createElement('span', { className: 'form__label__text--required' }, ' (required)'),
180+
isNameRequired && createElement('span', { className: 'form__label__text--required' }, ` ${isRequiredLabel}`),
180181
),
181182
nameEl,
182183
],
@@ -195,7 +196,7 @@ export function Form({
195196
'span',
196197
{ className: 'form__label__text' },
197198
emailLabel,
198-
isEmailRequired && createElement('span', { className: 'form__label__text--required' }, ' (required)'),
199+
isEmailRequired && createElement('span', { className: 'form__label__text--required' }, ` ${isRequiredLabel}`),
199200
),
200201
emailEl,
201202
],
@@ -213,7 +214,7 @@ export function Form({
213214
'span',
214215
{ className: 'form__label__text' },
215216
messageLabel,
216-
createElement('span', { className: 'form__label__text--required' }, ' (required)'),
217+
createElement('span', { className: 'form__label__text--required' }, ` ${isRequiredLabel}`),
217218
),
218219
messageEl,
219220
],

packages/feedback/src/widget/createWidget.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ export function createWidget({
197197
messagePlaceholder: options.messagePlaceholder,
198198
nameLabel: options.nameLabel,
199199
namePlaceholder: options.namePlaceholder,
200+
isRequiredLabel: options.isRequiredLabel,
200201
defaultName: (userKey && user && user[userKey.name]) || '',
201202
defaultEmail: (userKey && user && user[userKey.email]) || '',
202203
onClosed: () => {

packages/feedback/test/widget/Dialog.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ function renderDialog({
2323
messagePlaceholder = 'What is the issue?',
2424
cancelButtonLabel = 'Cancel!',
2525
submitButtonLabel = 'Submit!',
26+
isRequiredLabel = '(needed!)',
2627
...rest
2728
}: Partial<DialogProps> = {}) {
2829
return Dialog({
@@ -44,6 +45,7 @@ function renderDialog({
4445
messagePlaceholder,
4546
cancelButtonLabel,
4647
submitButtonLabel,
48+
isRequiredLabel,
4749
...rest,
4850
}) as NonNullableFields<ReturnType<typeof Dialog>>;
4951
}

packages/feedback/test/widget/Form.test.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ function renderForm({
2020
messagePlaceholder = 'What is the issue?',
2121
cancelButtonLabel = 'Cancel!',
2222
submitButtonLabel = 'Submit!',
23+
isRequiredLabel = '(needed!)',
2324
...rest
2425
}: Partial<FormComponentProps> = {}) {
2526
return Form({
@@ -37,6 +38,7 @@ function renderForm({
3738
messagePlaceholder,
3839
cancelButtonLabel,
3940
submitButtonLabel,
41+
isRequiredLabel,
4042
...rest,
4143
}) as NonNullableFields<ReturnType<typeof Form>>;
4244
}
@@ -89,9 +91,9 @@ describe('Form', () => {
8991
const nameLabel = formComponent.el.querySelector('label[htmlFor="name"]') as HTMLLabelElement;
9092
const emailLabel = formComponent.el.querySelector('label[htmlFor="email"]') as HTMLLabelElement;
9193
const messageLabel = formComponent.el.querySelector('label[htmlFor="message"]') as HTMLLabelElement;
92-
expect(nameLabel.textContent).toBe('Name! (required)');
93-
expect(emailLabel.textContent).toBe('Email! (required)');
94-
expect(messageLabel.textContent).toBe('Description! (required)');
94+
expect(nameLabel.textContent).toBe('Name! (needed!)');
95+
expect(emailLabel.textContent).toBe('Email! (needed!)');
96+
expect(messageLabel.textContent).toBe('Description! (needed!)');
9597

9698
const nameInput = formComponent.el.querySelector('[name="name"]') as HTMLInputElement;
9799
const emailInput = formComponent.el.querySelector('[name="email"]') as HTMLInputElement;

packages/feedback/test/widget/createWidget.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ import {
33
CANCEL_BUTTON_LABEL,
44
DEFAULT_THEME,
55
EMAIL_LABEL,
6-
EMAIL_PLACEHOLDER,
6+
EMAIL_PLACEHOLDER, ERROR_MESSAGE_TEXT,
77
FORM_TITLE,
8+
IS_REQUIRED_LABEL,
89
MESSAGE_LABEL,
910
MESSAGE_PLACEHOLDER,
1011
NAME_LABEL,
@@ -47,7 +48,9 @@ const DEFAULT_OPTIONS = {
4748
messageLabel: MESSAGE_LABEL,
4849
namePlaceholder: NAME_PLACEHOLDER,
4950
nameLabel: NAME_LABEL,
51+
isRequiredLabel: IS_REQUIRED_LABEL,
5052
successMessageText: SUCCESS_MESSAGE_TEXT,
53+
// errorMessageText: ERROR_MESSAGE_TEXT,
5154

5255
onFormClose: jest.fn(),
5356
onFormOpen: jest.fn(),

0 commit comments

Comments
 (0)