import {FC, useMemo} from "react"; import {FactorySelect} from "./FactorySelect"; import {useDetails} from "../src/hooks/useDetails"; import {Entity} from "../src/types"; import styles from "./Group.module.css" interface Props { onRemove: () => void onSetOutputFactories: (uids: string[]) => void outputFactories: string[] onSetIntermediateFactories: (uids: string[]) => void intermediateFactories: string[] onSetInputFactories: (uids: string[]) => void inputFactories: string[] onToggleExported: () => void isExported: boolean onRename: (name: string) => void onDoIgnore: (name: string) => void name: string sets: { doNotSuggest: Set basic: Set exported: Set } } export const Group: FC = ({ onRemove, onRename, onSetOutputFactories, outputFactories, onSetIntermediateFactories, intermediateFactories, onSetInputFactories, inputFactories, onToggleExported, isExported, name, sets: { doNotSuggest, basic, exported }, onDoIgnore }) => { const details = useDetails() const inputs = useMemo(() => { const newData: string[] = details .filter(detail => intermediateFactories.includes(detail.href) || outputFactories.includes(detail.href)) .flatMap(detail => Object.keys(detail.recipe?.prerequisites ?? {})) const uniqueInputs = Array.from(new Set(newData)) return uniqueInputs .filter(input => !intermediateFactories.includes(input) && !outputFactories.includes(input)) }, [details, intermediateFactories, outputFactories]) const suggestions = useMemo(() => { const availableIngredients = Array.from(new Set([...intermediateFactories, ...outputFactories, ...inputs, ...inputFactories])) const selectedValues = Array.from(new Set([...intermediateFactories, ...outputFactories, ...inputFactories])) return details .filter(detail => { if (!detail.recipe) return false if (selectedValues.includes(detail.href)) return false if (doNotSuggest.has(detail.href)) return false const prerequisites = Object.keys(detail.recipe?.prerequisites ?? {}) return prerequisites.every(pre => availableIngredients.includes(pre)) }) }, [inputFactories, doNotSuggest, details, inputs, intermediateFactories, outputFactories]) const addIntermediateFactory = (uid: string) => { onSetIntermediateFactories([...intermediateFactories, uid]) } const addOutputFactory = (uid: string) => { onSetOutputFactories([...outputFactories, uid]) } return

{ event.currentTarget.innerText = event.currentTarget.innerText.trim() onRename(event.currentTarget.innerText); }} > {name}

}