Skip to content

Commit 27fa081

Browse files
author
Rathan
committed
Fixed Tracker Search Pagination
1 parent 9d34c19 commit 27fa081

1 file changed

Lines changed: 65 additions & 91 deletions

File tree

src/pages/Tracker/Tracker.tsx

Lines changed: 65 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ const Home: React.FC = () => {
5555
setUsername,
5656
token,
5757
setToken,
58-
error: authError,
5958
getOctokit,
6059
} = useGitHubAuth();
6160

@@ -82,14 +81,26 @@ const Home: React.FC = () => {
8281
// Fetch data when username, tab, or page changes
8382
useEffect(() => {
8483
if (username) {
85-
fetchData(username, page + 1, ROWS_PER_PAGE);
84+
fetchData(username, page + 1, ROWS_PER_PAGE, tab === 0 ? "issue" : "pr", {
85+
search: searchTitle,
86+
repo: selectedRepo,
87+
startDate,
88+
endDate,
89+
state: tab === 0 ? issueFilter : prFilter,
90+
});
8691
}
87-
}, [tab, page]);
92+
}, [tab, page, issueFilter, prFilter]);
8893

8994
const handleSubmit = (e: React.FormEvent<HTMLFormElement>): void => {
9095
e.preventDefault();
9196
setPage(0);
92-
fetchData(username, 1, ROWS_PER_PAGE);
97+
fetchData(username, 1, ROWS_PER_PAGE, tab === 0 ? "issue" : "pr", {
98+
search: searchTitle,
99+
repo: selectedRepo,
100+
startDate,
101+
endDate,
102+
state: tab === 0 ? issueFilter : prFilter,
103+
});
93104
};
94105

