11'use client' ;
22
33import Badge from '@node-core/ui-components/Common/Badge' ;
4+ import ResponsiveTable from '@node-core/ui-components/Common/ResponsiveTable' ;
45import { useTranslations } from 'next-intl' ;
56import type { FC } from 'react' ;
67import { useState } from 'react' ;
@@ -26,61 +27,59 @@ const PreviousReleasesTable: FC = () => {
2627
2728 const [ currentModal , setCurrentModal ] = useState < string | undefined > ( ) ;
2829
29- return (
30- < table id = "tbVersions" >
31- < thead >
32- < tr >
33- < th > { t ( 'components.downloadReleasesTable.version' ) } </ th >
34- < th > { t ( 'components.downloadReleasesTable.codename' ) } </ th >
35- < th > { t ( 'components.downloadReleasesTable.firstReleased' ) } </ th >
36- < th > { t ( 'components.downloadReleasesTable.lastUpdated' ) } </ th >
37- < th > { t ( 'components.downloadReleasesTable.status' ) } </ th >
38- < th > </ th >
39- </ tr >
40- </ thead >
41-
42- < tbody >
43- { releaseData . map ( release => (
44- < >
45- < tr key = { release . major } >
46- < td data-label = "Version" > v{ release . major } </ td >
47-
48- < td data-label = "LTS" > { release . codename || '-' } </ td >
49-
50- < td data-label = "Date" >
51- < FormattedTime date = { release . currentStart } />
52- </ td >
30+ const columns = [
31+ { key : 'version' , header : t ( 'components.downloadReleasesTable.version' ) } ,
32+ { key : 'codename' , header : t ( 'components.downloadReleasesTable.codename' ) } ,
33+ {
34+ key : 'firstReleased' ,
35+ header : t ( 'components.downloadReleasesTable.firstReleased' ) ,
36+ } ,
37+ {
38+ key : 'lastUpdated' ,
39+ header : t ( 'components.downloadReleasesTable.lastUpdated' ) ,
40+ } ,
41+ { key : 'status' , header : t ( 'components.downloadReleasesTable.status' ) } ,
42+ { key : 'details' , header : '' } ,
43+ ] ;
44+
45+ const data = releaseData . map ( release => ( {
46+ version : `v${ release . major } ` ,
47+ codename : release . codename || '-' ,
48+ firstReleased : < FormattedTime date = { release . currentStart } /> ,
49+ lastUpdated : < FormattedTime date = { release . releaseDate } /> ,
50+ status : (
51+ < Badge kind = { BADGE_KIND_MAP [ release . status ] } size = "small" >
52+ { release . status }
53+ { release . status === 'End-of-life' ? ' (EoL)' : '' }
54+ </ Badge >
55+ ) ,
56+ details : (
57+ < LinkWithArrow
58+ className = "cursor-pointer"
59+ onClick = { ( ) => setCurrentModal ( release . version ) }
60+ >
61+ { t ( 'components.downloadReleasesTable.details' ) }
62+ </ LinkWithArrow >
63+ ) ,
64+ } ) ) ;
5365
54- < td data-label = "Date" >
55- < FormattedTime date = { release . releaseDate } />
56- </ td >
57-
58- < td data-label = "Status" >
59- < Badge kind = { BADGE_KIND_MAP [ release . status ] } size = "small" >
60- { release . status }
61- { release . status === 'End-of-life' ? ' (EoL)' : '' }
62- </ Badge >
63- </ td >
64-
65- < td >
66- < LinkWithArrow
67- className = "cursor-pointer"
68- onClick = { ( ) => setCurrentModal ( release . version ) }
69- >
70- { t ( 'components.downloadReleasesTable.details' ) }
71- </ LinkWithArrow >
72- </ td >
73- </ tr >
74-
75- < ReleaseModal
76- release = { release }
77- open = { currentModal === release . version }
78- onOpenChange = { open => open || setCurrentModal ( undefined ) }
79- />
80- </ >
81- ) ) }
82- </ tbody >
83- </ table >
66+ return (
67+ < >
68+ < ResponsiveTable
69+ data = { data }
70+ columns = { columns }
71+ getRowId = { data => data . version }
72+ getRowLabel = { data => data . version }
73+ />
74+ { releaseData . map ( release => (
75+ < ReleaseModal
76+ key = { release . version }
77+ release = { release }
78+ open = { currentModal === release . version }
79+ onOpenChange = { open => open || setCurrentModal ( undefined ) }
80+ />
81+ ) ) }
82+ </ >
8483 ) ;
8584} ;
8685
0 commit comments