diff --git a/App.tsx b/App.tsx index 0d43b03..082817b 100644 --- a/App.tsx +++ b/App.tsx @@ -114,6 +114,7 @@ const App: React.FC = () => { return ( 'repos', + repos: (userId: string) => `repos_${userId}`, repoIssues: (owner: string, repo: string) => `issues_${owner}_${repo}`, issueComments: (owner: string, repo: string, issueNumber: number) => `comments_${owner}_${repo}_${issueNumber}`, workflowRuns: (owner: string, repo: string) => `workflows_${owner}_${repo}`, prDetails: (owner: string, repo: string, prNumber: number) => `pr_${owner}_${repo}_${prNumber}`, issueExpandedData: (owner: string, repo: string, issueNumber: number) => `expanded_${owner}_${repo}_${issueNumber}`, - workflowFiles: () => 'workflow_files', + workflowFiles: (userId: string) => `workflow_files_${userId}`, }; // Type for cached expanded issue data (all data needed for expanded view) diff --git a/views/Dashboard.tsx b/views/Dashboard.tsx index 253013c..5bc8237 100644 --- a/views/Dashboard.tsx +++ b/views/Dashboard.tsx @@ -20,11 +20,11 @@ export const Dashboard: React.FC = ({ token, user, onRepoSelect, // Initialize from cache for instant display const [repos, setRepos] = useState(() => { - return getCached(CacheKeys.repos()) || []; + return getCached(CacheKeys.repos(user.login)) || []; }); const [loading, setLoading] = useState(() => { // Only show loading if no cached data - return !getCached(CacheKeys.repos()); + return !getCached(CacheKeys.repos(user.login)); }); const [isRefreshing, setIsRefreshing] = useState(false); const [error, setError] = useState(''); @@ -34,9 +34,9 @@ export const Dashboard: React.FC = ({ token, user, onRepoSelect, }); // Initialize issues from cache for instant display const [repoIssues, setRepoIssues] = useState>(() => { - const cachedRepos = getCached(CacheKeys.repos()); + const cachedRepos = getCached(CacheKeys.repos(user.login)); if (!cachedRepos) return {}; - + const issuesMap: Record = {}; for (const repo of cachedRepos.slice(0, 4)) { const cachedIssues = getCached(CacheKeys.repoIssues(repo.owner.login, repo.name)); @@ -91,7 +91,7 @@ export const Dashboard: React.FC = ({ token, user, onRepoSelect, const data = await fetchRepositories(token); setRepos(data); // Cache the repos for instant display on next visit - setCache(CacheKeys.repos(), data); + setCache(CacheKeys.repos(user.login), data); // Load issues for first 4 repos - reuse cache when available const reposToShow = data.slice(0, 4); diff --git a/views/RepoDetail.tsx b/views/RepoDetail.tsx index 110eb7a..7b81a07 100644 --- a/views/RepoDetail.tsx +++ b/views/RepoDetail.tsx @@ -8,12 +8,13 @@ import { getCached, setCache, CacheKeys } from '../services/cacheService'; interface RepoDetailProps { token: string; + user: { login: string }; repo: Repository; onBack: () => void; onIssueSelect: (issue: Issue) => void; } -export const RepoDetail: React.FC = ({ token, repo, onBack, onIssueSelect }) => { +export const RepoDetail: React.FC = ({ token, user, repo, onBack, onIssueSelect }) => { const { toasts, dismissToast, showError } = useToast(); const cacheKey = CacheKeys.repoIssues(repo.owner.login, repo.name); @@ -36,7 +37,7 @@ export const RepoDetail: React.FC = ({ token, repo, onBack, onI // Workflow Files State const [workflowFiles, setWorkflowFiles] = useState(() => { - return getCached(CacheKeys.workflowFiles()) || []; + return getCached(CacheKeys.workflowFiles(user.login)) || []; }); const [loadingWorkflows, setLoadingWorkflows] = useState(false); const [workflowsExpanded, setWorkflowsExpanded] = useState(false); @@ -99,7 +100,7 @@ export const RepoDetail: React.FC = ({ token, repo, onBack, onI }; const loadWorkflowFiles = React.useCallback(async () => { - const cachedWorkflows = getCached(CacheKeys.workflowFiles()); + const cachedWorkflows = getCached(CacheKeys.workflowFiles(user.login)); if (cachedWorkflows && cachedWorkflows.length > 0) { setWorkflowFiles(cachedWorkflows); return; @@ -108,11 +109,11 @@ export const RepoDetail: React.FC = ({ token, repo, onBack, onI setLoadingWorkflows(true); try { // Fetch repos first if needed - const repos = getCached(CacheKeys.repos()) || []; + const repos = getCached(CacheKeys.repos(user.login)) || []; if (repos.length > 0) { const workflows = await fetchAllWorkflowFiles(token, repos); setWorkflowFiles(workflows); - setCache(CacheKeys.workflowFiles(), workflows); + setCache(CacheKeys.workflowFiles(user.login), workflows); } } catch (err) { console.error('Failed to load workflow files:', err);