Skip to content

Commit ed0af84

Browse files
committed
feat: refactor OrificeSelector to use dynamic orifice data from siteConfig; enhance CalibrationGasPage with GasInlet component and state management
1 parent 30f4503 commit ed0af84

File tree

3 files changed

+91
-41
lines changed

3 files changed

+91
-41
lines changed

src/components/OrificeSelector.tsx

Lines changed: 4 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type React from "react";
22

33
import { Select, SelectItem } from "@heroui/select";
4+
import { siteConfig } from "@/config/site";
45

56
interface OrificeSelectorProps {
67
label?: string;
@@ -29,47 +30,9 @@ export const OrificeSelector: React.FC<OrificeSelectorProps> = ({
2930
}
3031
}}
3132
>
32-
<SelectItem key={0.001}>1 Micron</SelectItem>
33-
<SelectItem key={0.002}>2 Micron</SelectItem>
34-
<SelectItem key={0.003}>3 Micron</SelectItem>
35-
<SelectItem key={0.004}>4 Micron</SelectItem>
36-
<SelectItem key={0.005}>5 Micron</SelectItem>
37-
<SelectItem key={0.006}>6 Micron</SelectItem>
38-
<SelectItem key={0.007}>7 Micron</SelectItem>
39-
<SelectItem key={0.008}>8 Micron</SelectItem>
40-
<SelectItem key={0.009}>9 Micron</SelectItem>
41-
<SelectItem key={0.01}>10 Micron</SelectItem>
42-
<SelectItem key={0.012}>12 Micron</SelectItem>
43-
<SelectItem key={0.015}>15 Micron</SelectItem>
44-
<SelectItem key={0.017}>17 Micron</SelectItem>
45-
<SelectItem key={0.02}>20 Micron</SelectItem>
46-
<SelectItem key={0.023}>23 Micron</SelectItem>
47-
<SelectItem key={0.025}>25 Micron</SelectItem>
48-
<SelectItem key={0.03}>30 Micron</SelectItem>
49-
<SelectItem key={0.035}>35 Micron</SelectItem>
50-
<SelectItem key={0.04}>40 Micron</SelectItem>
51-
<SelectItem key={0.045}>45 Micron</SelectItem>
52-
<SelectItem key={0.05}>50 Micron</SelectItem>
53-
<SelectItem key={0.075}>75 Micron</SelectItem>
54-
<SelectItem key={0.1}>100 Micron</SelectItem>
55-
<SelectItem key={0.15}>150 Micron</SelectItem>
56-
<SelectItem key={0.2}>200 Micron</SelectItem>
57-
<SelectItem key={0.25}>250 Micron</SelectItem>
58-
<SelectItem key={0.3}>300 Micron</SelectItem>
59-
<SelectItem key={0.35}>350 Micron</SelectItem>
60-
<SelectItem key={0.4}>400 Micron</SelectItem>
61-
<SelectItem key={0.45}>450 Micron</SelectItem>
62-
<SelectItem key={0.5}>500 Micron</SelectItem>
63-
<SelectItem key={0.55}>550 Micron</SelectItem>
64-
<SelectItem key={0.6}>600 Micron</SelectItem>
65-
<SelectItem key={0.65}>650 Micron</SelectItem>
66-
<SelectItem key={0.7}>700 Micron</SelectItem>
67-
<SelectItem key={0.75}>750 Micron</SelectItem>
68-
<SelectItem key={0.8}>800 Micron</SelectItem>
69-
<SelectItem key={0.85}>850 Micron</SelectItem>
70-
<SelectItem key={0.9}>900 Micron</SelectItem>
71-
<SelectItem key={0.95}>950 Micron</SelectItem>
72-
<SelectItem key={1.0}>1000 Micron</SelectItem>
33+
{siteConfig.orifices.map((orifice) => (
34+
<SelectItem key={orifice.size}>{orifice.name}</SelectItem>
35+
))}
7336
</Select>
7437
);
7538
};

src/config/site.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
export type SiteConfig = typeof siteConfig;
22

