| 1 | import {Chip, Typography} from '@mui/material';
|
|---|
| 2 | import React from "react";
|
|---|
| 3 |
|
|---|
| 4 | export function renderSpecs(c: any, type: string) {
|
|---|
| 5 | if (!c) return null;
|
|---|
| 6 | const data = {...c, ...(c.details || {})};
|
|---|
| 7 | const chipStyle = {height: 24, fontSize: '0.75rem', bgcolor: 'rgba(0,0,0,0.05)'};
|
|---|
| 8 | const specs: string[] = [];
|
|---|
| 9 | const val = (k: string) => data[k] || data[k.toLowerCase()] || data[k.replace('_', '')];
|
|---|
| 10 |
|
|---|
| 11 | switch (type) {
|
|---|
| 12 |
|
|---|
| 13 | case 'cpu':
|
|---|
| 14 | if (val('socket')) specs.push(`Socket: ${val('socket')}`);
|
|---|
| 15 | if (val('cores')) specs.push(`${val('cores')} Cores / ${val('threads')} Threads`);
|
|---|
| 16 | const base = data.baseclock || data.baseClock || data.base_clock;
|
|---|
| 17 | const boost = data.boostclock || data.boostClock || data.boost_clock;
|
|---|
| 18 | if (base) specs.push(`Base Clock Speed: ${base}GHz`);
|
|---|
| 19 | if (boost) specs.push(`Boost Clock Speed: ${boost}GHz`);
|
|---|
| 20 | break;
|
|---|
| 21 | case 'gpu':
|
|---|
| 22 | if (val('vram')) specs.push(`VRAM: ${val('vram')}GB`);
|
|---|
| 23 | if (val('tdp')) specs.push(`Card TDP: ${val('tdp')}W`);
|
|---|
| 24 | if (val('length')) specs.push(`Length: ${val('length')}mm`);
|
|---|
| 25 | if (val('baseClock')) specs.push(`Base Clock Speed: ${val('baseClock')}GHz`);
|
|---|
| 26 | if (val('boostClock')) specs.push(`Boost Clock Speed: ${val('boostClock')}GHz`);
|
|---|
| 27 | break;
|
|---|
| 28 | case 'motherboard':
|
|---|
| 29 | if (val('socket')) specs.push(`Socket: ${val('socket')}`);
|
|---|
| 30 | if (val('formFactor')) specs.push(`Form Factor: ${val('formFactor')}`);
|
|---|
| 31 | if (val('ramType')) specs.push(`RAM Type: ${val('ramType')}`);
|
|---|
| 32 | if (val('numRamSlots')) specs.push(`RAM Slots: ${val('numRamSlots')}`);
|
|---|
| 33 | if (val('maxRamCapacity')) specs.push(`Max Ram Caacity: ${val('maxRamCapacity')}GB`);
|
|---|
| 34 | break;
|
|---|
| 35 | case 'memory':
|
|---|
| 36 | if (val('capacity')) specs.push(`Size Per Stick: ${val('capacity')}GB`);
|
|---|
| 37 | if (val('type')) specs.push(`RAM Type: ${val('type')}`);
|
|---|
| 38 | if (val('speed')) specs.push(`RAM Speed: ${val('speed')} MHz`);
|
|---|
| 39 | if (val('modules')) specs.push(`Modules: ${val('modules')}`);
|
|---|
| 40 | break;
|
|---|
| 41 | case 'storage':
|
|---|
| 42 | if (val('capacity')) specs.push(`Capacity: ${val('capacity')}GB`);
|
|---|
| 43 | if (val('type')) specs.push(`Type: ${val('type')}`);
|
|---|
| 44 | break;
|
|---|
| 45 | case 'power_supply':
|
|---|
| 46 | if (val('wattage')) specs.push(`Wattage: ${val('wattage')}W`);
|
|---|
| 47 | if (val('type')) specs.push(`Type: ${val('type')}`);
|
|---|
| 48 | if (val('formFactor')) specs.push(`Form Factor: ${val('formFactor')}`);
|
|---|
| 49 | break;
|
|---|
| 50 | case 'case':
|
|---|
| 51 | if (val('gpuMaxLength')) specs.push(`Max GPU Length: ${val('gpuMaxLength')}mm`);
|
|---|
| 52 | if (val('coolerMaxHeight')) specs.push(`Max CPU Cooler Height: ${val('coolerMaxHeight')}mm`);
|
|---|
| 53 | break;
|
|---|
| 54 | case 'cooler':
|
|---|
| 55 | if (val('type')) specs.push(`Cooler Type: ${val('type')} Cooler`);
|
|---|
| 56 | if (val('height')) specs.push(`Height: ${val('height')}mm`);
|
|---|
| 57 | if (val('maxTdpSupported')) specs.push(`Max TDP: ${val('maxTdpSupported')}W`);
|
|---|
| 58 | break;
|
|---|
| 59 | case 'network_card':
|
|---|
| 60 | if (val('interface')) specs.push(`Interface: ${val('interface')}`);
|
|---|
| 61 | if (val('numPorts')) specs.push(`Number of Ports: ${val('numPorts')}`);
|
|---|
| 62 | if (val('speed')) specs.push(`Speed: ${val('speed')}Mbps`);
|
|---|
| 63 | break;
|
|---|
| 64 | case 'network_adapter':
|
|---|
| 65 | if (val('interface')) specs.push(`Interface: ${val('interface')}`);
|
|---|
| 66 | if (val('numAntennas')) specs.push(`Number of Antennas: ${val('numAntennas')}`);
|
|---|
| 67 | if (val('wifiVersion')) specs.push(`Wi-Fi Version: ${val('wifiVersion')}`);
|
|---|
| 68 | break;
|
|---|
| 69 | case 'sound_card':
|
|---|
| 70 | if (val('interface')) specs.push(`Interface: ${val('interface')}`);
|
|---|
| 71 | if (val('chipset')) specs.push(`Chipset: ${val('chipset')}`);
|
|---|
| 72 | if (val('channel')) specs.push(`Channels: ${val('channel')}`);
|
|---|
| 73 | break;
|
|---|
| 74 | case 'memory_card':
|
|---|
| 75 | if (val('interface')) specs.push(`Interface: ${val('interface')}`);
|
|---|
| 76 | if (val('numSlots')) specs.push(`Number of Slots: ${val('numSlots')}`);
|
|---|
| 77 | break;
|
|---|
| 78 | case 'optical_drive':
|
|---|
| 79 | if (val('interface')) specs.push(`Interface: ${val('interface')}`);
|
|---|
| 80 | if (val('type')) specs.push(`Type: ${val('type')}`);
|
|---|
| 81 | if (val('formFactor')) specs.push(`Form Factor: ${val('formFactor')}`);
|
|---|
| 82 | break;
|
|---|
| 83 | case 'cables':
|
|---|
| 84 | if (val('type')) specs.push(`Type of Cables: ${val('type')}`);
|
|---|
| 85 | if (val('lengthCm')) specs.push(`Length: ${val('lengthCm')}cm`);
|
|---|
| 86 | break;
|
|---|
| 87 | default:
|
|---|
| 88 | if (data.brand) specs.push(data.brand);
|
|---|
| 89 | }
|
|---|
| 90 |
|
|---|
| 91 | if (specs.length === 0) {
|
|---|
| 92 | if (data.brand) return <Chip label={data.brand} sx={chipStyle}/>;
|
|---|
| 93 | return <Typography variant="caption" color="text.secondary">...</Typography>;
|
|---|
| 94 | }
|
|---|
| 95 |
|
|---|
| 96 | return specs.map((label, i) => <Chip key={i} label={label} sx={chipStyle}/>);
|
|---|
| 97 | } |
|---|