Skip to content

Commit d13d824

Browse files
fix(adoption-insights): add translation support for DateRangePicker component (#1834)
1 parent da5e55f commit d13d824

11 files changed

Lines changed: 55 additions & 7 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@red-hat-developer-hub/backstage-plugin-adoption-insights': patch
3+
---
4+
5+
Add translation support for DateRangePicker component. Fixed hardcoded "Date range", "Start date", and "End date" text by implementing proper i18n support with translation keys and updated all language files (German, Spanish, French, Italian).

workspaces/adoption-insights/packages/app/e2e-tests/insights.test.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,14 @@ test('Select date range', async () => {
9696
await openDateRangePicker(page, translations.header.dateRange.dateRange);
9797

9898
const datePicker = page.locator('.v5-MuiPaper-root', {
99-
hasText: 'Start date',
99+
hasText: translations.header.dateRange.startDate,
100100
});
101101
await expect(datePicker).toBeVisible();
102-
await closeDateRangePicker(page, translations.header.dateRange.cancel);
102+
await closeDateRangePicker(
103+
page,
104+
translations.header.dateRange.cancel,
105+
translations.header.dateRange.startDate,
106+
);
103107
await expect(datePicker).not.toBeVisible();
104108

105109
await selectDateRange(page, translations.header.dateRange.today);

workspaces/adoption-insights/packages/app/e2e-tests/utils/insightsHelpers.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,13 @@ export async function openDateRangePicker(page: Page, dateRangeText?: string) {
5959
/**
6060
* Close the date range picker
6161
*/
62-
export async function closeDateRangePicker(page: Page, cancelText?: string) {
62+
export async function closeDateRangePicker(
63+
page: Page,
64+
cancelText?: string,
65+
startDateText?: string,
66+
) {
6367
const datePicker = page.locator('.v5-MuiPaper-root', {
64-
hasText: 'Start date',
68+
hasText: startDateText || 'Start date',
6569
});
6670
await datePicker
6771
.getByRole('button', { name: cancelText || 'Cancel' })

workspaces/adoption-insights/plugins/adoption-insights/report.api.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export const adoptionInsightsTranslationRef: TranslationRef<
3030
'plugin.adoption-insights',
3131
{
3232
readonly 'header.title': string;
33+
readonly 'header.dateRange.title': string;
3334
readonly 'header.dateRange.dateRange': string;
3435
readonly 'header.dateRange.today': string;
3536
readonly 'header.dateRange.lastWeek': string;
@@ -39,6 +40,8 @@ export const adoptionInsightsTranslationRef: TranslationRef<
3940
readonly 'header.dateRange.cancel': string;
4041
readonly 'header.dateRange.ok': string;
4142
readonly 'header.dateRange.defaultLabel': string;
43+
readonly 'header.dateRange.startDate': string;
44+
readonly 'header.dateRange.endDate': string;
4245
readonly 'table.headers.name': string;
4346
readonly 'table.headers.kind': string;
4447
readonly 'table.headers.lastUsed': string;

workspaces/adoption-insights/plugins/adoption-insights/src/components/Header/DateRangePicker.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import { isAfter, isBefore, isSameDay } from 'date-fns';
2828
import { DatePicker } from '@mui/x-date-pickers';
2929
import Divider from '@mui/material/Divider';
3030
import Typography from '@mui/material/Typography';
31+
import { useTranslation } from '../../hooks/useTranslation';
3132

3233
interface DateRangePickerProps {
3334
startDate: Date | null;
@@ -42,6 +43,7 @@ const DateRangePicker: FC<DateRangePickerProps> = ({
4243
endDate,
4344
setEndDate,
4445
}) => {
46+
const { t } = useTranslation();
4547
const handleDateChange = useCallback(
4648
(date: Date | null) => {
4749
if (!date) return;
@@ -141,7 +143,7 @@ const DateRangePicker: FC<DateRangePickerProps> = ({
141143
<LocalizationProvider dateAdapter={AdapterDateFns}>
142144
<Box>
143145
<Typography variant="h5" p={2} pb={0} fontWeight="400">
144-
Date range
146+
{t('header.dateRange.title')}
145147
</Typography>
146148
<Divider sx={{ mt: 2 }} />
147149
<Grid
@@ -151,7 +153,7 @@ const DateRangePicker: FC<DateRangePickerProps> = ({
151153
>
152154
<Grid item xs={6} sx={{ padding: '16px 8px 16px 24px !important' }}>
153155
<DatePicker
154-
label="Start date"
156+
label={t('header.dateRange.startDate')}
155157
value={startDate}
156158
onChange={handleStartDateChange}
157159
renderInput={params => (
@@ -168,7 +170,7 @@ const DateRangePicker: FC<DateRangePickerProps> = ({
168170

169171
<Grid item xs={6} sx={{ padding: '16px 24px 16px 8px !important' }}>
170172
<DatePicker
171-
label="End date"
173+
label={t('header.dateRange.endDate')}
172174
value={endDate}
173175
onChange={handleEndDateChange}
174176
renderInput={params => (

workspaces/adoption-insights/plugins/adoption-insights/src/components/Header/__tests__/DateRangePicker.test.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,21 @@ import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
2121

2222
import DateRangePicker from '../DateRangePicker';
2323

24+
// Mock translation hooks - define the mock inline to avoid hoisting issues
25+
jest.mock('../../../hooks/useTranslation', () => ({
26+
useTranslation: () => ({
27+
t: (key: string) => {
28+
// Mock the specific translation keys we need for this test
29+
const translations: Record<string, string> = {
30+
'header.dateRange.title': 'Date range',
31+
'header.dateRange.startDate': 'Start date',
32+
'header.dateRange.endDate': 'End date',
33+
};
34+
return translations[key] || key;
35+
},
36+
}),
37+
}));
38+
2439
const renderWithState = () => {
2540
const Wrapper = () => {
2641
const [startDate, setStartDate] = useState<Date | null>(null);

workspaces/adoption-insights/plugins/adoption-insights/src/translations/de.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ const adoptionInsightsTranslationDe = createTranslationMessages({
3535
'header.dateRange.cancel': 'Abbrechen',
3636
'header.dateRange.ok': 'OK',
3737
'header.dateRange.defaultLabel': 'Letzte 28 Tage',
38+
'header.dateRange.title': 'Datumsbereich',
39+
'header.dateRange.startDate': 'Startdatum',
40+
'header.dateRange.endDate': 'Enddatum',
3841
'activeUsers.title': 'Aktive Benutzer',
3942
'activeUsers.averagePrefix':
4043
'Durchschnittliche Spitzenanzahl aktiver Benutzer war',

workspaces/adoption-insights/plugins/adoption-insights/src/translations/es.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ const adoptionInsightsTranslationEs = createTranslationMessages({
3535
'header.dateRange.cancel': 'Cancelar',
3636
'header.dateRange.ok': 'OK',
3737
'header.dateRange.defaultLabel': 'Últimos 28 días',
38+
'header.dateRange.title': 'Rango de fechas',
39+
'header.dateRange.startDate': 'Fecha de inicio',
40+
'header.dateRange.endDate': 'Fecha de fin',
3841
'activeUsers.title': 'Usuarios Activos',
3942
'activeUsers.averagePrefix': 'El promedio de usuarios activos máximos fue',
4043
'activeUsers.averageText': '{{count}} por {{period}}',

workspaces/adoption-insights/plugins/adoption-insights/src/translations/fr.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,14 @@ const adoptionInsightsTranslationFr = createTranslationMessages({
5353
'header.dateRange.cancel': 'Annuler',
5454
'header.dateRange.dateRange': 'Plage de dates...',
5555
'header.dateRange.defaultLabel': 'Les 28 derniers jours',
56+
'header.dateRange.endDate': 'Date de fin',
5657
'header.dateRange.last28Days': 'Les 28 derniers jours',
5758
'header.dateRange.lastMonth': 'Mois dernier',
5859
'header.dateRange.lastWeek': 'La semaine dernière',
60+
'header.dateRange.startDate': 'Date de début',
5961
'header.dateRange.lastYear': "L'année dernière",
6062
'header.dateRange.ok': 'OK',
63+
'header.dateRange.title': 'Plage de dates',
6164
'header.dateRange.today': "Aujourd'hui",
6265
'header.title': 'Adoption Insights',
6366
'page.title': 'Adoption Insights',

workspaces/adoption-insights/plugins/adoption-insights/src/translations/it.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ const adoptionInsightsTranslationIt = createTranslationMessages({
3535
'header.dateRange.cancel': 'Annulla',
3636
'header.dateRange.ok': 'OK',
3737
'header.dateRange.defaultLabel': 'Ultimi 28 giorni',
38+
'header.dateRange.title': 'Intervallo di date',
39+
'header.dateRange.startDate': 'Data di inizio',
40+
'header.dateRange.endDate': 'Data di fine',
3841
'activeUsers.title': 'Utenti Attivi',
3942
'activeUsers.averagePrefix':
4043
'Il numero medio di utenti attivi di picco era',

0 commit comments

Comments
 (0)