source: pages/forge/utils/componentCalculations.ts@ 1b5c18b

main
Last change on this file since 1b5c18b was 1d8f088, checked in by Mihail <mihail2.naumov@…>, 5 months ago

Added +- buttons for ram and storage, rmeoved them from optional components.

  • Property mode set to 100644
File size: 2.0 KB
RevLine 
[1d8f088]1// Helper Functions
2import {BuildSlot} from "../types/buildTypes";
3
4export function calculateUsedRamSlots(slots: BuildSlot[]): number {
5 return slots
6 .filter(s => s.type === 'memory' && s.component)
7 .reduce((sum, s) => {
8 const modules = Number(s.component?.details?.modules || s.component?.modules || 1);
9 const quantity = Number(s.component?.quantity || 1);
10 return sum + (modules * quantity);
11 }, 0);
12}
13
14export function getMaxRamSlots(slots: BuildSlot[]): number | null {
15 const mobo = slots.find(s => s.type === 'motherboard' && s.component);
16 if (!mobo?.component?.details?.numRamSlots) return null;
17 return Number(mobo.component.details.numRamSlots);
18}
19
20export function calculateUsedStorageSlots(slots: BuildSlot[], formFactor: string): number {
21 return slots
22 .filter(s => s.type === 'storage' && s.component)
23 .reduce((sum, s) => {
24 const componentFormFactor = s.component?.details?.formFactor || s.component?.details?.form_factor || s.component?.formFactor;
25 if (componentFormFactor?.trim().toLowerCase() === formFactor?.trim().toLowerCase()) {
26 return sum + Number(s.component?.quantity || 1);
27 }
28 return sum;
29 }, 0);
30}
31
32export function getMaxStorageSlots(slots: BuildSlot[], formFactor: string): number | null {
33 const pcCase = slots.find(s => s.type === 'case' && s.component);
34 if (!pcCase?.component?.details?.storageFormFactors) return null;
35
36 const storageFormFactors = pcCase.component.details.storageFormFactors;
37
38 if (!Array.isArray(storageFormFactors)) {
39 return null;
40 }
41
42 const storageFF = storageFormFactors.find((sf: any) => {
43 const sfFormFactor = sf.formFactor || sf.form_factor;
44 return sfFormFactor?.trim().toLowerCase() === formFactor?.trim().toLowerCase();
45 });
46
47 if (!storageFF) {
48 return null;
49 }
50
51 const numSlots = storageFF.numSlots || storageFF.num_slots;
52
53 return Number(numSlots) || null;
54}
Note: See TracBrowser for help on using the repository browser.