11import { useTranslations } from "next-intl" ;
22
33import TabsClient from "./TabsClient" ;
4+ import { processArchitecturesData } from "@/utils/downloadDataProcessor" ;
45
56import type { DownloadData } from "@/types/downloads" ;
67
@@ -71,6 +72,8 @@ const DownloadTabs = ({ downloadData }: DownloadTabsProps) => {
7172 } ,
7273 wslImages : {
7374 title : t ( "cards.wslImages.title" ) ,
75+ download : t ( "cards.wslImages.download" ) ,
76+ readMe : t ( "cards.wslImages.readMe" ) ,
7477 } ,
7578 visionfive2Images : {
7679 title : t ( "cards.visionfive2Images.title" ) ,
@@ -80,204 +83,10 @@ const DownloadTabs = ({ downloadData }: DownloadTabsProps) => {
8083 } ,
8184 } ;
8285
83- // Transform raw data into client-ready format
84- const processedArchitectures = Object . fromEntries (
85- Object . entries ( downloadData . architectures ) . map ( ( [ arch , data ] ) => [
86- arch ,
87- {
88- versions : data . versions . map ( ( version ) => {
89- // Create a combined version with all the different mappings
90- const baseVersion = {
91- versionName : version . versionName ,
92- versionId : version . versionId ,
93- currentVersion : version . currentVersion ,
94- plannedEol : version . plannedEol ,
95- } ;
96-
97- const defaultImages = {
98- downloadOptions : [
99- {
100- label : translations . cards . defaultImages . downloadOptions . dvd ,
101- link : version . downloadOptions . defaultImages . dvd ,
102- } ,
103- {
104- label : translations . cards . defaultImages . downloadOptions . boot ,
105- link : version . downloadOptions . defaultImages . boot ,
106- } ,
107- ...( version . downloadOptions . defaultImages . minimal
108- ? [
109- {
110- label :
111- translations . cards . defaultImages . downloadOptions
112- . minimal ,
113- link : version . downloadOptions . defaultImages
114- . minimal as string ,
115- } ,
116- ]
117- : [ ] ) ,
118- ] ,
119- links : [
120- {
121- name : translations . cards . defaultImages . torrent ,
122- link : version . links . defaultImages . torrent ,
123- } ,
124- {
125- name : translations . cards . defaultImages . checksum ,
126- link : version . links . defaultImages . checksum ,
127- } ,
128- {
129- name : translations . cards . defaultImages . baseOs ,
130- link : version . links . defaultImages . baseOs ,
131- } ,
132- {
133- name : translations . cards . defaultImages . archived ,
134- link : version . links . defaultImages . archived ,
135- } ,
136- ] ,
137- } ;
138-
139- const cloudImages = {
140- downloadOptions :
141- version . downloadOptions . cloudImages && version . links . cloudImages
142- ? [
143- {
144- label :
145- translations . cards . cloudImages . downloadOptions . qcow2 ,
146- link : version . downloadOptions . cloudImages . qcow2 ,
147- } ,
148- ]
149- : [ ] ,
150- links :
151- version . downloadOptions . cloudImages && version . links . cloudImages
152- ? [
153- {
154- name : translations . cards . defaultImages . checksum ,
155- link : version . links . cloudImages . checksum ,
156- } ,
157- ]
158- : [ ] ,
159- } ;
160-
161- const containerImages = {
162- downloadOptions : [
163- {
164- label : translations . cards . container . downloadOptions . fullImage ,
165- link : version . downloadOptions . container . fullImage ,
166- } ,
167- {
168- label :
169- translations . cards . container . downloadOptions . minimalImage ,
170- link : version . downloadOptions . container . minimalImage ,
171- } ,
172- ] ,
173- links : [ ] ,
174- } ;
175-
176- const liveImages = {
177- downloadOptions : version . downloadOptions . liveImages
178- ? Object . entries ( version . downloadOptions . liveImages ) . map (
179- ( [ key , link ] ) => ( {
180- label : t ( `cards.liveImages.downloadOptions.${ key } ` ) ,
181- link : link as string ,
182- } )
183- )
184- : [ ] ,
185- links : version . links . liveImages
186- ? [
187- {
188- name : translations . cards . defaultImages . checksums ,
189- link : version . links . liveImages . checksums ,
190- } ,
191- ]
192- : [ ] ,
193- } ;
194-
195- const rpiImages = {
196- downloadOptions : version . downloadOptions . rpiImages
197- ? [
198- {
199- label : translations . cards . rpiImages . download ,
200- link : version . downloadOptions . rpiImages . download ,
201- } ,
202- ]
203- : [ ] ,
204- links : version . links . rpiImages
205- ? [
206- {
207- name : translations . cards . defaultImages . checksum ,
208- link : version . links . rpiImages . checksum ,
209- } ,
210- {
211- name : translations . cards . rpiImages . readMe ,
212- link : version . links . rpiImages . readMe ,
213- } ,
214- ]
215- : [ ] ,
216- } ;
217-
218- const wslImages = {
219- downloadOptions : version . downloadOptions . wslImages
220- ? [
221- {
222- label : translations . cards . rpiImages . download ,
223- link : version . downloadOptions . wslImages . download ,
224- } ,
225- ]
226- : [ ] ,
227- links : version . links . wslImages
228- ? [
229- {
230- name : translations . cards . defaultImages . checksum ,
231- link : version . links . wslImages . checksum ,
232- } ,
233- {
234- name : translations . cards . rpiImages . readMe ,
235- link : version . links . wslImages . readMe ,
236- } ,
237- ]
238- : [ ] ,
239- } ;
240-
241- const visionFive2Images = {
242- downloadOptions : version . downloadOptions . visionfive2Images
243- ? [
244- {
245- label : translations . cards . visionfive2Images . download ,
246- link : version . downloadOptions . visionfive2Images . download ,
247- } ,
248- ]
249- : [ ] ,
250- links : version . links . visionfive2Images
251- ? [
252- {
253- name : translations . cards . defaultImages . checksum ,
254- link : version . links . visionfive2Images . checksum ,
255- } ,
256- ...( version . links . visionfive2Images . readMe
257- ? [
258- {
259- name : translations . cards . visionfive2Images . readMe ,
260- link : version . links . visionfive2Images . readMe ,
261- } ,
262- ]
263- : [ ] ) ,
264- ]
265- : [ ] ,
266- } ;
267-
268- return {
269- ...baseVersion ,
270- defaultImages,
271- cloudImages,
272- containerImages,
273- liveImages,
274- rpiImages,
275- wslImages,
276- visionFive2Images,
277- } ;
278- } ) ,
279- } ,
280- ] )
86+ // Transform raw data into client-ready format using cached utility
87+ const processedArchitectures = processArchitecturesData (
88+ downloadData ,
89+ translations
28190 ) ;
28291
28392 return (
0 commit comments