diff --git a/src/pages/Home/Home.tsx b/src/pages/Home/Home.tsx deleted file mode 100644 index d0ff154..0000000 --- a/src/pages/Home/Home.tsx +++ /dev/null @@ -1,308 +0,0 @@ -import React, { useState, useEffect } from "react"; -import { - Container, - Box, - TextField, - Button, - Paper, - Table, - TableBody, - TableCell, - TableContainer, - TableHead, - TableRow, - TablePagination, - Link, - CircularProgress, - Alert, - Tabs, - Tab, - Select, - MenuItem, - FormControl, - InputLabel, -} from "@mui/material"; -import { useTheme } from "@mui/material/styles"; -import { useGitHubAuth } from "../../hooks/useGitHubAuth"; -import { useGitHubData } from "../../hooks/useGitHubData"; - -const ROWS_PER_PAGE = 10; - -interface GitHubItem { - id: number; - title: string; - state: string; - created_at: string; - pull_request?: { merged_at: string | null }; - repository_url: string; - html_url: string; -} - -const Home: React.FC = () => { - - const theme = useTheme(); - - const { - username, - setUsername, - token, - setToken, - error: authError, - getOctokit, - } = useGitHubAuth(); - - //const octokit = getOctokit(); - - const { - issues, - prs, - totalIssues, - totalPrs, - loading, - error: dataError, - 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(""); - - // Fetch data when username, tab, or page changes - useEffect(() => { - if (username) { - fetchData(username, page + 1, ROWS_PER_PAGE); - } - }, [tab, page]); - - const handleSubmit = (e: React.FormEvent): void => { - e.preventDefault(); - setPage(0); - fetchData(username, 1, ROWS_PER_PAGE); - }; - - const handlePageChange = (_: unknown, newPage: number) => { - setPage(newPage); - }; - - const formatDate = (dateString: string): string => - new Date(dateString).toLocaleDateString(); - - const filterData = (data: GitHubItem[], filterType: string): GitHubItem[] => { - let filtered = [...data]; - if (["open", "closed", "merged"].includes(filterType)) { - filtered = filtered.filter((item) => - filterType === "merged" - ? !!item.pull_request?.merged_at - : item.state === filterType - ); - } - if (searchTitle) { - filtered = filtered.filter((item) => - item.title.toLowerCase().includes(searchTitle.toLowerCase()) - ); - } - if (selectedRepo) { - filtered = filtered.filter((item) => - item.repository_url.includes(selectedRepo) - ); - } - if (startDate) { - filtered = filtered.filter( - (item) => new Date(item.created_at) >= new Date(startDate) - ); - } - if (endDate) { - filtered = filtered.filter( - (item) => new Date(item.created_at) <= new Date(endDate) - ); - } - return filtered; - }; - - // Current data and filtered data according to tab and filters - const currentRawData = tab === 0 ? issues : prs; - const currentFilteredData = filterData( - currentRawData, - tab === 0 ? issueFilter : prFilter - ); - const totalCount = tab === 0 ? totalIssues : totalPrs; - - return ( - - {/* Auth Form */} - -
- - setUsername(e.target.value)} - required - sx={{ flex: 1, minWidth: 150 }} - /> - setToken(e.target.value)} - type="password" - required - sx={{ flex: 1, minWidth: 150 }} - /> - - -
-
- - {/* Filters */} - - setSearchTitle(e.target.value)} - sx={{ minWidth: 200 }} - /> - setSelectedRepo(e.target.value)} - sx={{ minWidth: 200 }} - /> - setStartDate(e.target.value)} - InputLabelProps={{ shrink: true }} - sx={{ minWidth: 150 }} - /> - setEndDate(e.target.value)} - InputLabelProps={{ shrink: true }} - sx={{ minWidth: 150 }} - /> - - - {/* Tabs + State Filter */} - - { - setTab(v); - setPage(0); - }} - sx={{ flex: 1 }} - > - - - - - State - - - - - {(authError || dataError) && ( - - {authError || dataError} - - )} - - {loading ? ( - - - - ) : ( - - - - - - Title - Repository - State - Created - - - - {currentFilteredData.map((item) => ( - - - - {item.title} - - - - {item.repository_url.split("/").slice(-1)[0]} - - - {item.pull_request?.merged_at ? "merged" : item.state} - - {formatDate(item.created_at)} - - ))} - -
- -
-
- )} -
- ); -}; - -export default Home;