95106
const handlePageChange = (_: unknown, newPage: number) => {
@@ -99,45 +110,6 @@ const Home: React.FC = () => {
99110
const formatDate = (dateString: string): string =>
100111
new Date(dateString).toLocaleDateString();
101112

102-
const filterData = (data: GitHubItem[], filterType: string): GitHubItem[] => {
103-
let filtered = [...data];
104-
if (["open", "closed", "merged"].includes(filterType)) {
105-
filtered = filtered.filter((item) => {
106-
if (filterType === "merged") {
107-
return !!item.pull_request?.merged_at
108-
}
109-
else if (filterType === "closed") {
110-
return item.state === "closed" && !item.pull_request?.merged_at
111-
}
112-
else {
113-
//open
114-
return item.state === "open"
115-
}
116-
});
117-
}
118-
if (searchTitle) {
119-
filtered = filtered.filter((item) =>
120-
item.title.toLowerCase().includes(searchTitle.toLowerCase())
121-
);
122-
}
123-
if (selectedRepo) {
124-
filtered = filtered.filter((item) =>
125-
item.repository_url.includes(selectedRepo)
126-
);
127-
}
128-
if (startDate) {
129-
filtered = filtered.filter(
130-
(item) => new Date(item.created_at) >= new Date(startDate)
131-
);
132-
}
133-
if (endDate) {
134-
filtered = filtered.filter(
135-
(item) => new Date(item.created_at) <= new Date(endDate)
136-
);
137-
}
138-
return filtered;
139-
};
140-
141113
const getStatusIcon = (item: GitHubItem) => {
142114

143115
if (item.pull_request) {
@@ -158,16 +130,15 @@ const Home: React.FC = () => {
158130
};
159131

160132

161-
// Current data and filtered data according to tab and filters
162-
const currentRawData = tab === 0 ? issues : prs;
163-
const currentFilteredData = filterData(currentRawData, tab === 0 ? issueFilter : prFilter);
133+
// Current data according to tab
134+
const currentFilteredData = tab === 0 ? issues : prs;
164135
const totalCount = tab === 0 ? totalIssues : totalPrs;
165136

166137
return (
167138
<Container maxWidth="lg" sx={{ mt: 4, minHeight: "80vh", color: theme.palette.text.primary }}>
168-
{/* Auth Form */}
169-
<Paper elevation={1} sx={{ p: 2, mb: 4, backgroundColor: theme.palette.background.paper }}>
170-
<form onSubmit={handleSubmit}>
139+
<form onSubmit={handleSubmit}>
140+
{/* Auth Form */}
141+
<Paper elevation={1} sx={{ p: 2, mb: 4, backgroundColor: theme.palette.background.paper }}>
171142
<Box sx={{ display: "flex", gap: 2, flexWrap: "wrap" }}>
172143
<TextField
173144
label="GitHub Username"
@@ -236,43 +207,43 @@ const Home: React.FC = () => {
236207
alignSelf: "flex-start",
237208
}}
238209
>
239-
Fetch Data
210+
Fetch Data / Apply Filters
240211
</Button>
241212
</Box>
242-
</form>
243-
</Paper>
244-
245-
{/* Filters */}
246-
<Box sx={{ mb: 2, display: "flex", flexWrap: "wrap", gap: 2 }}>
247-
<TextField
248-
label="Search Title"
249-
value={searchTitle}
250-
onChange={(e) => setSearchTitle(e.target.value)}
251-
sx={{ minWidth: 200 }}
252-
/>
253-
<TextField
254-
label="Repository"
255-
value={selectedRepo}
256-
onChange={(e) => setSelectedRepo(e.target.value)}
257-
sx={{ minWidth: 200 }}
258-
/>
259-
<TextField
260-
label="Start Date"
261-
type="date"
262-
value={startDate}
263-
onChange={(e) => setStartDate(e.target.value)}
264-
InputLabelProps={{ shrink: true }}
265-
sx={{ minWidth: 150 }}
266-
/>
267-
<TextField
268-
label="End Date"
269-
type="date"
270-
value={endDate}
271-
onChange={(e) => setEndDate(e.target.value)}
272-
InputLabelProps={{ shrink: true }}
273-
sx={{ minWidth: 150 }}
274-
/>
275-
</Box>
213+
</Paper>
214+
215+
{/* Filters */}
216+
<Box sx={{ mb: 2, display: "flex", flexWrap: "wrap", gap: 2 }}>
217+
<TextField
218+
label="Search Title"
219+
value={searchTitle}
220+
onChange={(e) => setSearchTitle(e.target.value)}
221+
sx={{ minWidth: 200 }}
222+
/>
223+
<TextField
224+
label="Repository"
225+
value={selectedRepo}
226+
onChange={(e) => setSelectedRepo(e.target.value)}
227+
sx={{ minWidth: 200 }}
228+
/>
229+
<TextField
230+
label="Start Date"
231+
type="date"
232+
value={startDate}
233+
onChange={(e) => setStartDate(e.target.value)}
234+
InputLabelProps={{ shrink: true }}
235+
sx={{ minWidth: 150 }}
236+
/>
237+
<TextField
238+
label="End Date"
239+
type="date"
240+
value={endDate}
241+
onChange={(e) => setEndDate(e.target.value)}
242+
InputLabelProps={{ shrink: true }}
243+
sx={{ minWidth: 150 }}
244+
/>
245+
</Box>
246+
</form>
276247

277248
{/* Tabs + State Filter */}
278249
<Box
@@ -300,11 +271,14 @@ const Home: React.FC = () => {
300271
<InputLabel sx={{ fontSize: "14px" }}>State</InputLabel>
301272
<Select
302273
value={tab === 0 ? issueFilter : prFilter}
303-
onChange={(e) =>
304-
tab === 0
305-
? setIssueFilter(e.target.value)
306-
: setPrFilter(e.target.value)
307-
}
274+
onChange={(e) => {
275+
setPage(0);
276+
if (tab === 0) {
277+
setIssueFilter(e.target.value);
278+
} else {
279+
setPrFilter(e.target.value);
280+
}
281+
}}
308282
label="State"
309283
sx={{
310284
backgroundColor: theme.palette.background.paper,
@@ -324,9 +298,9 @@ const Home: React.FC = () => {
324298
</FormControl>
325299
</Box>
326300

327-
{(authError || dataError) && (
301+
{dataError && (
328302
<Alert severity="error" sx={{ mb: 3 }}>
329-
{authError || dataError}
303+
{dataError}
330304
</Alert>
331305
)}
332306

0 commit comments

Comments
 (0)