Skip to content

Commit

Permalink
add all the react custom hooks
Browse files Browse the repository at this point in the history
  • Loading branch information
Frost authored and Frost committed Sep 7, 2024
1 parent d57830a commit ae55e6a
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 0 deletions.
19 changes: 19 additions & 0 deletions src/hooks/useCountries.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { useEffect } from "react";
import { useState } from "react";

function useCountries() {
const [countries, setCountries] = useState([]);
useEffect(() => {
const requestCountries = async () => {
const countriesRequest = await fetch(
"https://restcountries.com/v3.1/all"
);
const countriesResponse = await countriesRequest.json();
setCountries(countriesResponse);
};
requestCountries();
}, []);
return [countries];
}

export { useCountries };
21 changes: 21 additions & 0 deletions src/hooks/useCountryInfo.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { useEffect, useState } from "react";

function useCountryInfo(countryName) {
const [countryInfo,setCountryInfo] = useState(null);
useEffect(() => {
let isRequestCanceled = false;
const getCountryDetails = async () => {
if(!isRequestCanceled){
const COUNTRY_API = `https://restcountries.com/v3.1/name/${countryName}`;
const countryRequest = await fetch(COUNTRY_API);
const countryResponse = await countryRequest.json();
setCountryInfo(countryResponse[0]);
}
}
getCountryDetails();
return () => isRequestCanceled = true;
},[countryName]);
return [countryInfo,setCountryInfo];
}

export default useCountryInfo;
17 changes: 17 additions & 0 deletions src/hooks/useDarkMode.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { useEffect, useState } from "react";

function UseDarkMode() {
const userDefaultTheme = (window.matchMedia("(prefers-color-scheme:dark)").matches) ? "dark" : "light";
const userSetTheme = localStorage.getItem("rest-country-theme");
const currentTheme = userSetTheme ?? userDefaultTheme;
const [theme,setTheme] = useState(currentTheme);

useEffect(() => {
document.documentElement.setAttribute("class",theme);
localStorage.setItem("rest-country-theme",theme);
},[theme]);

return [theme,setTheme];
}

export default UseDarkMode;

0 comments on commit ae55e6a

Please sign in to comment.