@@ -33,7 +33,10 @@ type TDynamicContentItem = {
3333 multiRow ?: string ;
3434 label ?: string ;
3535 title ?: string ;
36+ name ?: string ;
37+ valueMode ?: "value" | "title" | "multiRow" ;
3638 iconMode ?: "standard" | "custom" ;
39+ linkMode ?: "link" | "markdown" ;
3740 icon ?: {
3841 icon : IconName ;
3942 prefix : IconPrefix ;
@@ -115,31 +118,34 @@ const DynamicSection: React.FC<{ content: TDynamicContentItem }> = ({ content })
115118
116119 { content . items . map ( ( item , idx ) => (
117120 < div key = { idx } className = { styles . dynamicSectionContent } >
118- { item . title && (
121+ { item . valueMode === " title" && (
119122 < DynamicItemHeading
120123 heading = { window . sessionStorage . getItem ( "FOOTER_CONTENT_HEADER" ) ?? "" }
121- title = { item . title }
124+ title = { item . value ?? item . name }
122125 />
123126 ) }
124127 { item . label && < strong > { t ( item . label ) } </ strong > }
128+
125129 { /* External Link */ }
126- { item . link && ( / ^ h t t p s ? : \/ \/ / i. test ( item . link ) || / ^ w w w \. / i. test ( item . link ) ) && (
130+ { item . linkMode === "link" && item . link && ( / ^ h t t p s ? : \/ \/ / i. test ( item . link ) || / ^ w w w \. / i. test ( item . link ) ) && (
127131 < ExternalLink { ...{ item } } />
128132 ) }
129133
130134 { /* Internal Link */ }
131- { item . link && ! ( / ^ h t t p s ? : \/ \/ / i. test ( item . link ) || / ^ w w w \. / i. test ( item . link ) ) && (
132- < InternalLink { ...{ item } } />
133- ) }
135+ { item . linkMode === "link" &&
136+ item . valueMode !== "multiRow" &&
137+ item . valueMode !== "title" &&
138+ item . link &&
139+ ! ( / ^ h t t p s ? : \/ \/ / i. test ( item . link ) || / ^ w w w \. / i. test ( item . link ) ) && < InternalLink { ...{ item } } /> }
134140
135141 { /* Internal Link Github/Markdown link */ }
136- { item . markdownLink && < MarkdownLink { ...{ item } } /> }
142+ { item . linkMode === "markdown" && item . link && < MarkdownLink { ...{ item } } /> }
137143
138144 { /* MultiRow */ }
139- { item . multiRow && < MultiRow { ...{ item } } /> }
145+ { item . valueMode === " multiRow" && < MultiRow { ...{ item } } /> }
140146
141147 { /* No Link */ }
142- { ! item . link && ! item . markdownLink && ! item . multiRow && < NoLink { ...{ item } } /> }
148+ { ! item . link && item . valueMode !== " multiRow" && < NoLink { ...{ item } } /> }
143149 </ div >
144150 ) ) }
145151 </ section >
@@ -255,16 +261,24 @@ const renderIcon = (item: any, side: "left" | "right") => {
255261const ExternalLink : React . FC < LinkComponentProps > = ( { item } ) => {
256262 const { t } = useTranslation ( ) ;
257263
264+ // Ensure www. links have https:// protocol
265+ const getFullUrl = ( link : string ) => {
266+ if ( / ^ w w w \. / i. test ( link ) ) {
267+ return `https://${ link } ` ;
268+ }
269+ return link ;
270+ } ;
271+
258272 return (
259273 < Link
260274 className = { styles . link }
261- href = { item . link }
275+ href = { getFullUrl ( item . link ) }
262276 target = "_blank"
263277 tabIndex = { 0 }
264- aria-label = { `${ t ( item . ariaLabel ) } , ${ item . name } , ${ t ( "Opens a new window" ) } ` }
278+ aria-label = { `${ t ( item . ariaLabel ) } , ${ item . value || item . name } , ${ t ( "Opens a new window" ) } ` }
265279 >
266280 { renderIcon ( item , "left" ) }
267- { t ( item . name ) }
281+ { t ( item . value || item . name ) }
268282 { renderIcon ( item , "right" ) }
269283 </ Link >
270284 ) ;
@@ -277,15 +291,15 @@ const InternalLink: React.FC<LinkComponentProps> = ({ item }) => {
277291 < Link
278292 className = { styles . link }
279293 onClick = { ( e : any ) => {
280- e . preventDefault ( ) , navigate ( item . link ?? "" ) ;
294+ ( e . preventDefault ( ) , navigate ( item . link ?? "" ) ) ;
281295 } }
282296 tabIndex = { 0 }
283- aria-label = { `${ t ( item . ariaLabel ) } , ${ t ( item . name ) } ` }
297+ aria-label = { `${ t ( item . ariaLabel ) } , ${ t ( item . value ?? item . name ) } ` }
284298 role = "button"
285299 href = { item . link }
286300 >
287301 { renderIcon ( item , "left" ) }
288- { t ( item . name ) }
302+ { t ( item . value ?? item . name ) }
289303 { renderIcon ( item , "right" ) }
290304 </ Link >
291305 ) ;
@@ -298,25 +312,27 @@ const MarkdownLink: React.FC<LinkComponentProps> = ({ item }) => {
298312 < Link
299313 className = { styles . link }
300314 onClick = { ( e : any ) => {
301- e . preventDefault ( ) , navigate ( `/markdown/${ item . name . replaceAll ( " " , "_" ) } /?link=${ item . markdownLink } ` ) ;
315+ ( e . preventDefault ( ) , navigate ( `/markdown/${ item . name . replaceAll ( " " , "_" ) } /?link=${ item . link } ` ) ) ;
302316 } }
303317 tabIndex = { 0 }
304- aria-label = { `${ t ( item . ariaLabel ) } , ${ t ( item . markdownLink ) } ` }
318+ aria-label = { `${ t ( item . ariaLabel ) } , ${ t ( item . link ) } ` }
305319 role = "button"
306- href = { item . markdownLink }
320+ href = { item . link }
307321 >
308322 { renderIcon ( item , "left" ) }
309- { t ( item . name ) }
323+ { t ( item . value ?? item . name ) }
310324 { renderIcon ( item , "right" ) }
311325 </ Link >
312326 ) ;
313327} ;
314328
315329const MultiRow : React . FC < LinkComponentProps > = ( { item } ) => {
330+ console . log ( "multirow" , item . value ) ;
331+
316332 return (
317333 < span className = { styles . multiRow } >
318334 { renderIcon ( item , "left" ) }
319- < div > { item . multiRow } </ div >
335+ < div > { item . value ?? item . name } </ div >
320336 { renderIcon ( item , "right" ) }
321337 </ span >
322338 ) ;
@@ -328,7 +344,7 @@ const NoLink: React.FC<LinkComponentProps> = ({ item }) => {
328344 return (
329345 < span >
330346 { renderIcon ( item , "left" ) }
331- { t ( item . name ) }
347+ { t ( item . value ?? item . name ) }
332348 { renderIcon ( item , "right" ) }
333349 </ span >
334350 ) ;
0 commit comments