From c2f5ba18a924ba8787fd6e06bb27fa193d622972 Mon Sep 17 00:00:00 2001 From: surjeetkumar800 Date: Sun, 17 May 2026 13:54:25 +0530 Subject: [PATCH 1/6] Fix: Persist tracker filters and auth credentials on refresh (#291) --- src/hooks/useGitHubAuth.ts | 11 ++++++++--- src/pages/Tracker/Tracker.tsx | 29 ++++++++++++++++++++--------- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/hooks/useGitHubAuth.ts b/src/hooks/useGitHubAuth.ts index 52843479..5ef5ee18 100644 --- a/src/hooks/useGitHubAuth.ts +++ b/src/hooks/useGitHubAuth.ts @@ -1,11 +1,16 @@ -import { useState, useMemo } from 'react'; +import { useState, useMemo, useEffect } from 'react'; import { Octokit } from '@octokit/core'; export const useGitHubAuth = () => { - const [username, setUsername] = useState(''); - const [token, setToken] = useState(''); + const [username, setUsername] = useState(() => localStorage.getItem('tracker_username') || ''); + const [token, setToken] = useState(() => localStorage.getItem('tracker_token') || ''); const [error, setError] = useState(''); + useEffect(() => { + localStorage.setItem('tracker_username', username); + localStorage.setItem('tracker_token', token); + }, [username, token]); + const octokit = useMemo(() => { if (!username || !token) return null; return new Octokit({ auth: token }); diff --git a/src/pages/Tracker/Tracker.tsx b/src/pages/Tracker/Tracker.tsx index 2bd4d30c..8644c358 100644 --- a/src/pages/Tracker/Tracker.tsx +++ b/src/pages/Tracker/Tracker.tsx @@ -68,15 +68,26 @@ const Home: React.FC = () => { fetchData, } = useGitHubData(getOctokit); - const [tab, setTab] = useState(0); - const [page, setPage] = useState(0); - - const [issueFilter, setIssueFilter] = useState("all"); - const [prFilter, setPrFilter] = useState("all"); - const [searchTitle, setSearchTitle] = useState(""); - const [selectedRepo, setSelectedRepo] = useState(""); - const [startDate, setStartDate] = useState(""); - const [endDate, setEndDate] = useState(""); + const [tab, setTab] = useState(() => Number(localStorage.getItem('tracker_tab')) || 0); + const [page, setPage] = useState(() => Number(localStorage.getItem('tracker_page')) || 0); + + const [issueFilter, setIssueFilter] = useState(() => localStorage.getItem('tracker_issueFilter') || "all"); + const [prFilter, setPrFilter] = useState(() => localStorage.getItem('tracker_prFilter') || "all"); + const [searchTitle, setSearchTitle] = useState(() => localStorage.getItem('tracker_searchTitle') || ""); + const [selectedRepo, setSelectedRepo] = useState(() => localStorage.getItem('tracker_selectedRepo') || ""); + const [startDate, setStartDate] = useState(() => localStorage.getItem('tracker_startDate') || ""); + const [endDate, setEndDate] = useState(() => localStorage.getItem('tracker_endDate') || ""); + + useEffect(() => { + localStorage.setItem('tracker_tab', String(tab)); + localStorage.setItem('tracker_page', String(page)); + localStorage.setItem('tracker_issueFilter', issueFilter); + localStorage.setItem('tracker_prFilter', prFilter); + localStorage.setItem('tracker_searchTitle', searchTitle); + localStorage.setItem('tracker_selectedRepo', selectedRepo); + localStorage.setItem('tracker_startDate', startDate); + localStorage.setItem('tracker_endDate', endDate); + }, [tab, page, issueFilter, prFilter, searchTitle, selectedRepo, startDate, endDate]); // Fetch data when username, tab, or page changes useEffect(() => { From 4b4e5b39cc847f1571c2ca54361ffe88b31fbd33 Mon Sep 17 00:00:00 2001 From: surjeetkumar800 Date: Sun, 17 May 2026 14:13:03 +0530 Subject: [PATCH 2/6] Fix: Remove unsupported tsconfig option --- tsconfig.app.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tsconfig.app.json b/tsconfig.app.json index f867de0d..a616131d 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -19,8 +19,7 @@ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true + "noFallthroughCasesInSwitch": true }, "include": ["src"] } From b7240edbfccabd947007db50be4ac9fbd6917d24 Mon Sep 17 00:00:00 2001 From: surjeetkumar800 Date: Sun, 17 May 2026 14:17:25 +0530 Subject: [PATCH 3/6] Fix: Use sessionStorage for GitHub credentials to fix security vulnerability --- src/hooks/useGitHubAuth.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hooks/useGitHubAuth.ts b/src/hooks/useGitHubAuth.ts index 5ef5ee18..4045dbca 100644 --- a/src/hooks/useGitHubAuth.ts +++ b/src/hooks/useGitHubAuth.ts @@ -2,13 +2,13 @@ import { useState, useMemo, useEffect } from 'react'; import { Octokit } from '@octokit/core'; export const useGitHubAuth = () => { - const [username, setUsername] = useState(() => localStorage.getItem('tracker_username') || ''); - const [token, setToken] = useState(() => localStorage.getItem('tracker_token') || ''); + const [username, setUsername] = useState(() => sessionStorage.getItem('tracker_username') || ''); + const [token, setToken] = useState(() => sessionStorage.getItem('tracker_token') || ''); const [error, setError] = useState(''); useEffect(() => { - localStorage.setItem('tracker_username', username); - localStorage.setItem('tracker_token', token); + sessionStorage.setItem('tracker_username', username); + sessionStorage.setItem('tracker_token', token); }, [username, token]); const octokit = useMemo(() => { From 494453d67cda5a3927529e46e6d067c0626505f0 Mon Sep 17 00:00:00 2001 From: surjeetkumar800 Date: Sun, 17 May 2026 14:17:55 +0530 Subject: [PATCH 4/6] Fix: Resolve Octokit import error --- src/hooks/useGitHubAuth.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/useGitHubAuth.ts b/src/hooks/useGitHubAuth.ts index 4045dbca..ddf277c3 100644 --- a/src/hooks/useGitHubAuth.ts +++ b/src/hooks/useGitHubAuth.ts @@ -1,5 +1,5 @@ import { useState, useMemo, useEffect } from 'react'; -import { Octokit } from '@octokit/core'; +import { Octokit } from 'octokit'; export const useGitHubAuth = () => { const [username, setUsername] = useState(() => sessionStorage.getItem('tracker_username') || ''); From fc405b681c0e2b4a28aa90286912ee26b812da45 Mon Sep 17 00:00:00 2001 From: surjeetkumar800 Date: Fri, 22 May 2026 12:54:14 +0530 Subject: [PATCH 5/6] Fix: restore error state and handle client initialization failures in useGitHubAuth --- src/hooks/useGitHubAuth.ts | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/hooks/useGitHubAuth.ts b/src/hooks/useGitHubAuth.ts index 8d39673d..f99ccc22 100644 --- a/src/hooks/useGitHubAuth.ts +++ b/src/hooks/useGitHubAuth.ts @@ -1,4 +1,4 @@ -import { useState, useMemo, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { Octokit } from 'octokit'; export const useGitHubAuth = () => { @@ -11,21 +11,27 @@ export const useGitHubAuth = () => { sessionStorage.setItem('tracker_token', token); }, [username, token]); - const octokit = useMemo(() => { - if (!username) return null; - if(token){ - return new Octokit({ auth: token }); + const getOctokit = () => { + try { + setError(''); + if (!username) return null; + if (token) { + return new Octokit({ auth: token }); + } + return new Octokit(); + } catch (err: any) { + setError(err instanceof Error ? err.message : String(err)); + return null; } - return new Octokit(); - }, [username, token]); - - const getOctokit = () => octokit; + }; return { username, setUsername, token, setToken, + error, + setError, getOctokit, }; }; From 19b353625ad62902a81ca329f93da57e206d4dc2 Mon Sep 17 00:00:00 2001 From: surjeetkumar800 Date: Fri, 22 May 2026 14:33:31 +0530 Subject: [PATCH 6/6] fix: update useGitHubAuth useEffect to prevent overwriting empty sessionStorage values --- package.json | 2 +- src/hooks/useGitHubAuth.ts | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 43ad31cc..5d166404 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "GitHub Tracker", + "name": "github-tracker", "private": true, "version": "0.0.0", "type": "module", diff --git a/src/hooks/useGitHubAuth.ts b/src/hooks/useGitHubAuth.ts index f99ccc22..17831683 100644 --- a/src/hooks/useGitHubAuth.ts +++ b/src/hooks/useGitHubAuth.ts @@ -7,8 +7,16 @@ export const useGitHubAuth = () => { const [error, setError] = useState(''); useEffect(() => { - sessionStorage.setItem('tracker_username', username); - sessionStorage.setItem('tracker_token', token); + if (username) { + sessionStorage.setItem('tracker_username', username); + } else { + sessionStorage.removeItem('tracker_username'); + } + if (token) { + sessionStorage.setItem('tracker_token', token); + } else { + sessionStorage.removeItem('tracker_token'); + } }, [username, token]); const getOctokit = () => {