Skip to content

Commit f124792

Browse files
khudymKyrylo Hudym-Levkovych
and
Kyrylo Hudym-Levkovych
authored
feat: add i18n support for ProductTour Checkpoint sr-only message (#2758)
* feat: add i18n support for sr-only message * fix: add fixes after review --------- Co-authored-by: Kyrylo Hudym-Levkovych <[email protected]>
1 parent 3b7bbd5 commit f124792

22 files changed

+86
-189
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
"example:start:with-theme": "npm run start:with-theme --workspace=example",
4242
"generate-changelog": "node generate-changelog.js",
4343
"i18n_compile": "formatjs compile-folder --format transifex ./src/i18n/messages ./src/i18n/messages",
44-
"i18n_extract": "formatjs extract 'src/**/*.{jsx,js,tsx,ts}' --out-file ./src/i18n/transifex_input.json --format transifex",
44+
"i18n_extract": "formatjs extract 'src/**/*.{jsx,js,tsx,ts}' --out-file ./src/i18n/transifex_input.json --ignore='**/*.d.ts' --format transifex",
4545
"type-check": "tsc --noEmit && tsc --project www --noEmit",
4646
"type-check:watch": "npm run type-check -- --watch",
4747
"build-types": "tsc --emitDeclarationOnly",

src/ProductTour/Checkpoint.jsx

+9-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, { useEffect, useState } from 'react';
22
import { useMediaQuery } from 'react-responsive';
33
import PropTypes from 'prop-types';
44
import { createPopper } from '@popperjs/core';
5+
import { FormattedMessage } from 'react-intl';
56

67
import breakpoints from '../utils/breakpoints';
78

@@ -95,8 +96,14 @@ const Checkpoint = React.forwardRef(({
9596
role="dialog"
9697
style={{ visibility: checkpointVisible ? 'visible' : 'hidden', pointerEvents: checkpointVisible ? 'auto' : 'none' }}
9798
>
98-
{/* This text is not translated due to Paragon's lack of i18n support */}
99-
<span className="sr-only">Top of step {index + 1}</span>
99+
<span className="sr-only">
100+
<FormattedMessage
101+
id="pgn.ProductTour.Checkpoint.position-text"
102+
defaultMessage="Top of step {step}"
103+
value={{ step: index + 1 }}
104+
description="Screen-reader message to indicate the user's position in a sequence of checkpoints."
105+
/>
106+
</span>
100107
{(title || !isOnlyCheckpoint) && (
101108
<div className="pgn__checkpoint-header">
102109
<CheckpointTitle>{title}</CheckpointTitle>

src/ProductTour/Checkpoint.test.jsx

+9-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React from 'react';
22
import { render, screen } from '@testing-library/react';
33
import userEvent from '@testing-library/user-event';
4+
import { IntlProvider } from 'react-intl';
45

56
import * as popper from '@popperjs/core';
67

@@ -24,7 +25,7 @@ describe('Checkpoint', () => {
2425
describe('second Checkpoint in Tour', () => {
2526
beforeEach(() => {
2627
render(
27-
<>
28+
<IntlProvider locale="en" messages={{}}>
2829
<div id="target-element">...</div>
2930
<Checkpoint
3031
advanceButtonText="Next"
@@ -39,7 +40,7 @@ describe('Checkpoint', () => {
3940
title="Checkpoint title"
4041
totalCheckpoints={5}
4142
/>
42-
</>,
43+
</IntlProvider>,
4344
);
4445
});
4546

@@ -75,7 +76,7 @@ describe('Checkpoint', () => {
7576
describe('last Checkpoint in Tour', () => {
7677
beforeEach(() => {
7778
render(
78-
<>
79+
<IntlProvider locale="en" messages={{}}>
7980
<div id="#last-element" />
8081
<Checkpoint
8182
advanceButtonText="Next"
@@ -90,7 +91,7 @@ describe('Checkpoint', () => {
9091
title="Checkpoint title"
9192
totalCheckpoints={5}
9293
/>
93-
</>,
94+
</IntlProvider>,
9495
);
9596
});
9697

@@ -108,7 +109,7 @@ describe('Checkpoint', () => {
108109
describe('only one Checkpoint in Tour', () => {
109110
beforeEach(() => {
110111
render(
111-
<>
112+
<IntlProvider locale="en" messages={{}}>
112113
<div id="#target-element" />
113114
<Checkpoint
114115
advanceButtonText="Next"
@@ -123,7 +124,7 @@ describe('Checkpoint', () => {
123124
title="Checkpoint title"
124125
totalCheckpoints={1}
125126
/>
126-
</>,
127+
</IntlProvider>,
127128
);
128129
});
129130

@@ -140,7 +141,7 @@ describe('Checkpoint', () => {
140141
describe('only one Checkpoint in Tour and showDismissButton set to true', () => {
141142
it('it renders dismiss button and end button', () => {
142143
render(
143-
<>
144+
<IntlProvider locale="en" messages={{}}>
144145
<div id="#target-element" />
145146
<Checkpoint
146147
advanceButtonText="Next"
@@ -156,7 +157,7 @@ describe('Checkpoint', () => {
156157
totalCheckpoints={1}
157158
showDismissButton
158159
/>
159-
</>,
160+
</IntlProvider>,
160161
);
161162
expect(screen.getByText('Dismiss', { selector: 'button' })).toBeInTheDocument();
162163
expect(screen.getByText('End', { selector: 'button' })).toBeInTheDocument();

0 commit comments

Comments
 (0)