Skip to content

Commit bfa4cad

Browse files
authored
feat: restructuring database (#187)
* [new-resource] feat: added new resource chores: made some cleanups * [clean-up] chores: made some cleanup and added new resource - category:backend subcategory:validation * chores: refactoring database setup * chores: refactoring database setup * chores: refactoring database setup * chores: refactoring database setup
1 parent 16dc21a commit bfa4cad

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+862
-785
lines changed

assets/icons/SearchIcon.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import React from "react";
2+
import { SVGProps } from "react";
3+
const SearchIcon = ({ ...rest }: SVGProps<SVGSVGElement>) => {
4+
return (
5+
<svg
6+
aria-hidden="true"
7+
fill="currentColor"
8+
viewBox="0 0 20 20"
9+
xmlns="http://www.w3.org/2000/svg"
10+
{...rest}
11+
>
12+
<path
13+
fillRule="evenodd"
14+
d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z"
15+
clipRule="evenodd"
16+
></path>
17+
</svg>
18+
);
19+
};
20+
21+
export default SearchIcon;

components/BackToTop/BackToTopButton.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { useEffect, useState } from "react";
22
import { FaArrowUp } from "react-icons/fa";
3-
import { SCROLL_LIMIT } from "../../app/constants";
3+
import { SCROLL_LIMIT } from "app/constants";
44

55
export const BackToTopButton = () => {
66
const [scrollY, setScrollY] = useState(0);
@@ -17,30 +17,30 @@ export const BackToTopButton = () => {
1717
return () => {
1818
window.removeEventListener("scroll", handleScroll);
1919
};
20-
2120
}, []);
2221

2322
const handleClick = () => {
2423
window.scrollTo({
2524
top: 0,
2625
behavior: "smooth",
27-
})
28-
}
26+
});
27+
};
2928

3029
if (scrollY > SCROLL_LIMIT) {
3130
return (
3231
<div className="group fixed bottom-12 right-12 z-20">
33-
<button
32+
<button
3433
className="focus:animate-button-press rounded-full border border-white bg-violet-600 p-4 text-white shadow-xl focus:ring group-hover:border-dashed group-hover:border-violet-400 group-hover:bg-white dark:drop-shadow-[5px_5px_8px_rgba(124,58,237,0.25)] dark:group-hover:bg-[#101623] md:border-violet-600"
35-
onClick={handleClick}>
34+
onClick={handleClick}
35+
>
3636
<FaArrowUp className="group-hover:text-violet-500" />
3737
</button>
3838
<span className="absolute left-1/2 top-1/2 -z-10 hidden -translate-x-1/2 -translate-y-1/2 rotate-0 text-2xl transition-all duration-100 ease-in-out group-hover:ml-8 group-hover:block group-hover:rotate-45">
3939
👾
4040
</span>
4141
</div>
42-
)
42+
);
4343
}
4444

4545
return null;
46-
}
46+
};

components/LinksContainer/LinksContainer.tsx

Lines changed: 0 additions & 34 deletions
This file was deleted.

components/LinksContainer/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

components/Loader/Preloader.tsx

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,24 @@
1-
import { Spinner } from "./Spinner"
1+
import useLoader from "hooks/useLoader";
2+
import { ReactNode } from "react";
3+
import { Spinner } from "./Spinner";
24

3-
export const Preloader = ({backgroundColor, spinnerColor, spinnerSize}:{backgroundColor: string, spinnerColor:string, spinnerSize: number}) => {
4-
return (
5-
<div className={`loader ${backgroundColor} fixed top-0 left-0 w-full h-screen flex justify-center items-center`}>
6-
<Spinner
7-
spinnerColor={spinnerColor}
8-
spinnerSize={spinnerSize}
9-
/>
10-
</div>
11-
)
12-
}
5+
export const Preloader = ({
6+
backgroundColor,
7+
children,
8+
...rest
9+
}: {
10+
children: JSX.Element;
11+
backgroundColor: string;
12+
color: string;
13+
size: number;
14+
}): JSX.Element => {
15+
const { loader } = useLoader();
16+
if (!loader) return children;
17+
return (
18+
<div
19+
className={`loader ${backgroundColor} fixed top-0 left-0 w-full h-screen flex justify-center items-center`}
20+
>
21+
<Spinner {...rest} />
22+
</div>
23+
);
24+
};

