From c6f3b90f791a5efd2c87f77a36041d0baa43fcd1 Mon Sep 17 00:00:00 2001 From: Alisha_Attar Date: Sun, 19 Apr 2026 15:19:50 +0530 Subject: [PATCH] Fix: use minStars instead of minForks in starsQuery (#160) --- package-lock.json | 37 ++++++++--- src/components/CardSet.js | 126 +++++++++++++++++++------------------- 2 files changed, 92 insertions(+), 71 deletions(-) diff --git a/package-lock.json b/package-lock.json index d8f51b0..2467408 100644 --- a/package-lock.json +++ b/package-lock.json @@ -149,6 +149,7 @@ "version": "7.23.9", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", @@ -884,6 +885,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz", "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1693,6 +1695,7 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", + "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-module-imports": "^7.22.15", @@ -3320,6 +3323,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.2.tgz", "integrity": "sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -3666,7 +3670,6 @@ "version": "9.3.4", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", - "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -3684,14 +3687,12 @@ "node_modules/@testing-library/dom/node_modules/@types/aria-query": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "peer": true + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==" }, "node_modules/@testing-library/dom/node_modules/aria-query": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "peer": true, "dependencies": { "deep-equal": "^2.0.5" } @@ -4075,6 +4076,7 @@ "version": "17.0.27", "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.27.tgz", "integrity": "sha512-zgiJwtsggVGtr53MndV7jfiUESTqrbxOcBvwfe6KS/9bzaVPCTDieTWnFNecVNx6EAaapg5xsLLWFfHHR437AA==", + "peer": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4200,6 +4202,7 @@ "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.4.0", "@typescript-eslint/scope-manager": "5.62.0", @@ -4251,6 +4254,7 @@ "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", @@ -4582,6 +4586,7 @@ "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4668,6 +4673,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -5486,6 +5492,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001587", "electron-to-chromium": "^1.4.668", @@ -6204,6 +6211,7 @@ "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -6529,7 +6537,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", - "peer": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.5", @@ -7055,7 +7062,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "peer": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -7186,6 +7192,7 @@ "version": "8.56.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -7587,6 +7594,7 @@ "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -9107,7 +9115,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "peer": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -9679,6 +9686,7 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "peer": true, "dependencies": { "@jest/core": "^27.5.1", "import-local": "^3.0.2", @@ -11148,6 +11156,7 @@ "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -11412,7 +11421,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -11980,6 +11988,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", @@ -13063,6 +13072,7 @@ "version": "6.0.15", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -13400,6 +13410,7 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "peer": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -13506,6 +13517,7 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "peer": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -13569,6 +13581,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -14002,6 +14015,7 @@ "version": "2.79.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "peer": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -14723,7 +14737,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "peer": true, "dependencies": { "internal-slot": "^1.0.4" }, @@ -15591,6 +15604,7 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "peer": true, "engines": { "node": ">=10" }, @@ -16014,6 +16028,7 @@ "version": "5.90.3", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", @@ -16082,6 +16097,7 @@ "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -16131,6 +16147,7 @@ "version": "4.15.1", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "peer": true, "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -16189,6 +16206,7 @@ "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -16550,6 +16568,7 @@ "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", diff --git a/src/components/CardSet.js b/src/components/CardSet.js index 31ae395..1624282 100644 --- a/src/components/CardSet.js +++ b/src/components/CardSet.js @@ -3,9 +3,6 @@ import SingleCard from "./SingleCard"; import { makeStyles } from "@material-ui/core/styles"; import axios from "axios"; import { isEmpty } from "lodash"; -// import { dotenv } from "dotenv"; -// dotenv.config(); -//Context import { ThemeContext } from "../Context/themeContext"; import Loading from "./Loading/index"; @@ -40,19 +37,27 @@ const CardSet = ({ ); }, []); - let url = `https://api.github.com/search/repositories?q=good-first-issues:>0+language:${language}${ + let baseUrl = `https://api.github.com/search/repositories?q=good-first-issues:>0+language:${language}${ !isEmpty(inputSearch) ? `:${inputSearch}+in%3Atitle` : "" }&page=${pageNumber}&per_page=10`; let urlSuffix = ""; + // Apply Filters (FIXED) useEffect(() => { const onAppliedFilters = () => { + // 🔹 Forks logic if (reducedState.minForks !== "" && reducedState.maxForks === "") { setForksQuery(`forks:>=${reducedState.minForks}`); - } else if (reducedState.maxForks !== "" && reducedState.minForks === "") { + } else if ( + reducedState.maxForks !== "" && + reducedState.minForks === "" + ) { setForksQuery(`forks:<=${reducedState.maxForks}`); - } else if (reducedState.maxForks !== "" && reducedState.minForks !== "") { + } else if ( + reducedState.maxForks !== "" && + reducedState.minForks !== "" + ) { setForksQuery( `forks:${reducedState.minForks}..${reducedState.maxForks}` ); @@ -60,88 +65,84 @@ const CardSet = ({ setForksQuery(""); } - if (forksQuery !== "") { - const urlSplits = url.split("?q="); - url = urlSplits[0] + "?q=" + forksQuery + "+" + urlSplits[1]; - } - + // 🔹 Stars logic (FIXED HERE) if (reducedState.minStars !== "" && reducedState.maxStars === "") { - setStarsQuery(`stars:>=${reducedState.minForks}`); - } else if (reducedState.maxStars !== "" && reducedState.minStars === "") { + setStarsQuery(`stars:>=${reducedState.minStars}`); + } else if ( + reducedState.maxStars !== "" && + reducedState.minStars === "" + ) { setStarsQuery(`stars:<=${reducedState.maxStars}`); - } else if (reducedState.maxStars !== "" && reducedState.minStars !== "") { + } else if ( + reducedState.maxStars !== "" && + reducedState.minStars !== "" + ) { setStarsQuery( `stars:${reducedState.minStars}..${reducedState.maxStars}` ); } else { setStarsQuery(""); } - - if (starsQuery !== "") { - const urlSplits = url.split("?q="); - url = urlSplits[0] + "?q=" + starsQuery + "+" + urlSplits[1]; - } }; onAppliedFilters(); }, [ + reducedState, language, inputSearch, pageNumber, - reducedState, sortByForks, sortByStars, - forksQuery, - starsQuery, ]); + // Sorting if (sortByStars === "desc") urlSuffix = "&sort=stars&order=desc"; else if (sortByStars === "asc") urlSuffix = "&sort=stars&order=asc"; else if (sortByForks === "desc") urlSuffix = "&sort=forks&order=desc"; else if (sortByForks === "asc") urlSuffix = "&sort=forks&order=asc"; + // API Call useEffect(() => { - // console.log("stars", sortByStars, "forks", sortByForks); - url += urlSuffix; - console.log(url); + let finalUrl = baseUrl; + + if (forksQuery !== "") { + const urlSplits = finalUrl.split("?q="); + finalUrl = urlSplits[0] + "?q=" + forksQuery + "+" + urlSplits[1]; + } + + if (starsQuery !== "") { + const urlSplits = finalUrl.split("?q="); + finalUrl = urlSplits[0] + "?q=" + starsQuery + "+" + urlSplits[1]; + } + + finalUrl += urlSuffix; + + console.log(finalUrl); setIsLoading(true); - // GET request using axios inside useEffect React hook + axios - .get(url) - .then( - async (response) => { - // console.log(response.data.items); - let maxPageNumber = Math.floor(response.data.total_count / 10); - setMaxPageNumber(maxPageNumber); - setRepositories(response.data.items); - setWasRejected(false); - setIsLoading(false); - response.data.items.length - ? setHidePagination(false) - : setHidePagination(true); - }, - (rejection) => { - if (rejection.response.status === 403) { - setWasRejected(true); - setHidePagination(true); - } - // console.log(rejection.response.data) + .get(finalUrl) + .then((response) => { + let maxPageNumber = Math.floor(response.data.total_count / 10); + setMaxPageNumber(maxPageNumber); + setRepositories(response.data.items); + setWasRejected(false); + setIsLoading(false); + response.data.items.length + ? setHidePagination(false) + : setHidePagination(true); + }) + .catch((error) => { + if (error.response && error.response.status === 403) { + setWasRejected(true); + setHidePagination(true); } - ) - .catch((errors) => { setIsLoading(false); - //catch all (show some message) - //console.log(errors) }); - // empty dependency array means this effect will only run once (like componentDidMount in classes) }, [ - language, - inputSearch, - pageNumber, - reducedState, - sortByForks, - sortByStars, - url, + baseUrl, + forksQuery, + starsQuery, urlSuffix, setMaxPageNumber, setHidePagination, @@ -157,9 +158,9 @@ const CardSet = ({ }} > {isLoading ? ( - + ) : ( -
+
{isEmpty(repositores) ? (
@@ -167,8 +168,9 @@ const CardSet = ({
) : ( - !isEmpty(repositores) && - repositores.map((repo) => ) + repositores.map((repo) => ( + + )) )}
)} @@ -176,4 +178,4 @@ const CardSet = ({ ); }; -export default CardSet; +export default CardSet; \ No newline at end of file