import data from "../../assets/data/2.0/data.json"; // Adjust path if needed import ModuleSlots from "./ModuleSlots"; import type { Beacon } from "../../../scripts/factorio-dump/process-data.models"; import { qualityShortcut, useQualityScroller } from "../../hooks/useQualityScroller"; import Icon from "../icon"; import NumberInput from "../components/NumberInput"; import styles from "./BeaconConfigurator.module.css"; import type { BeaconGroup } from "../../engine"; const beaconsData = data.beacons as Beacon[]; export type BeaconGroupConf = BeaconGroup & { id: string; }; type BeaconConfiguratorProps = { groups: BeaconGroupConf[]; onChange: (g: BeaconGroupConf[]) => void; direction?: "horizontal" | "vertical"; }; function BeaconIconWrapper({ beacon, qualityLevel, onChangeQuality, }: { beacon: Beacon; qualityLevel: number; onChangeQuality: (qualityLevel: number) => void; }) { // Use the hook in controlled mode by passing qualityLevel const { scrollRef, activeQuality } = useQualityScroller("normal", qualityLevel, (q) => onChangeQuality(q.level)); return (
); } export default function BeaconConfigurator({ groups, onChange, direction = "vertical" }: BeaconConfiguratorProps) { const handleAddGroup = () => { const defaultBeacon = beaconsData[0]; onChange([ ...groups, { id: crypto.randomUUID(), // Use modern UUID instead of Date.now() beacon: defaultBeacon, beaconQualityLevel: 0, count: 1, modules: [], }, ]); }; const updateGroup = (id: string, patch: Partial) => { onChange(groups.map((g) => (g.id === id ? { ...g, ...patch } : g))); }; return (
{groups.map((g) => (
{/* Beacon Count */}
updateGroup(g.id, { count: val || 1 })} />
{/* Beacon Type & Quality */} updateGroup(g.id, { beaconQualityLevel: q })} /> {/* Beacon Modules */}
updateGroup(g.id, { modules: mods })} />
))}
); }