import { useContext, useEffect, useState } from "react"; import { addStoreToHousehold, getAllStores, removeStoreFromHousehold, setDefaultStore } from "../../api/stores"; import StoreAvailableItemsManager from "./StoreAvailableItemsManager"; import { HouseholdContext } from "../../context/HouseholdContext"; import { StoreContext } from "../../context/StoreContext"; import useActionToast from "../../hooks/useActionToast"; import getApiErrorMessage from "../../lib/getApiErrorMessage"; import "../../styles/components/manage/ManageStores.css"; import "../../styles/components/manage/StoreAvailableItemsManager.css"; export default function ManageStores() { const { activeHousehold } = useContext(HouseholdContext); const { stores: householdStores, refreshStores } = useContext(StoreContext); const toast = useActionToast(); const [allStores, setAllStores] = useState([]); const [loading, setLoading] = useState(true); const [showAddStore, setShowAddStore] = useState(false); const isAdmin = ["owner", "admin"].includes(activeHousehold?.role); useEffect(() => { loadAllStores(); }, []); const loadAllStores = async () => { setLoading(true); try { const response = await getAllStores(); setAllStores(response.data); } catch (error) { console.error("Failed to load stores:", error); } finally { setLoading(false); } }; const handleAddStore = async (storeId) => { const storeName = allStores.find((store) => store.id === storeId)?.name || `store #${storeId}`; try { console.log("Adding store with ID:", storeId); await addStoreToHousehold(activeHousehold.id, storeId, false); await refreshStores(); toast.success("Added store", `Added store ${storeName}`); setShowAddStore(false); } catch (error) { console.error("Failed to add store:", error); const message = getApiErrorMessage(error, "Failed to add store"); toast.error("Add store failed", `Add store failed: ${message}`); } }; const handleRemoveStore = async (storeId, storeName) => { if (!confirm(`Remove ${storeName} from this household?`)) return; try { await removeStoreFromHousehold(activeHousehold.id, storeId); await refreshStores(); toast.success("Removed store", `Removed store ${storeName}`); } catch (error) { console.error("Failed to remove store:", error); const message = getApiErrorMessage(error, "Failed to remove store"); toast.error("Remove store failed", `Remove store failed: ${message}`); } }; const handleSetDefault = async (storeId) => { const storeName = householdStores.find((store) => store.id === storeId)?.name || `store #${storeId}`; try { await setDefaultStore(activeHousehold.id, storeId); await refreshStores(); toast.success("Updated default store", `Default store set to ${storeName}`); } catch (error) { console.error("Failed to set default store:", error); const message = getApiErrorMessage(error, "Failed to set default store"); toast.error("Set default store failed", `Set default store failed: ${message}`); } }; const availableStores = allStores.filter( store => !householdStores.some(hs => hs.id === store.id) ); return (
No stores added yet.
) : ({store.location}
}Loading stores...
) : availableStores.length === 0 ? (All available stores have been added.
) : ({store.location}
}