3+
/**
4+
* Interface representing a sonic nozzle orifice
5+
* @interface Orifice
6+
* @property {number} size - The diameter of the orifice in millimeters
7+
* @property {string} name - The display name of the orifice (e.g., "1 Micron")
8+
*/
9+
export interface Orifice {
10+
size: number;
11+
name: string;
12+
};
13+
314
export const siteConfig = {
415
name: "Flow Dilution",
516
description: "Comprehensive dilution simulator for AGA8 gaz",
@@ -27,4 +38,47 @@ export const siteConfig = {
2738
github: "https://github.com/sctg-development/flow-dilution",
2839
sponsor: "https://github.com/sponsors/sctg-development",
2940
},
41+
orifices: [
42+
{ size: 0.001, name: "1 Micron" },
43+
{ size: 0.002, name: "2 Micron" },
44+
{ size: 0.003, name: "3 Micron" },
45+
{ size: 0.004, name: "4 Micron" },
46+
{ size: 0.005, name: "5 Micron" },
47+
{ size: 0.006, name: "6 Micron" },
48+
{ size: 0.007, name: "7 Micron" },
49+
{ size: 0.008, name: "8 Micron" },
50+
{ size: 0.009, name: "9 Micron" },
51+
{ size: 0.01, name: "10 Micron" },
52+
{ size: 0.012, name: "12 Micron" },
53+
{ size: 0.015, name: "15 Micron" },
54+
{ size: 0.017, name: "17 Micron" },
55+
{ size: 0.02, name: "20 Micron" },
56+
{ size: 0.023, name: "23 Micron" },
57+
{ size: 0.025, name: "25 Micron" },
58+
{ size: 0.03, name: "30 Micron" },
59+
{ size: 0.035, name: "35 Micron" },
60+
{ size: 0.04, name: "40 Micron" },
61+
{ size: 0.045, name: "45 Micron" },
62+
{ size: 0.05, name: "50 Micron" },
63+
{ size: 0.075, name: "75 Micron" },
64+
{ size: 0.1, name: "100 Micron" },
65+
{ size: 0.15, name: "150 Micron" },
66+
{ size: 0.2, name: "200 Micron" },
67+
{ size: 0.25, name: "250 Micron" },
68+
{ size: 0.3, name: "300 Micron" },
69+
{ size: 0.35, name: "350 Micron" },
70+
{ size: 0.4, name: "400 Micron" },
71+
{ size: 0.45, name: "450 Micron" },
72+
{ size: 0.5, name: "500 Micron" },
73+
{ size: 0.55, name: "550 Micron" },
74+
{ size: 0.6, name: "600 Micron" },
75+
{ size: 0.65, name: "650 Micron" },
76+
{ size: 0.7, name: "700 Micron" },
77+
{ size: 0.75, name: "750 Micron" },
78+
{ size: 0.8, name: "800 Micron" },
79+
{ size: 0.85, name: "850 Micron" },
80+
{ size: 0.9, name: "900 Micron" },
81+
{ size: 0.95, name: "950 Micron" },
82+
{ size: 1.0, name: "1 mm" },
83+
],
3084
};

src/pages/calibrationgas.tsx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,34 @@
1818

1919
import { Input } from "@heroui/input";
2020
import { useState } from "react";
21+
import {
22+
availableGasMixtures,
23+
GasMixtureExt,
24+
PropertiesGERGResult,
25+
} from "@sctg/aga8-js";
2126

2227
import { title } from "@/components/primitives";
2328
import DefaultLayout from "@/layouts/default";
29+
import { FlowData, GasInlet } from "@/components/GasInlet";
2430

2531
export default function CalibrationGasPage() {
2632
const [temperature, setTemperature] = useState<number>(293.15);
33+
const [selectedGasInlet1, setSelectedGasInlet1] = useState<GasMixtureExt>(
34+
availableGasMixtures.find((gas) => gas.name.toLowerCase() === "nitrogen") as GasMixtureExt,
35+
);
36+
const [inlet1Pressure, setInlet1Pressure] = useState<number>(400);
37+
const [selectedOrificeInlet1, setSelectedOrificeInlet1] =
38+
useState<number>(0.02);
39+
const [inlet1FlowData, setInlet1FlowData] = useState<FlowData>({
40+
massFlow: 0,
41+
p_crit: 0,
42+
A: 0,
43+
properties: {} as PropertiesGERGResult,
44+
molarMass: 0,
45+
Rs: 0,
46+
rho: 0,
47+
rho_out: 0,
48+
});
2749

2850
return (
2951
<DefaultLayout>
@@ -49,6 +71,17 @@ export default function CalibrationGasPage() {
4971
variant="flat"
5072
onChange={(e) => setTemperature(parseFloat(e.target.value))}
5173
/>
74+
<GasInlet
75+
label="Dilution gas"
76+
pressure={inlet1Pressure}
77+
selectedGas={selectedGasInlet1}
78+
selectedOrifice={selectedOrificeInlet1}
79+
temperature={temperature}
80+
onFlowDataChange={setInlet1FlowData}
81+
onGasChange={setSelectedGasInlet1}
82+
onOrificeChange={setSelectedOrificeInlet1}
83+
onPressureChange={setInlet1Pressure}
84+
/>
5285
</div>
5386
</section>
5487
</DefaultLayout>

0 commit comments

Comments
 (0)