diff --git a/guides/toggle-report.md b/guides/toggle-report.md index 78adce0b..15c9308e 100644 --- a/guides/toggle-report.md +++ b/guides/toggle-report.md @@ -51,11 +51,12 @@ The following are all sent in response to user interactions | ------------------- | ------------------------------------------------------------------------------------------------------------------ | | appVersion | App version number | | atb | Anonymous experiment group for feature testing | +| description | Your selected category and optional comments | | device | Device make, model, and manufacturer | | didOpenReportInfo | Whether or not you opted to show this report info | | errorDescriptions | Browser-reported errors | | extensionVersion | Extension version number | -| features | List of which protections and browser features were active | +| features | List of which browser features were active | | httpErrorCodes | Website response status (HTTP) codes | | jsPerformance | How quickly parts of the page loaded | | lastSentDay | Date of last report sent for this site | diff --git a/integration-tests/DashboardPage.js b/integration-tests/DashboardPage.js index 70701fae..1f7e671d 100644 --- a/integration-tests/DashboardPage.js +++ b/integration-tests/DashboardPage.js @@ -426,8 +426,21 @@ export class DashboardPage { await this.page.getByLabel('Something else').waitFor(); } - async breakageFormIsVisible() { - await this.page.getByRole('button', { name: 'Send Report' }).waitFor(); + async breakageFormIsVisible(categoryText) { + const formView = this.page.getByTestId('subview-breakageFormFinalStep'); + + await formView.getByRole('button', { name: 'Send Report' }).waitFor(); + if (categoryText) { + await formView.getByText(categoryText).waitFor(); + } + } + + async descriptionPromptIsVisible() { + await this.page.getByText('What happened?').waitFor(); + } + + async descriptionPromptIsNotVisible() { + await expect(this.page.getByText('What happened?')).not.toBeVisible(); } /** diff --git a/integration-tests/android.spec-int.js b/integration-tests/android.spec-int.js index 257e4696..58e9eb5e 100644 --- a/integration-tests/android.spec-int.js +++ b/integration-tests/android.spec-int.js @@ -91,11 +91,26 @@ test.describe('breakage form', () => { await dash.screenshot('category-selection.png'); await dash.selectsCategory('Site layout broken', 'layout'); await dash.breakageFormIsVisible(); + await dash.descriptionPromptIsVisible(); await dash.screenshot('screen-breakage-form.png'); await dash.submitFeedbackForm(); await dash.mocks.calledForSubmitBreakageForm({ category: 'layout', description: '' }); }); + test('hides description prompt on "dislike" category', { tag: '@screenshots' }, async ({ page }) => { + /** @type {DashboardPage} */ + const dash = await DashboardPage.webkit(page, { + screen: 'breakageForm', + randomisedCategories: 'false', + platform: 'macos', + }); + await dash.addState([testDataStates.google]); + await dash.selectsCategoryType('I dislike the content on this site', 'dislike'); + await dash.breakageFormIsVisible('I dislike the content'); + await dash.descriptionPromptIsNotVisible(); + await dash.screenshot('category-type-dislike.png'); + }); + test('skips to breakage form when disliked', async ({ page }) => { /** @type {DashboardPage} */ const dash = await DashboardPage.android(page, { screen: 'breakageForm' }); diff --git a/integration-tests/browser.spec-int.js b/integration-tests/browser.spec-int.js index 6d9752e4..b32ff806 100644 --- a/integration-tests/browser.spec-int.js +++ b/integration-tests/browser.spec-int.js @@ -30,11 +30,26 @@ test.describe('breakage form', () => { await dash.screenshot('category-selection.png'); await dash.selectsCategory('Site layout broken', 'layout'); await dash.breakageFormIsVisible(); + await dash.descriptionPromptIsVisible(); await dash.screenshot('screen-breakage-form.png'); await dash.submitFeedbackForm(); await dash.mocks.calledForSubmitBreakageForm({ category: 'layout', description: '' }); }); + test('hides description prompt on "dislike" category', { tag: '@screenshots' }, async ({ page }) => { + /** @type {DashboardPage} */ + const dash = await DashboardPage.webkit(page, { + screen: 'breakageForm', + randomisedCategories: 'false', + platform: 'macos', + }); + await dash.addState([testDataStates.google]); + await dash.selectsCategoryType('I dislike the content on this site', 'dislike'); + await dash.breakageFormIsVisible('I dislike the content'); + await dash.descriptionPromptIsNotVisible(); + await dash.screenshot('category-type-dislike.png'); + }); + test('skips to breakage form when disliked', async ({ page }) => { /** @type {DashboardPage} */ const dash = await DashboardPage.browser(page, testDataStates.google, { screen: 'breakageForm' }); diff --git a/integration-tests/ios.spec-int.js b/integration-tests/ios.spec-int.js index d1e8bea0..f71b4b15 100644 --- a/integration-tests/ios.spec-int.js +++ b/integration-tests/ios.spec-int.js @@ -160,11 +160,26 @@ test.describe('breakage form', () => { await dash.screenshot('category-selection.png'); await dash.selectsCategory('Site layout broken', 'layout'); await dash.breakageFormIsVisible(); + await dash.descriptionPromptIsVisible(); await dash.screenshot('screen-breakage-form.png'); await dash.submitFeedbackForm(); await dash.mocks.calledForSubmitBreakageForm({ category: 'layout', description: '' }); }); + test('hides description prompt on "dislike" category', { tag: '@screenshots' }, async ({ page }) => { + /** @type {DashboardPage} */ + const dash = await DashboardPage.webkit(page, { + screen: 'breakageForm', + randomisedCategories: 'false', + platform: 'macos', + }); + await dash.addState([testDataStates.google]); + await dash.selectsCategoryType('I dislike the content on this site', 'dislike'); + await dash.breakageFormIsVisible('I dislike the content'); + await dash.descriptionPromptIsNotVisible(); + await dash.screenshot('category-type-dislike.png'); + }); + test('skips to breakage form when disliked', async ({ page }) => { /** @type {DashboardPage} */ const dash = await DashboardPage.webkit(page, { screen: 'breakageForm', platform: 'ios' }); diff --git a/integration-tests/macos.spec-int.js b/integration-tests/macos.spec-int.js index 2ee8d163..9b60bf7c 100644 --- a/integration-tests/macos.spec-int.js +++ b/integration-tests/macos.spec-int.js @@ -90,12 +90,27 @@ test.describe('breakage form', () => { await dash.screenshot('category-selection.png'); await dash.selectsCategory('Site layout broken', 'layout'); await dash.breakageFormIsVisible(); + await dash.descriptionPromptIsVisible(); await dash.screenshot('screen-breakage-form.png'); await dash.submitFeedbackForm(); await dash.showsBreakageFormSuccessScreen(); await dash.mocks.calledForSubmitBreakageForm({ category: 'layout', description: '' }); }); + test('hides description prompt on "dislike" category', { tag: '@screenshots' }, async ({ page }) => { + /** @type {DashboardPage} */ + const dash = await DashboardPage.webkit(page, { + screen: 'breakageForm', + randomisedCategories: 'false', + platform: 'macos', + }); + await dash.addState([testDataStates.google]); + await dash.selectsCategoryType('I dislike the content on this site', 'dislike'); + await dash.breakageFormIsVisible('I dislike the content'); + await dash.descriptionPromptIsNotVisible(); + await dash.screenshot('category-type-dislike.png'); + }); + test('skips to breakage form when disliked', async ({ page }) => { /** @type {DashboardPage} */ const dash = await DashboardPage.webkit(page, { screen: 'breakageForm', platform: 'macos' }); diff --git a/integration-tests/macos.spec-int.js-snapshots/category-type-dislike-macos-darwin.png b/integration-tests/macos.spec-int.js-snapshots/category-type-dislike-macos-darwin.png new file mode 100644 index 00000000..8b803ef6 Binary files /dev/null and b/integration-tests/macos.spec-int.js-snapshots/category-type-dislike-macos-darwin.png differ diff --git a/integration-tests/macos.spec-int.js-snapshots/screen-breakage-form-empty-description-macos-darwin.png b/integration-tests/macos.spec-int.js-snapshots/screen-breakage-form-empty-description-macos-darwin.png index 7a19484c..8d932e0e 100644 Binary files a/integration-tests/macos.spec-int.js-snapshots/screen-breakage-form-empty-description-macos-darwin.png and b/integration-tests/macos.spec-int.js-snapshots/screen-breakage-form-empty-description-macos-darwin.png differ diff --git a/integration-tests/macos.spec-int.js-snapshots/screen-breakage-form-macos-darwin.png b/integration-tests/macos.spec-int.js-snapshots/screen-breakage-form-macos-darwin.png index 66b1ad6d..ab78ffe1 100644 Binary files a/integration-tests/macos.spec-int.js-snapshots/screen-breakage-form-macos-darwin.png and b/integration-tests/macos.spec-int.js-snapshots/screen-breakage-form-macos-darwin.png differ diff --git a/integration-tests/macos.spec-int.js-snapshots/screen-toggle-report-show-macos-darwin.png b/integration-tests/macos.spec-int.js-snapshots/screen-toggle-report-show-macos-darwin.png index f96626ad..5c777a0c 100644 Binary files a/integration-tests/macos.spec-int.js-snapshots/screen-toggle-report-show-macos-darwin.png and b/integration-tests/macos.spec-int.js-snapshots/screen-toggle-report-show-macos-darwin.png differ diff --git a/integration-tests/windows.spec-int.js b/integration-tests/windows.spec-int.js index 49e58164..cf088b85 100644 --- a/integration-tests/windows.spec-int.js +++ b/integration-tests/windows.spec-int.js @@ -41,12 +41,27 @@ test.describe('breakage form', () => { await dash.screenshot('category-selection.png'); await dash.selectsCategory('Site layout broken', 'layout'); await dash.breakageFormIsVisible(); + await dash.descriptionPromptIsVisible(); await dash.screenshot('screen-breakage-form.png'); await dash.submitFeedbackForm(); await dash.showsBreakageFormSuccessScreen(); await dash.mocks.calledForSubmitBreakageForm({ category: 'layout', description: '' }); }); + test('hides description prompt on "dislike" category', { tag: '@screenshots' }, async ({ page }) => { + /** @type {DashboardPage} */ + const dash = await DashboardPage.webkit(page, { + screen: 'breakageForm', + randomisedCategories: 'false', + platform: 'macos', + }); + await dash.addState([testDataStates.google]); + await dash.selectsCategoryType('I dislike the content on this site', 'dislike'); + await dash.breakageFormIsVisible('I dislike the content'); + await dash.descriptionPromptIsNotVisible(); + await dash.screenshot('category-type-dislike.png'); + }); + test('skips to breakage form when disliked', async ({ page }) => { /** @type {DashboardPage} */ const dash = await DashboardPage.windows(page, { screen: 'breakageForm' }); diff --git a/schema/__fixtures__/toggle-report-screen.json b/schema/__fixtures__/toggle-report-screen.json index d316c264..854ade4b 100644 --- a/schema/__fixtures__/toggle-report-screen.json +++ b/schema/__fixtures__/toggle-report-screen.json @@ -62,6 +62,9 @@ }, { "id": "locale" + }, + { + "id": "description" } ] } diff --git a/schema/__generated__/schema.parsers.mjs b/schema/__generated__/schema.parsers.mjs index ad165ecb..0ad8ce43 100644 --- a/schema/__generated__/schema.parsers.mjs +++ b/schema/__generated__/schema.parsers.mjs @@ -11,45 +11,47 @@ export const adClickAttributionReasonSchema = z.literal("adClickAttribution"); export const otherThirdPartyRequestReasonSchema = z.literal("otherThirdPartyRequest"); -export const wvVersionTitleSchema = z.literal("wvVersion"); +export const wVVersionSchema = z.literal("wvVersion"); -export const requestsTitleSchema = z.literal("requests"); +export const requestsSchema = z.literal("requests"); -export const featuresTitleSchema = z.literal("features"); +export const featuresSchema = z.literal("features"); -export const appVersionTitleSchema = z.literal("appVersion"); +export const appVersionSchema = z.literal("appVersion"); -export const atbTitleSchema = z.literal("atb"); +export const atbSchema = z.literal("atb"); -export const errorDescriptionsTitleSchema = z.literal("errorDescriptions"); +export const errorDescriptionsSchema = z.literal("errorDescriptions"); -export const extensionVersionTitleSchema = z.literal("extensionVersion"); +export const extensionVersionSchema = z.literal("extensionVersion"); -export const httpErrorCodesTitleSchema = z.literal("httpErrorCodes"); +export const hTTPErrorCodesSchema = z.literal("httpErrorCodes"); -export const lastSentDayTitleSchema = z.literal("lastSentDay"); +export const lastSentDaySchema = z.literal("lastSentDay"); -export const deviceTitleSchema = z.literal("device"); +export const deviceSchema = z.literal("device"); -export const osTitleSchema = z.literal("os"); +export const osSchema = z.literal("os"); -export const listVersionsTitleSchema = z.literal("listVersions"); +export const listVersionsSchema = z.literal("listVersions"); -export const reportFlowTitleSchema = z.literal("reportFlow"); +export const reportFlowSchema = z.literal("reportFlow"); -export const siteUrlTitleSchema = z.literal("siteUrl"); +export const siteURLSchema = z.literal("siteUrl"); -export const didOpenReportInfoTitleSchema = z.literal("didOpenReportInfo"); +export const didOpenReportInfoSchema = z.literal("didOpenReportInfo"); -export const toggleReportCounterTitleSchema = z.literal("toggleReportCounter"); +export const toggleReportCounterSchema = z.literal("toggleReportCounter"); -export const openerContextTitleSchema = z.literal("openerContext"); +export const openerContextSchema = z.literal("openerContext"); -export const userRefreshCountTitleSchema = z.literal("userRefreshCount"); +export const userRefreshCountSchema = z.literal("userRefreshCount"); -export const jsPerformanceTitleSchema = z.literal("jsPerformance"); +export const jSPerformanceSchema = z.literal("jsPerformance"); -export const localeTitleSchema = z.literal("locale"); +export const localeSchema = z.literal("locale"); + +export const descriptionSchema = z.literal("description"); export const screenKindSchema = z.union([z.literal("primaryScreen"), z.literal("breakageForm"), z.literal("toggleReport"), z.literal("breakageFormCategorySelection"), z.literal("breakageFormFinalStep"), z.literal("connection"), z.literal("trackers"), z.literal("nonTrackers"), z.literal("consentManaged"), z.literal("cookieHidden")]); @@ -220,7 +222,7 @@ export const outgoingExtensionMessageSchema = z.object({ options: z.object({}) }); -export const dataItemIdSchema = z.union([wvVersionTitleSchema, requestsTitleSchema, featuresTitleSchema, appVersionTitleSchema, atbTitleSchema, errorDescriptionsTitleSchema, extensionVersionTitleSchema, httpErrorCodesTitleSchema, lastSentDayTitleSchema, deviceTitleSchema, osTitleSchema, listVersionsTitleSchema, reportFlowTitleSchema, siteUrlTitleSchema, didOpenReportInfoTitleSchema, toggleReportCounterTitleSchema, openerContextTitleSchema, userRefreshCountTitleSchema, jsPerformanceTitleSchema, localeTitleSchema]); +export const dataItemIdSchema = z.union([wVVersionSchema, requestsSchema, featuresSchema, appVersionSchema, atbSchema, errorDescriptionsSchema, extensionVersionSchema, hTTPErrorCodesSchema, lastSentDaySchema, deviceSchema, osSchema, listVersionsSchema, reportFlowSchema, siteURLSchema, didOpenReportInfoSchema, toggleReportCounterSchema, openerContextSchema, userRefreshCountSchema, jSPerformanceSchema, localeSchema, descriptionSchema]); export const incomingExtensionMessageSchema = z.union([incomingResponseSchema, incomingToggleReportSchema, incomingUpdateTabDataSchema, incomingClosePopupSchema, incomingDidResetTrackersDataSchema]); diff --git a/schema/__generated__/schema.types.ts b/schema/__generated__/schema.types.ts index 1a77105e..5a358fa4 100644 --- a/schema/__generated__/schema.types.ts +++ b/schema/__generated__/schema.types.ts @@ -46,106 +46,111 @@ export type WindowsIncomingMessage = | WindowsIncomingViewModel | WindowsIncomingToggleReportOptions; export type DataItemId = - | WvVersionTitle - | RequestsTitle - | FeaturesTitle - | AppVersionTitle - | AtbTitle - | ErrorDescriptionsTitle - | ExtensionVersionTitle - | HttpErrorCodesTitle - | LastSentDayTitle - | DeviceTitle - | OsTitle - | ListVersionsTitle - | ReportFlowTitle - | SiteUrlTitle - | DidOpenReportInfoTitle - | ToggleReportCounterTitle - | OpenerContextTitle - | UserRefreshCountTitle - | JsPerformanceTitle - | LocaleTitle; + | WVVersion + | Requests + | Features + | AppVersion + | ATB + | ErrorDescriptions + | ExtensionVersion + | HTTPErrorCodes + | LastSentDay + | Device + | OS + | ListVersions + | ReportFlow + | SiteURL + | DidOpenReportInfo + | ToggleReportCounter + | OpenerContext + | UserRefreshCount + | JSPerformance + | Locale + | Description; /** - * wvVersion description + * Web browser engine version number */ -export type WvVersionTitle = "wvVersion"; +export type WVVersion = "wvVersion"; /** - * requests description + * Hostnames of trackers blocked, surrogate requests, ignored requests, and requests not in tracker blocking list */ -export type RequestsTitle = "requests"; +export type Requests = "requests"; /** - * features description + * List of which browser features were active */ -export type FeaturesTitle = "features"; +export type Features = "features"; /** - * appVersion description + * App version number */ -export type AppVersionTitle = "appVersion"; +export type AppVersion = "appVersion"; /** - * atb description + * Anonymous experiment group for feature testing */ -export type AtbTitle = "atb"; +export type ATB = "atb"; /** - * errorDescriptions description + * Browser-reported errors */ -export type ErrorDescriptionsTitle = "errorDescriptions"; +export type ErrorDescriptions = "errorDescriptions"; /** - * extensionVersion description + * Extension version number */ -export type ExtensionVersionTitle = "extensionVersion"; +export type ExtensionVersion = "extensionVersion"; /** - * httpErrorCodes description + * Website response status (HTTP) codes */ -export type HttpErrorCodesTitle = "httpErrorCodes"; +export type HTTPErrorCodes = "httpErrorCodes"; /** - * lastSentDay description + * Date of last report sent for this site */ -export type LastSentDayTitle = "lastSentDay"; +export type LastSentDay = "lastSentDay"; /** - * device description + * Device make, model, and manufacturer */ -export type DeviceTitle = "device"; +export type Device = "device"; /** - * os description + * Operating system version number */ -export type OsTitle = "os"; +export type OS = "os"; /** - * listVersions description + * Information about which versions of our protections were active */ -export type ListVersionsTitle = "listVersions"; +export type ListVersions = "listVersions"; /** - * reportFlow description + * Which reporting form you used ('menu', 'dashboard', etc.) */ -export type ReportFlowTitle = "reportFlow"; +export type ReportFlow = "reportFlow"; /** - * siteUrl description + * Page URL (without identifiable info) */ -export type SiteUrlTitle = "siteUrl"; +export type SiteURL = "siteUrl"; /** - * didOpenReportInfo description + * Whether or not you opted to show this report info */ -export type DidOpenReportInfoTitle = "didOpenReportInfo"; +export type DidOpenReportInfo = "didOpenReportInfo"; /** - * toggleReportCounter description + * Number of times protections were toggled off */ -export type ToggleReportCounterTitle = "toggleReportCounter"; +export type ToggleReportCounter = "toggleReportCounter"; /** - * openerContext description + * How you got to this page, either: 'SERP' (DuckDuckGo search), 'Navigation' (link/URL), or 'External' (other means) */ -export type OpenerContextTitle = "openerContext"; +export type OpenerContext = "openerContext"; /** - * userRefreshCount description + * Number of refreshes since page load */ -export type UserRefreshCountTitle = "userRefreshCount"; +export type UserRefreshCount = "userRefreshCount"; /** - * jsPerformance description + * How quickly parts of the page loaded */ -export type JsPerformanceTitle = "jsPerformance"; +export type JSPerformance = "jsPerformance"; /** - * locale description + * Primary language and country of your device */ -export type LocaleTitle = "locale"; +export type Locale = "locale"; +/** + * Your selected category and optional comments + */ +export type Description = "description"; export type ScreenKind = | "primaryScreen" | "breakageForm" diff --git a/schema/toggle-report-screen.json b/schema/toggle-report-screen.json index 2ba5bb40..3cdf6bb2 100644 --- a/schema/toggle-report-screen.json +++ b/schema/toggle-report-screen.json @@ -41,7 +41,8 @@ { "$ref": "#/definitions/openerContext" }, { "$ref": "#/definitions/userRefreshCount" }, { "$ref": "#/definitions/jsPerformance" }, - { "$ref": "#/definitions/locale" } + { "$ref": "#/definitions/locale" }, + { "$ref": "#/definitions/description" } ] }, "additional": { @@ -62,104 +63,109 @@ } }, "wvVersion": { - "title": "wvVersion title", + "title": "WV Version", "const": "wvVersion", - "description": "wvVersion description" + "description": "Web browser engine version number" }, "requests": { - "title": "requests title", + "title": "Requests", "const": "requests", - "description": "requests description" + "description": "Hostnames of trackers blocked, surrogate requests, ignored requests, and requests not in tracker blocking list" }, "features": { - "title": "features title", + "title": "Features", "const": "features", - "description": "features description" + "description": "List of which browser features were active" }, "appVersion": { - "title": "appVersion title", + "title": "App Version", "const": "appVersion", - "description": "appVersion description" + "description": "App version number" }, "atb": { - "title": "atb title", + "title": "ATB", "const": "atb", - "description": "atb description" + "description": "Anonymous experiment group for feature testing" }, "errorDescriptions": { - "title": "errorDescriptions title", + "title": "Error Descriptions", "const": "errorDescriptions", - "description": "errorDescriptions description" + "description": "Browser-reported errors" }, "extensionVersion": { - "title": "extensionVersion title", + "title": "Extension Version", "const": "extensionVersion", - "description": "extensionVersion description" + "description": "Extension version number" }, "httpErrorCodes": { - "title": "httpErrorCodes title", + "title": "HTTP Error Codes", "const": "httpErrorCodes", - "description": "httpErrorCodes description" + "description": "Website response status (HTTP) codes" }, "lastSentDay": { - "title": "lastSentDay title", + "title": "Last Sent Day", "const": "lastSentDay", - "description": "lastSentDay description" + "description": "Date of last report sent for this site" }, "device": { - "title": "device title", + "title": "Device", "const": "device", - "description": "device description" + "description": "Device make, model, and manufacturer" }, "os": { - "title": "os title", + "title": "OS", "const": "os", - "description": "os description" + "description": "Operating system version number" }, "listVersions": { - "title": "listVersions title", + "title": "List Versions", "const": "listVersions", - "description": "listVersions description" + "description": "Information about which versions of our protections were active" }, "reportFlow": { - "title": "reportFlow title", + "title": "Report Flow", "const": "reportFlow", - "description": "reportFlow description" + "description": "Which reporting form you used ('menu', 'dashboard', etc.)" }, "siteUrl": { - "title": "siteUrl title", + "title": "Site URL", "const": "siteUrl", - "description": "siteUrl description" + "description": "Page URL (without identifiable info)" }, "didOpenReportInfo": { - "title": "didOpenReportInfo title", + "title": "Did Open Report Info", "const": "didOpenReportInfo", - "description": "didOpenReportInfo description" + "description": "Whether or not you opted to show this report info" }, "toggleReportCounter": { - "title": "toggleReportCounter title", + "title": "Toggle Report Counter", "const": "toggleReportCounter", - "description": "toggleReportCounter description" + "description": "Number of times protections were toggled off" }, "openerContext": { - "title": "openerContext title", + "title": "Opener Context", "const": "openerContext", - "description": "openerContext description" + "description": "How you got to this page, either: 'SERP' (DuckDuckGo search), 'Navigation' (link/URL), or 'External' (other means)" }, "userRefreshCount": { - "title": "userRefreshCount title", + "title": "User Refresh Count", "const": "userRefreshCount", - "description": "userRefreshCount description" + "description": "Number of refreshes since page load" }, "jsPerformance": { - "title": "jsPerformance title", + "title": "JS Performance", "const": "jsPerformance", - "description": "jsPerformance description" + "description": "How quickly parts of the page loaded" }, "locale": { - "title": "locale title", + "title": "Locale", "const": "locale", - "description": "locale description" + "description": "Primary language and country of your device" + }, + "description": { + "title": "Description", + "const": "description", + "description": "Your selected category and optional comments" } } } diff --git a/shared/data/text.js b/shared/data/text.js index dd430485..37acadf8 100644 --- a/shared/data/text.js +++ b/shared/data/text.js @@ -47,5 +47,7 @@ export function namedString(item) { return ns.toggleReport('dynamic_toggleReportCounter.title'); case 'locale': return ns.toggleReport('dynamic_locale.title'); + case 'description': + return ns.toggleReport('dynamic_description.title'); } } diff --git a/shared/locales/en/report.json b/shared/locales/en/report.json index 0b7eabd1..330079b4 100644 --- a/shared/locales/en/report.json +++ b/shared/locales/en/report.json @@ -148,7 +148,7 @@ "note": "Suggestion to enter a description of what the user expected to happen, but didn't" }, "suggestionWhatHappened3": { - "title": "Did turning Privacy Protections off help?", + "title": "Did turning protections off help?", "note": "Suggestion to mention if turning off privacy protections helped solve a problem the user was having" }, "reportTitle": { diff --git a/shared/locales/en/toggle-report.json b/shared/locales/en/toggle-report.json index 8ad7dd09..653cae89 100644 --- a/shared/locales/en/toggle-report.json +++ b/shared/locales/en/toggle-report.json @@ -27,10 +27,6 @@ "title": "See what’s sent", "note": "Button label allowing users to see the information that is sent in the report." }, - "siteNotWorkingInfoRevealShort": { - "title": "What’s sent", - "note": "Button label allowing users to see the information that is sent in the report." - }, "siteNotWorkingInfoHide": { "title": "Hide", "note": "Button label allowing users to hide the information that is sent in the report." @@ -48,7 +44,7 @@ "note": "This text provides information about various types of requests, including blocked trackers and ignored requests." }, "dynamic_features": { - "title": "List of which protections and browser features were active", + "title": "List of which browser features were active", "note": "This text represents a list of active protections and browser features." }, "dynamic_appVersion": { @@ -118,5 +114,9 @@ "dynamic_locale": { "title": "Primary language and country of your device", "note": "This text provides information on the user's locale settings." + }, + "dynamic_description": { + "title": "Your selected category and optional comments", + "note": "This text provides information on the user's selected category and comments." } } diff --git a/v2/screens/breakage-form-screen.jsx b/v2/screens/breakage-form-screen.jsx index 6363d301..980a8005 100644 --- a/v2/screens/breakage-form-screen.jsx +++ b/v2/screens/breakage-form-screen.jsx @@ -138,6 +138,7 @@ export function BreakageForm() { } const description = categories[category]; const placeholder = category === 'other' ? ns.report('otherRequired.title') : ns.report('otherOptional.title'); + const shouldShowDescriptionPrompt = category !== 'dislike'; /** * @param {string} description @@ -159,11 +160,13 @@ export function BreakageForm() { -
  • {ns.report('suggestionWhatHappened.title')}
  • -
  • {ns.report('suggestionWhatHappened2.title')}
  • -
  • {ns.report('suggestionWhatHappened3.title')}
  • - + shouldShowDescriptionPrompt && ( + + ) } onSubmit={submit} required={category === 'other'} @@ -322,10 +325,9 @@ function DetailsDisclosureMessage() { return (
    - {ns.toggleReport('siteNotWorkingInfoRevealShort.title')} + {ns.toggleReport('siteNotWorkingInfoReveal.title')}
    - Learn More - Hide + {/* {ns.toggleReport('siteNotWorkingInfoHide.title')} */}