fix: package manager refresh state handling and item display

This commit is contained in:
Smartsheet-JB-Brown 2025-04-12 23:11:03 -07:00
parent 6f1befb235
commit 3e8d35b490
2 changed files with 18 additions and 17 deletions

View file

@ -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<string, { data: PackageManagerRepository; timestamp: number }> = new Map()

View file

@ -193,7 +193,7 @@ const PackageManagerView: React.FC<PackageManagerViewProps> = ({ 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<PackageManagerViewProps> = ({ 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<PackageManagerViewProps> = ({ 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<PackageManagerViewProps> = ({ onDone }) => {
clearTimeout(fetchTimeoutRef.current)
}
}
}, [fetchPackageManagerItems])
}, [fetchPackageManagerItems]) // Include fetchPackageManagerItems in dependencies
const filteredItems = items.filter((item) => {
if (filters.type && item.type !== filters.type) {