@@ -2,7 +2,6 @@ import { ArrowUpRightIcon } from '@heroicons/react/24/outline';
22import Banner from '@node-core/ui-components/Common/Banner' ;
33import { useEffect , useState } from 'preact/hooks' ;
44
5- import { STATIC_DATA } from '../../constants.mjs' ;
65import { isBannerActive } from '../../utils/banner.mjs' ;
76
87/** @import { BannerEntry, RemoteConfig } from './types.d.ts' */
@@ -11,13 +10,13 @@ import { isBannerActive } from '../../utils/banner.mjs';
1110 * Asynchronously fetches and displays announcement banners from the remote config.
1211 * Global banners are rendered above version-specific ones.
1312 * Non-blocking: silently ignores fetch/parse failures.
13+ *
14+ * @param {{ remoteConfig: string, versionMajor: number | null } } props
1415 */
15- export default ( ) => {
16+ export default ( { remoteConfig , versionMajor } ) => {
1617 const [ banners , setBanners ] = useState ( /** @type {BannerEntry[] } */ ( [ ] ) ) ;
1718
1819 useEffect ( ( ) => {
19- const { remoteConfig, versionMajor } = STATIC_DATA ;
20-
2120 if ( ! remoteConfig ) {
2221 return ;
2322 }
@@ -40,9 +39,11 @@ export default () => {
4039 active . push ( globalBanner ) ;
4140 }
4241
43- const versionBanner = config [ `v${ versionMajor } ` ] ?. banner ;
44- if ( versionBanner && isBannerActive ( versionBanner ) ) {
45- active . push ( versionBanner ) ;
42+ if ( versionMajor != null ) {
43+ const versionBanner = config [ `v${ versionMajor } ` ] ?. banner ;
44+ if ( versionBanner && isBannerActive ( versionBanner ) ) {
45+ active . push ( versionBanner ) ;
46+ }
4647 }
4748
4849 setBanners ( active ) ;
@@ -57,11 +58,17 @@ export default () => {
5758 }
5859
5960 return (
60- < div >
61+ < div role = "region" aria-label = "Announcements" >
6162 { banners . map ( banner => (
62- < Banner key = { banner . link } type = { banner . type } >
63- { banner . link ? < a href = { banner . link } > { banner . text } </ a > : banner . text }
64- { banner . link && < ArrowUpRightIcon /> }
63+ < Banner key = { banner . text ?? banner . text } type = { banner . type } >
64+ { banner . link ? (
65+ < a href = { banner . link } target = "_blank" rel = "noopener noreferrer" >
66+ { banner . text }
67+ < ArrowUpRightIcon />
68+ </ a >
69+ ) : (
70+ banner . text
71+ ) }
6572 </ Banner >
6673 ) ) }
6774 </ div >
0 commit comments