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 ? (
-