From 3e8d35b490ced65db2a807af3b05f2fc83a57fc7 Mon Sep 17 00:00:00 2001 From: Smartsheet-JB-Brown Date: Sat, 12 Apr 2025 23:11:03 -0700 Subject: [PATCH] fix: package manager refresh state handling and item display --- .../package-manager/PackageManagerManager.ts | 2 +- .../package-manager/PackageManagerView.tsx | 33 ++++++++++--------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/services/package-manager/PackageManagerManager.ts b/src/services/package-manager/PackageManagerManager.ts index 613a4c60f1..5f71587cac 100644 --- a/src/services/package-manager/PackageManagerManager.ts +++ b/src/services/package-manager/PackageManagerManager.ts @@ -11,7 +11,7 @@ export class PackageManagerManager { private currentItems: PackageManagerItem[] = [] public isFetching = false // Cache expiry time in milliseconds (set to a low value for testing) - private static readonly CACHE_EXPIRY_MS = 10 * 1000 // 10 seconds (normally 3600000 = 1 hour) + private static readonly CACHE_EXPIRY_MS = 3600000 // 1 hour private gitFetcher: GitFetcher private cache: Map = new Map() diff --git a/webview-ui/src/components/package-manager/PackageManagerView.tsx b/webview-ui/src/components/package-manager/PackageManagerView.tsx index 092ee6669a..d03f90fb3f 100644 --- a/webview-ui/src/components/package-manager/PackageManagerView.tsx +++ b/webview-ui/src/components/package-manager/PackageManagerView.tsx @@ -193,7 +193,7 @@ const PackageManagerView: React.FC = ({ onDone }) => { console.error("Failed to fetch package manager items:", error) setIsFetching(false) } - }, []) + }, []) // No dependencies needed since we're using state setters // Fetch items on mount useEffect(() => { @@ -210,6 +210,21 @@ const PackageManagerView: React.FC = ({ onDone }) => { const handleMessage = (event: MessageEvent) => { const message = event.data + // Always clear timeout and reset fetching state for any state update + if (message.type === "state") { + if (fetchTimeoutRef.current) { + clearTimeout(fetchTimeoutRef.current) + } + setIsFetching(false) + + // Only update items if they're present in the state + if (message.state?.packageManagerItems !== undefined) { + const receivedItems = message.state.packageManagerItems || [] + console.log("Received package manager items:", receivedItems.length) + setItems([...receivedItems]) + } + } + if (message.type === "packageManagerButtonClicked") { if (message.text) { // This is an error message @@ -227,20 +242,6 @@ const PackageManagerView: React.FC = ({ onDone }) => { if (message.type === "repositoryRefreshComplete" && message.url) { setRefreshingUrls((prev) => prev.filter((url) => url !== message.url)) } - - if (message.type === "state" && message.state?.packageManagerItems !== undefined) { - // Clear fetch timeout - if (fetchTimeoutRef.current) { - clearTimeout(fetchTimeoutRef.current) - } - - const receivedItems = message.state.packageManagerItems || [] - console.log("Received package manager items:", receivedItems.length) - - // Always update items, even if empty - setItems([...receivedItems]) - setIsFetching(false) - } } window.addEventListener("message", handleMessage) @@ -251,7 +252,7 @@ const PackageManagerView: React.FC = ({ onDone }) => { clearTimeout(fetchTimeoutRef.current) } } - }, [fetchPackageManagerItems]) + }, [fetchPackageManagerItems]) // Include fetchPackageManagerItems in dependencies const filteredItems = items.filter((item) => { if (filters.type && item.type !== filters.type) {