components/Loader/Spinner.tsx

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,8 @@
1-
import Gridloader from "react-spinners/GridLoader"
2-
3-
export const Spinner = ({spinnerColor, spinnerSize}:{spinnerColor:string, spinnerSize:number}) => {
1+
import Gridloader from "react-spinners/GridLoader";
2+
import { LengthType } from "react-spinners/helpers/props";
43

4+
export const Spinner = (props: { color: string; size: LengthType }) => {
55
return (
6-
<Gridloader
7-
color= {spinnerColor}
8-
size={spinnerSize}
9-
aria-label="Loading Spinner"
10-
data-testid="loader"
11-
/>
6+
<Gridloader {...props} aria-label="Loading Spinner" data-testid="loader" />
127
);
138
};

components/Searchbar/Searchbar.tsx

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
interface SearchbarProps {
2-
setSearch: (search: string) => void;
3-
}
1+
import SearchIcon from "assets/icons/SearchIcon";
2+
import { ChangeEvent } from "react";
3+
import { SearchbarProps } from "types";
44

55
export const Searchbar = ({ setSearch }: SearchbarProps) => {
6-
const handleSearch = (e: any) => {
6+
const handleSearch = (e: ChangeEvent<HTMLInputElement>) => {
77
setSearch(e.target.value);
88
};
99

@@ -13,20 +13,8 @@ export const Searchbar = ({ setSearch }: SearchbarProps) => {
1313
Search
1414
</label>
1515
<div className="relative w-full">
16-
<div className="absolute inset-y-0 left-0 pl-3 flex items-center justify-center pointer-events-none">
17-
<svg
18-
aria-hidden="true"
19-
className="w-5 h-5 text-violet-500 dark:text-violet-500"
20-
fill="currentColor"
21-
viewBox="0 0 20 20"
22-
xmlns="http://www.w3.org/2000/svg"
23-
>
24-
<path
25-
fillRule="evenodd"
26-
d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z"
27-
clipRule="evenodd"
28-
></path>
29-
</svg>
16+
<div className="absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none">
17+
<SearchIcon className="w-5 h-5 text-violet-500 dark:text-violet-500" />
3018
</div>
3119
<input
3220
type="text"

components/SideNavbar/SideNavbar.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import Link from "next/link";
22
import { Searchbar } from "../Searchbar";
3-
import useSidebarSearch from "../../hooks/useSidebarSearch";
3+
import useSidebarSearch from "hooks/useSidebarSearch";
44
import { createRef, useContext, useEffect } from "react";
55
import { AiOutlineClose, AiOutlineMenu } from "react-icons/ai";
6-
import { GlobalContext } from "../../context/GlobalContext";
6+
import { GlobalContext } from "context/GlobalContext";
77
import Logo from "../logo";
88
import { SideNavbarElement } from "./SideNavbarElement";
99
import classNames from "classnames";
Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,29 @@
11
import { useState, useEffect } from "react";
22
import { useTheme } from "next-themes";
33

4-
import { HiSun, HiMoon } from "react-icons/hi";
4+
import { HiSun, HiMoon } from "react-icons/hi";
55

66
export function ThemeToggler() {
7-
const { resolvedTheme, setTheme } = useTheme();
8-
const [mounted, setMounted] = useState(false);
7+
const { resolvedTheme, setTheme } = useTheme();
8+
const [mounted, setMounted] = useState(false);
99

10-
useEffect(() => { setMounted(true) }, []);
10+
useEffect(() => {
11+
setMounted(true);
12+
}, []);
1113

12-
if (!mounted) return <></>;
14+
if (!mounted) return <></>;
1315

14-
return (
15-
<button
16-
onClick={() => {
17-
setTheme(resolvedTheme === "dark" ? "light" : "dark");
18-
}}
19-
>
20-
{resolvedTheme === "dark" ? <HiSun className='text-white hover:text-violet-500' size={'1.5rem'} /> : <HiMoon className='hover:text-violet-500' size={'1.5rem'}/>}
21-
</button>
22-
);
23-
}
16+
return (
17+
<button
18+
onClick={() => {
19+
setTheme(resolvedTheme === "dark" ? "light" : "dark");
20+
}}
21+
>
22+
{resolvedTheme === "dark" ? (
23+
<HiSun className="text-white hover:text-violet-500" size={"1.5rem"} />
24+
) : (
25+
<HiMoon className="hover:text-violet-500" size={"1.5rem"} />
26+
)}
27+
</button>
28+
);
29+
}

components/TopBar/TopBar.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { useRouter } from 'next/router';
2-
import { IconContext } from 'react-icons';
3-
import { FaGithub, FaSlackHash } from 'react-icons/fa';
4-
import { ThemeToggler } from '../ThemeToggler/themeToggler';
1+
import { useRouter } from "next/router";
2+
import { IconContext } from "react-icons";
3+
import { FaGithub, FaSlackHash } from "react-icons/fa";
4+
import { ThemeToggler } from "../ThemeToggler/themeToggler";
55

66
export const TopBar = ({ header }: { header?: string }) => {
77
const router = useRouter();
8-
const category = router.asPath.replace('/', '');
8+
const category = router.asPath.replace("/", "");
99
return (
1010
<div className="flex items-center justify-between mb-4 xs:overflow-x-hidden">
1111
<div className="flex items-center my-4 dark:text-gray-300 sm:text-3xl xs:text-2xl">
@@ -23,9 +23,9 @@ export const TopBar = ({ header }: { header?: string }) => {
2323
href="https://github.com/rupali-codes/LinksHub"
2424
>
2525
<IconContext.Provider
26-
value={{ className: 'shared-class', size: '28' }}
26+
value={{ className: "shared-class", size: "28" }}
2727
>
28-
<FaGithub className='hover:text-violet-500' />
28+
<FaGithub className="hover:text-violet-500" />
2929
</IconContext.Provider>
3030
</a>
3131
<ThemeToggler />

0 commit comments

Comments
 (0)