import {FC, useCallback, useEffect, useMemo, useState} from "react"; import {useLocalStorage} from "../src/hooks/useLocalStorage"; import {Group} from "./Group"; import {FactorySelect} from "./FactorySelect"; import styles from "./Home.module.css" import {sortByProperty} from "../src/utils"; interface Group { name: string factories: string[] intermediates: string[] inputs: string[] } export const HomeComponent: FC = () => { const [newGroupValue, setNewGroupValue] = useState("New group") const [excludedSuggestions, setExcludedSuggestions] = useLocalStorage('excludedSuggestions', []) const [basicValues, setBasicValues] = useLocalStorage('basicValues', []) const [groups, setGroups] = useLocalStorage('serviceGroups', []) const [clientGroups, setClientGroups] = useState([]) const doNotSuggest = useMemo(() => { return groups.flatMap(group => [...group.intermediates, ...group.factories, ...excludedSuggestions]) }, [groups, excludedSuggestions]) useEffect(() => setClientGroups(groups), [groups]) const removeGroup = (idx: number) => setGroups(groups => { groups.splice(idx, 1) return groups }) const appendGroup = useCallback((name: string) => setGroups(groups => { groups.push({name, factories: [], intermediates: [], inputs: []}) groups.sort(sortByProperty(group => group.name)) return groups }), [setGroups]) const setFactories = useCallback((idx: number, uids: string[], key: 'intermediates'|'factories'|'inputs') => setGroups(groups => { groups[idx][key] = uids return groups }), [setGroups]) const renameGroup = useCallback((idx: number, name: string) => setGroups(groups => { groups[idx].name = name groups.sort(sortByProperty(group => group.name)) return groups }), [setGroups]) return (

Factorio Microservices

Basic Values
Ignored Values
Add new groups setNewGroupValue(e.target.value)}/>
{ clientGroups.map((group, idx) => removeGroup(idx)} onRename={(name: string) => renameGroup(idx, name)} onSetOutputFactories={uids => setFactories(idx, uids, 'factories')} onSetIntermediateFactories={uids => setFactories(idx, uids, 'intermediates')} onSetInputFactories={uids => setFactories(idx, uids, 'inputs')} doNotSuggest={doNotSuggest} onDoIgnore={uid => setExcludedSuggestions([...excludedSuggestions, uid])} />) }
) }