Skip to content

Commit afb2934

Browse files
authored
Merge branch 'main' into main
2 parents d82ed97 + 8a33d63 commit afb2934

4 files changed

Lines changed: 51 additions & 7 deletions

File tree

src/app-layout/__tests__/runtime-feature-notifications.test.tsx

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,38 @@ describeEachAppLayout({ themes: ['refresh-toolbar'] }, ({ size }) => {
520520
});
521521
});
522522

523+
test('renders labels from i18nStrings payload prop', () => {
524+
const i18nStringsPayload: FeatureNotificationsPayload<string>['i18nStrings'] = {
525+
titleText: 'Payload title',
526+
viewAllText: 'Payload view all',
527+
closeButtonAriaLabel: 'Payload close',
528+
contentAriaLabel: 'Payload content',
529+
triggerButtonAriaLabel: 'Payload trigger',
530+
resizeHandleAriaLabel: 'Payload resize',
531+
};
532+
featureNotifications.registerFeatureNotifications({
533+
...featureNotificationsDefaults,
534+
i18nStrings: i18nStringsPayload,
535+
});
536+
const { wrapper } = renderComponent(<AppLayout />);
537+
538+
expect(wrapper.findDrawerTriggerById(featureNotificationsDefaults.id)!.getElement()).toHaveAttribute(
539+
'aria-label',
540+
'Payload trigger'
541+
);
542+
wrapper.findDrawerTriggerById(featureNotificationsDefaults.id)!.click();
543+
544+
const activeDrawerWrapper = wrapper.findActiveDrawer()!;
545+
546+
expect(activeDrawerWrapper.getElement()).toHaveAttribute('aria-label', 'Payload content');
547+
expect(activeDrawerWrapper.getElement()).toHaveTextContent('Payload title');
548+
expect(activeDrawerWrapper.getElement()).toHaveTextContent('Payload view all');
549+
expect(wrapper.findActiveDrawerCloseButton()!.getElement()).toHaveAttribute('aria-label', 'Payload close');
550+
if (size === 'desktop') {
551+
expect(wrapper.findActiveDrawerResizeHandle()!.getElement()).toHaveAttribute('aria-label', 'Payload resize');
552+
}
553+
});
554+
523555
test('renders feature notifications drawer alongside tools', () => {
524556
featureNotifications.registerFeatureNotifications(featureNotificationsDefaults);
525557
const { wrapper } = renderComponent(

src/app-layout/visual-refresh-toolbar/drawer/feature-notifications-drawer-content.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import React, { useEffect, useRef } from 'react';
55
import Box from '../../../box/internal';
66
import { InternalDrawer } from '../../../drawer/internal';
77
import { useInternalI18n } from '../../../i18n/context';
8-
import { Feature, MountContentPart } from '../../../internal/plugins/widget/interfaces';
8+
import { Feature, FeatureNotificationsPayload, MountContentPart } from '../../../internal/plugins/widget/interfaces';
99
import { formatDate } from '../../../internal/utils/date-time';
1010
import Link from '../../../link/internal';
1111
import List from '../../../list/internal';
@@ -42,15 +42,17 @@ export default function RuntimeFeaturesNotificationDrawer<T>({
4242
features,
4343
mountItem,
4444
featuresPageLink,
45+
i18nStrings,
4546
}: {
4647
features: Array<Feature<T>>;
4748
mountItem?: MountContentPart<T>;
4849
featuresPageLink?: string;
50+
i18nStrings?: FeatureNotificationsPayload<unknown>['i18nStrings'];
4951
}) {
5052
const i18n = useInternalI18n('features-notification-drawer');
5153

5254
return (
53-
<InternalDrawer header={i18n('i18nStrings.title', undefined)} disableContentPaddings={true}>
55+
<InternalDrawer header={i18n('i18nStrings.title', i18nStrings?.titleText)} disableContentPaddings={true}>
5456
<div className={styles['runtime-feature-notifications-drawer-content']}>
5557
<Box padding={{ top: 'm', left: 'xl', right: 'xl', bottom: 'm' }}>
5658
<List
@@ -83,7 +85,7 @@ export default function RuntimeFeaturesNotificationDrawer<T>({
8385
{!!featuresPageLink && (
8486
<footer className={styles['runtime-feature-notifications-footer']}>
8587
<Box padding={{ top: 's' }}>
86-
<Link href={featuresPageLink}>{i18n('i18nStrings.viewAll', undefined)}</Link>
88+
<Link href={featuresPageLink}>{i18n('i18nStrings.viewAll', i18nStrings?.viewAllText)}</Link>
8789
</Box>
8890
</footer>
8991
)}

src/app-layout/visual-refresh-toolbar/state/use-feature-notifications.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ export function useFeatureNotifications() {
9090
features={payload.features}
9191
featuresPageLink={payload.featuresPageLink}
9292
mountItem={payload.mountItem}
93+
i18nStrings={payload.i18nStrings}
9394
/>
9495
),
9596
trigger: {
@@ -102,10 +103,10 @@ export function useFeatureNotifications() {
102103
),
103104
},
104105
ariaLabels: {
105-
closeButton: i18n('ariaLabels.closeButton', undefined),
106-
drawerName: i18n('ariaLabels.content', undefined) ?? '',
107-
triggerButton: i18n('ariaLabels.triggerButton', undefined),
108-
resizeHandle: i18n('ariaLabels.resizeHandle', undefined),
106+
closeButton: i18n('ariaLabels.closeButton', payload.i18nStrings?.closeButtonAriaLabel),
107+
drawerName: i18n('ariaLabels.content', payload.i18nStrings?.contentAriaLabel) ?? '',
108+
triggerButton: i18n('ariaLabels.triggerButton', payload.i18nStrings?.triggerButtonAriaLabel),
109+
resizeHandle: i18n('ariaLabels.resizeHandle', payload.i18nStrings?.resizeHandleAriaLabel),
109110
},
110111
resizable: true,
111112
defaultSize: 320,

src/internal/plugins/widget/interfaces.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,15 @@ export interface FeatureNotificationsPayload<T> {
174174
* Should return a dictionary mapping feature IDs to their release date strings.
175175
*/
176176
__retrieveFeatureNotifications?: RetrieveFeatureNotifications;
177+
178+
i18nStrings?: {
179+
titleText?: string;
180+
viewAllText?: string;
181+
closeButtonAriaLabel?: string;
182+
contentAriaLabel?: string;
183+
triggerButtonAriaLabel?: string;
184+
resizeHandleAriaLabel?: string;
185+
};
177186
}
178187

179188
export type FeatureNotificationsPayloadPublic<T> = Omit<

0 commit comments

Comments
 (0)