import React, { useState, useEffect, useContext, useMemo } from "react"; import { ScrollView, Alert, useColorScheme, Appearance } from "react-native"; import Button from "@/containers/Button"; import PlayerSelector from "@/components/PlayerSelector"; import BuyInSelector from "@/components/BuyInSelector"; import ChipsSelector from "@/components/ChipsSelector"; import ChipDistributionSummary from "@/components/ChipDistributionSummary"; import ChipDetection from "@/components/ChipDetection"; import CurrencySelector from "@/components/CurrencySelector"; import { saveState, loadState } from "@/util/CalculatorState"; import { savePersistentState, loadPersistentState, } from "@/util/PersistentState"; import styles, { COLORS } from "@/styles/styles"; import Section from "@/containers/Section"; import AppContext from "@/util/context"; import i18n from "@/i18n/i18n"; import { Picker, PickerItem } from "@/containers/Picker"; import { ItemValue } from "@react-native-picker/picker/typings/Picker"; const IndexScreen: React.FC = () => { const [playerCount, setPlayerCount] = useState(2); const [buyInAmount, setBuyInAmount] = useState(20); const [numberOfChips, setNumberOfChips] = useState(5); const [totalChipsCount, setTotalChipsCount] = useState([]); const [selectedCurrency, setSelectedCurrency] = useState("$"); const [selectedLanguage, setSelectedLanguage] = useState("en"); const colorScheme = useColorScheme(); const darkMode = useMemo(() => colorScheme === "dark", [colorScheme]); const colors = useMemo( () => (darkMode ? COLORS.DARK : COLORS.LIGHT), [darkMode] ); const context = useContext(AppContext); const isSettingsVisible = useMemo(() => context.showSettings, [context]); useEffect(() => { const loadPersistentData = async () => { try { const savedState = await loadPersistentState(); if (savedState) { setPlayerCount(savedState.playerCount || 2); setBuyInAmount(savedState.buyInAmount || 20); setNumberOfChips(savedState.numberOfChips || 5); setTotalChipsCount(savedState.totalChipsCount || []); setSelectedCurrency(savedState.selectedCurrency || "$"); } } catch (error) { console.error("Error loading persistent state:", error); } }; loadPersistentData(); }, []); const handleSave = async (slot: "SLOT1" | "SLOT2") => { if (buyInAmount === null) { Alert.alert(i18n.t("error"), i18n.t("please_select_valid_buyin")); return; } const state = { playerCount, buyInAmount, numberOfChips, totalChipsCount, selectedCurrency, }; await saveState(slot, state); await savePersistentState(state); Alert.alert(i18n.t("success"), i18n.t("state_saved", { slot })); }; const handleLoad = async (slot: "SLOT1" | "SLOT2") => { const loadedState = await loadState(slot); if (loadedState) { setPlayerCount(loadedState.playerCount); setBuyInAmount(loadedState.buyInAmount ?? 20); setNumberOfChips(loadedState.numberOfChips); setTotalChipsCount(loadedState.totalChipsCount); setSelectedCurrency(loadedState.selectedCurrency || "$"); await savePersistentState(loadedState); Alert.alert(i18n.t("success"), i18n.t("state_loaded_from", { slot })); } else { Alert.alert(i18n.t("info"), i18n.t("no_saved_state_found")); } }; const handleLanguageChange = (language: ItemValue, _: any) => { setSelectedLanguage(language.toString()); i18n.changeLanguage(language.toString()); }; return ( {isSettingsVisible && ( <>
)}
{ const chipCountArray = Object.values(chipData); setTotalChipsCount(chipCountArray); setNumberOfChips(chipCountArray.length); }} />
<>
); }; export default IndexScreen;