Skip to content

Commit a61bbe9

Browse files
committed
refactor: merge old utils folder with lib
1 parent 44cdf92 commit a61bbe9

14 files changed

Lines changed: 100 additions & 79 deletions

File tree

src/app/paper/[id]/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import PdfViewer from "@/components/pdfViewer";
33
import RelatedPapers from "@/components/RelatedPaper";
44
import Loader from "@/components/ui/loader";
55
import { type ErrorResponse, type PaperResponse } from "@/interface";
6-
import { extractBracketContent } from "@/util/utils";
6+
import { extractBracketContent } from "@/lib/utils/string";
77
import axios, { type AxiosResponse } from "axios";
88
import { type Metadata } from "next";
99
import { redirect } from "next/navigation";

src/components/Card.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import { type IPaper } from "@/interface";
55
import Image from "next/image";
66
import { Eye, Download, Check } from "lucide-react";
77
import {
8-
capsule,
98
extractBracketContent,
109
extractWithoutBracketContent,
11-
} from "@/util/utils";
10+
} from "@/lib/utils/string";
1211
import {
1312
getSecureUrl,
1413
generateFileName,
1514
downloadFile,
16-
} from "@/util/download_paper";
15+
} from "@/lib/utils/download";
16+
import { Capsule } from "@/components/ui/capsule";
1717
import Link from "next/link";
1818
import { cn } from "@/lib/utils";
1919

@@ -88,10 +88,10 @@ const Card = ({ paper, onSelect, isSelected }: CardProps) => {
8888
{extractWithoutBracketContent(paper.subject)}
8989
</div>
9090
<div className="flex flex-wrap gap-2">
91-
{capsule(paper.exam)}
92-
{capsule(paper.slot)}
93-
{capsule(paper.year)}
94-
{capsule(paper.semester)}
91+
<Capsule>{paper.exam}</Capsule>
92+
<Capsule>{paper.slot}</Capsule>
93+
<Capsule>{paper.year}</Capsule>
94+
<Capsule>{paper.semester}</Capsule>
9595
</div>
9696
</div>
9797
</div>

src/components/CatalogueContent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020
getSecureUrl,
2121
generateFileName,
2222
downloadFile,
23-
} from "@/util/download_paper";
23+
} from "@/lib/utils/download";
2424
import type { ICourses } from "@/interface";
2525
import JSZip from "jszip";
2626
import { toast } from "react-hot-toast";

