diff --git a/src/components/lume/LumeProvider.tsx b/src/components/lume/LumeProvider.tsx index 802019e..5670dea 100644 --- a/src/components/lume/LumeProvider.tsx +++ b/src/components/lume/LumeProvider.tsx @@ -10,11 +10,13 @@ import type { ReactNode } from "react"; import { createClient as createNetworkRegistryClient } from "@lumeweb/kernel-network-registry-client"; import { createNetworkClient } from "@lumeweb/libkernel/module"; +type SyncState = "done" | "syncing" | "error"; + export interface Network extends NetworkStatus { name: string; id: string; type: string; - syncState: "done" | "syncing" | "error"; + syncState: SyncState; } interface NetworkStatus { @@ -42,14 +44,17 @@ const LumeProvider = ({ children }: { children: ReactNode }) => { // Map to store unsubscribe functions for client.status subscriptions const statusUnsubs = useRef(new Map()); - const handleStatusUpdate = useCallback((id: string, newStatus: Network) => { - setLume((prevLume) => { - const updatedNetworks = prevLume.networks.map((network) => - network.id === id ? { ...network, ...newStatus } : network - ); - return { ...prevLume, networks: updatedNetworks }; - }); - }, []); + const handleStatusUpdate = useCallback( + (id: string, newNetwork: NetworkStatus & { syncState: SyncState }) => { + setLume((prevLume) => { + const updatedNetworks = prevLume.networks.map((network) => + network.id === id ? { ...network, ...newNetwork } : network + ); + return { ...prevLume, networks: updatedNetworks }; + }); + }, + [] + ); const update = async () => { const types = await networkRegistry.getTypes(); @@ -75,7 +80,7 @@ const LumeProvider = ({ children }: { children: ReactNode }) => { // Subscribe to status updates const statusUnsub = client.status((newStatus: NetworkStatus) => { - let syncState = "syncing"; + let syncState: SyncState = "syncing"; if (newStatus.ready) { syncState = "done"; @@ -83,7 +88,10 @@ const LumeProvider = ({ children }: { children: ReactNode }) => { syncState = "error"; } - handleStatusUpdate(module, { ...newStatus, syncState }); + handleStatusUpdate(module, { + ...newStatus, + syncState, + }); }); newStatusUnsubs.set(module, statusUnsub);