src/components/Navbar.tsx

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ function Navbar() {
4848

4949
<div className="flex h-8 items-center gap-1 rounded-full border border-[#3A3745] bg-[#e8e9ff] px-2.5 py-1 text-xs font-semibold text-gray-700 transition hover:bg-slate-50 dark:bg-black dark:text-white dark:hover:bg-[#1A1823] sm:h-9 sm:gap-2 sm:px-3.5 sm:py-1.5 sm:text-sm md:h-10 md:px-4 md:py-2 md:text-base">
5050
<span className="truncate">
51-
<PinnedModal/>
51+
<PinnedModal />
5252
</span>
5353
</div>
5454

@@ -97,7 +97,7 @@ function Navbar() {
9797
<DropdownMenu open={dropdownOpen} onOpenChange={setDropdownOpen}>
9898
<DropdownMenuTrigger asChild>
9999
<button
100-
className="flex h-10 w-10 items-center justify-center rounded-full border border-[#3A3745] bg-[#e8e9ff] text-gray-700 hover:bg-slate-50 dark:bg-black dark:text-white dark:hover:bg-[#1A1823] shadow-lg transition-transform duration-200 hover:scale-105 active:scale-95"
100+
className="flex h-10 w-10 items-center justify-center rounded-full border border-[#3A3745] bg-[#e8e9ff] text-gray-700 shadow-lg transition-transform duration-200 hover:scale-105 hover:bg-slate-50 active:scale-95 dark:bg-black dark:text-white dark:hover:bg-[#1A1823]"
101101
aria-label="Toggle dropdown"
102102
>
103103
<ChevronDown
@@ -107,11 +107,14 @@ function Navbar() {
107107
</DropdownMenuTrigger>
108108

109109
<DropdownMenuContent
110-
className="w-56 rounded-2xl border border-[rgba(255,255,255,0.1)] border-[#3A3745] bg-[#e8e9ff] text-gray-700 hover:bg-slate-50 dark:bg-black dark:text-white dark:hover:bg-[#1A1823] shadow-2xl backdrop-blur-sm"
110+
className="w-56 rounded-2xl border border-[#3A3745] border-[rgba(255,255,255,0.1)] bg-[#e8e9ff] text-gray-700 shadow-2xl backdrop-blur-sm hover:bg-slate-50 dark:bg-black dark:text-white dark:hover:bg-[#1A1823]"
111111
align="start"
112112
>
113-
<DropdownMenuItem asChild onSelect={(e) => e.preventDefault()}>
114-
<PinnedModal/>
113+
<DropdownMenuItem
114+
asChild
115+
onSelect={(e) => e.preventDefault()}
116+
>
117+
<PinnedModal />
115118
</DropdownMenuItem>
116119
<DropdownMenuItem asChild>
117120
<Link href="/request" className="flex items-center gap-3">
@@ -131,7 +134,7 @@ function Navbar() {
131134
>
132135
<DropdownMenuTrigger asChild>
133136
<button
134-
className="flex h-10 w-10 items-center justify-center rounded-full border border-[#3A3745] bg-[#e8e9ff] text-gray-700 hover:bg-slate-50 dark:bg-black dark:text-white dark:hover:bg-[#1A1823] shadow-lg transition-transform duration-200 hover:scale-105 active:scale-95"
137+
className="flex h-10 w-10 items-center justify-center rounded-full border border-[#3A3745] bg-[#e8e9ff] text-gray-700 shadow-lg transition-transform duration-200 hover:scale-105 hover:bg-slate-50 active:scale-95 dark:bg-black dark:text-white dark:hover:bg-[#1A1823]"
135138
aria-label="Toggle dropdown"
136139
>
137140
<ChevronDown
@@ -141,14 +144,14 @@ function Navbar() {
141144
</DropdownMenuTrigger>
142145

143146
<DropdownMenuContent
144-
className="xl:hidden mt-2 py-2 w-72 space-y-1 rounded-3xl
145-
border border-[#3A3745] shadow-lg backdrop-blur-sm transition-colors
146-
bg-[#e8e9ff] text-gray-700
147-
dark:bg-black dark:text-white dark:border-[#3A3745]"
148-
align="end"
149-
>
150-
<DropdownMenuItem asChild onSelect={(e) => e.preventDefault()}>
151-
<PinnedModal/>
147+
className="mt-2 w-72 space-y-1 rounded-3xl border border-[#3A3745] bg-[#e8e9ff] py-2 text-gray-700 shadow-lg backdrop-blur-sm transition-colors dark:border-[#3A3745] dark:bg-black dark:text-white xl:hidden"
148+
align="end"
149+
>
150+
<DropdownMenuItem
151+
asChild
152+
onSelect={(e) => e.preventDefault()}
153+
>
154+
<PinnedModal />
152155
</DropdownMenuItem>
153156
<DropdownMenuItem asChild>
154157
<Link href="/request" className="flex items-center gap-3">

src/components/PapersCarousel.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
CarouselPrevious,
1313
} from "@/components/ui/carousel";
1414
import Autoplay from "embla-carousel-autoplay";
15-
import { chunkArray } from "@/util/utils";
15+
import { chunkArray } from "@/lib/utils/array";
1616
import { Skeleton } from "@/components/ui/skeleton";
1717
import SkeletonPaperCard from "@/components/SkeletonPaperCard";
1818

src/components/PinnedPapersCarousel.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
import { Skeleton } from "./ui/skeleton";
1717
import AddPapers from "./AddPapers";
1818
import Autoplay from "embla-carousel-autoplay";
19-
import { chunkArray } from "@/util/utils";
19+
import { chunkArray } from "@/lib/utils/array";
2020
import { StoredSubjects } from "@/interface";
2121
import SkeletonPaperCard from "./SkeletonPaperCard";
2222
import PinnedModal from "./ui/PinnedModal";

src/components/UpcomingPaper.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import {
2-
capsule,
32
extractBracketContent,
43
extractWithoutBracketContent,
5-
} from "@/util/utils";
4+
} from "@/lib/utils/string";
5+
66
import { useRouter } from "next/navigation";
77
import { Pin } from "lucide-react";
88
import React, { useContext, useEffect, useState } from "react";
99
import { StoredSubjects } from "@/interface";
1010
import { useCourses } from "@/context/courseContext";
11+
import { Capsule } from "@/components/ui/capsule";
1112

1213
interface PaperCardProps {
1314
subject: string;
@@ -34,8 +35,7 @@ export default function PaperCard({ subject, slots }: PaperCardProps) {
3435

3536
localStorage.setItem("userSubjects", JSON.stringify(updated));
3637
window.dispatchEvent(new Event("userSubjectsChanged"));
37-
if(!current)
38-
window.dispatchEvent(new Event("updatePapers"));
38+
if (!current) window.dispatchEvent(new Event("updatePapers"));
3939
};
4040

4141
useEffect(() => {
@@ -105,7 +105,9 @@ export default function PaperCard({ subject, slots }: PaperCardProps) {
105105

106106
{
107107
<div className="mt-4 flex flex-wrap gap-2 font-play">
108-
{slots?.map((slotValue) => capsule(slotValue))}
108+
{slots?.map((slotValue, index) => (
109+
<Capsule key={index}>{slotValue}</Capsule>
110+
))}
109111
</div>
110112
}
111113
</div>

src/components/pdfViewer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { useState, useRef, useCallback, useEffect } from "react";
66
import { Document, Page, pdfjs } from "react-pdf";
77
import { Download, ZoomIn, ZoomOut, Maximize2, Minimize2 } from "lucide-react";
88
import { Button } from "./ui/button";
9-
import { downloadFile } from "@/util/download_paper";
9+
import { downloadFile } from "../lib/utils/download";
1010
import ShareButton from "./ShareButton";
1111
import Loader from "./ui/loader";
1212
import { FaGreaterThan, FaLessThan } from "react-icons/fa6";

src/components/ui/capsule.tsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { cva, type VariantProps } from "class-variance-authority";
2+
3+
const capsule = cva(
4+
"rounded-md p-1 px-3 text-sm",
5+
{
6+
variants: {
7+
theme: {
8+
blue: "rounded-sm bg-[#B2B8FF] dark:bg-[#7480FFCC]",
9+
green: "bg-[#3cc923]",
10+
},
11+
},
12+
defaultVariants: {
13+
theme: "blue",
14+
},
15+
}
16+
);
17+
18+
export interface CapsuleProps
19+
extends React.HTMLAttributes<HTMLDivElement>,
20+
VariantProps<typeof capsule> {}
21+
22+
export function Capsule({ children, theme, ...props }: CapsuleProps) {
23+
return (
24+
<div className={capsule({ theme })} {...props}>
25+
{children}
26+
</div>
27+
);
28+
}

src/lib/utils/array.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export function chunkArray<T>(array: T[], size: number): T[][] {
2+
const result: T[][] = [];
3+
for (let i = 0; i < array.length; i += size) {
4+
result.push(array.slice(i, i + size));
5+
}
6+
return result;
7+
}

0 commit comments

Comments
 (0)