Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
812ad20
Fix: Conditional rendering for select buttons
atharvaSharma17 Oct 17, 2025
2ea904f
Merge branch 'prod' of https://github.com/equestrian2296/papers-codec…
atharvaSharma17 Apr 19, 2026
080a1a4
fix : eh why ??
atharvaSharma17 Apr 19, 2026
b06d58b
fix: hehe
atharvaSharma17 Apr 19, 2026
a5eedb6
fix: my ocd
atharvaSharma17 Apr 19, 2026
9649fb5
fix: add titles to buttons for better accessibility
atharvaSharma17 Apr 19, 2026
e4c0a63
fix carousel grid
atharvaSharma17 Apr 19, 2026
1209a71
merge
atharvaSharma17 Apr 19, 2026
74f39eb
Merge pull request #500 from CodeChefVIT/temp_update_staging
YOGESH-08 Apr 20, 2026
28199ce
Merge pull request #497 from atharvaSharma17/prod
YOGESH-08 Apr 20, 2026
408ed1e
Merge pull request #499 from atharvaSharma17/fix3
YOGESH-08 Apr 20, 2026
e57ff57
refactor: fetch 16 upcoming papers directly
YOGESH-08 Apr 21, 2026
fa88c7a
update devsoc url
YOGESH-08 Apr 21, 2026
e4cf76e
Merge pull request #501 from CodeChefVIT/fix/upcoming_slot
YOGESH-08 Apr 21, 2026
6696b83
fix: correct PDF viewer page count issue (1 of 0 bug)
Rithish-2914 Apr 21, 2026
5928edf
resolve merge conflicts with staging
Rithish-2914 Apr 21, 2026
3d6b3bd
fix: correct PDF viewer page count and input handling
Rithish-2914 Apr 21, 2026
1948b29
Merge pull request #502 from Rithish-2914/fix/pdf-viewer-page-count
YOGESH-08 Apr 21, 2026
a7367b1
Revert "fix: correct PDF viewer page count and input handling "
YOGESH-08 Apr 21, 2026
9d5e0d3
Merge pull request #503 from CodeChefVIT/revert-502-fix/pdf-viewer-pa…
YOGESH-08 Apr 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 5 additions & 19 deletions src/app/api/upcoming-papers/route.ts
Original file line number Diff line number Diff line change
@@ -1,30 +1,16 @@
import { NextResponse } from "next/server";
import { connectToDatabase } from "@/lib/database/mongoose";
import UpcomingSlot from "@/db/upcoming-slot";
import UpcomingSubject from "@/db/upcoming-paper";
import { calculateCorrespondingSlots } from "@/lib/utils/slot-calculation";

export const dynamic = "force-dynamic";

export async function GET() {
try {
await connectToDatabase();
const upcomingSlot = await UpcomingSlot.find();
const slot = upcomingSlot[0]?.slot;

if (!slot) {
return NextResponse.json(
{
message: "No slot found.",
},
{ status: 404 },
);
}

const correspondingSlots = calculateCorrespondingSlots(slot);
const selectedSubjects = await UpcomingSubject.find({
slots: { $in: correspondingSlots },
});
const selectedSubjects = await UpcomingSubject.find()
.sort({ _id: 1 })
.limit(16)
.lean();

if (selectedSubjects.length === 0) {
return NextResponse.json(
Expand All @@ -47,4 +33,4 @@ export async function GET() {
{ status: 500 },
);
}
}
}
6 changes: 1 addition & 5 deletions src/app/request/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,7 @@ export default function PaperRequest() {
"/api/upcoming-papers",
);

const randomPapers = [...response.data]
.sort(() => Math.random() - 0.5)
.slice(0, 8);

setDisplayPapers(randomPapers);
setDisplayPapers(response.data);
} catch (error) {
console.error("Failed to fetch papers:", error);
} finally {
Expand Down
26 changes: 1 addition & 25 deletions src/components/CatalogueContent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -177,31 +177,6 @@ const CatalogueContentInner = ({ subject }: { subject: string | null }) => {
void fetchPapers();
}, [subject, isMounted, setPapers, setFilterOptions]);

useEffect(() => {
if (!papers.length) return;

const filtered = [...papers];

if (sortOption === "asc") {
filtered.sort((a, b) => a.year.localeCompare(b.year));
} else if (sortOption === "desc") {
filtered.sort((a, b) => b.year.localeCompare(a.year));
}

setFilteredPapers(filtered);
}, [
papers,
selectedExams,
selectedSlots,
selectedYears,
selectedSemesters,
selectedCampuses,
selectedAnswerKeyIncluded,
sortOption,
setFilteredPapers,
setAppliedFilters,
]);

useEffect(() => {
if (!papers.length) return;

Expand Down Expand Up @@ -255,6 +230,7 @@ const CatalogueContentInner = ({ subject }: { subject: string | null }) => {
selectedSemesters,
selectedCampuses,
selectedAnswerKeyIncluded,
sortOption,
setFilteredPapers,
setAppliedFilters,
]);
Expand Down
2 changes: 1 addition & 1 deletion src/components/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ export default function Footer() {
{/* Events */}
<div className="flex w-full flex-col gap-2 text-black dark:text-white lg:w-[15%]">
<h3 className="font-jost text-xl font-semibold">Events</h3>
<Link href="https://devsoc25.codechefvit.com" target="_blank">DevSOC</Link>
<Link href="https://devsoc26.codechefvit.com" target="_blank">DevSOC</Link>
<Link href="https://gravitas.codechefvit.com" target="_blank">CookOff</Link>
<Link href="https://gravitas.codechefvit.com" target="_blank">Clueminati</Link>
</div>
Expand Down
17 changes: 9 additions & 8 deletions src/components/PinnedPapersCarousel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -199,18 +199,19 @@ function PinnedPapersCarousel() {
</CarouselItem>
) : (
chunkedPapers.map((paperGroup, index) => {
const placeholdersNeeded =
(chunkSize - paperGroup.length) % chunkSize;
const columns = chunkSize === 2 ? 1 : chunkSize === 4 ? 2 : 4;
const rows = Math.max(1, Math.ceil(paperGroup.length / columns));
const placeholdersNeeded = columns * rows - paperGroup.length;
return (
<CarouselItem
key={`carousel-item-${index}`}
className={`grid ${
chunkSize === 2
? "grid-cols-1 grid-rows-2"
: chunkSize === 4
? "grid-cols-2 grid-rows-2"
columns === 1
? "grid-cols-1"
: columns === 2
? "grid-cols-2"
: "grid-cols-4"
} gap-4 lg:auto-rows-fr`}
} ${rows === 1 ? "grid-rows-1" : "grid-rows-2"} gap-4 lg:auto-rows-fr`}
>
{paperGroup.map((paper, subIndex) =>
paper.subject === "add_subject_button" ? (
Expand Down Expand Up @@ -264,4 +265,4 @@ function PinnedPapersCarousel() {
);
}

export default PinnedPapersCarousel;
export default PinnedPapersCarousel;
4 changes: 3 additions & 1 deletion src/components/ReportButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@ export default function ReportButton(){
const { paperId, subject, exam, slot, year } = usePaper();
const [open, setOpen] = useState(false);
return (
<>
<>
<Button

onClick={() => setOpen(true)}
className="h-10 w-10 rounded p-0 text-white transition hover:bg-red-600 bg-red-500"
title="Report this paper"
>
<FaFlag className="text-sm" />
</Button>
Expand Down
3 changes: 2 additions & 1 deletion src/components/ShareButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export default function ShareButton() {
return (
<Dialog>
<DialogTrigger asChild>
<Button className="aspect-square h-10 w-10 p-0 rounded text-white bg-[#6536c1] transition hover:bg-[#7d4fc7]">
<Button className="aspect-square h-10 w-10 p-0 rounded text-white bg-[#6536c1] transition hover:bg-[#7d4fc7]" title="Share this paper">
<FaShare />
</Button>
</DialogTrigger>
Expand All @@ -47,6 +47,7 @@ export default function ShareButton() {
type="submit"
size="sm"
className="flex w-fit items-center justify-between gap-5 px-3"
title="Copy link to clipboard"
onClick={async () => {
await toast.promise(
navigator.clipboard.writeText(paperPath), // This is a promise
Expand Down
5 changes: 3 additions & 2 deletions src/components/SideBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ function SideBar() {
handleApplyFilters,
} = useFilters();
const exams =
filterOptions?.unique_exams.map((exam) => ({ label: exam, value: exam })) ??
[];
filterOptions?.unique_exams
.sort((a, b) => a.localeCompare(b))
.map((exam) => ({ label: exam, value: exam })) ?? [];
const slots =
filterOptions?.unique_slots
.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))
Expand Down
2 changes: 1 addition & 1 deletion src/components/UpcomingPaper.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ export default function PaperCard({ subject, slots }: PaperCardProps) {

{
<div className="mt-4 flex flex-wrap gap-2 font-play">
{slots?.map((slotValue, index) => (
{[...slots].sort().map((slotValue, index) => (
<Capsule key={index}>{slotValue}</Capsule>
))}
</div>
Expand Down
4 changes: 3 additions & 1 deletion src/components/multi-select.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,9 @@ export const MultiSelect = React.forwardRef<
</div>
<span>(Select All)</span>
</CommandItem>
{options.map((option) => {
{options
.sort((a, b) => a.label.localeCompare(b.label))
.map((option) => {
const isSelected = selectedValues.includes(option.value);
return (
<CommandItem
Expand Down
4 changes: 4 additions & 0 deletions src/components/newPdfViewer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -114,13 +114,15 @@ const Controls = memo(function Controls({documentId, toggleFullscreen, isFullscr
<Button
onClick={toggleFullscreen}
className="h-10 w-10 rounded p-0 text-white bg-[#6536c1] transition hover:bg-[#7d4fc7]"
title={isFullscreen ? "Exit fullscreen" : "Enter fullscreen"}
>
{isFullscreen ? <Minimize2 size={24} /> : <Maximize2 size={24} />}
</Button>

<Button
onClick={onDownload}
className="h-10 w-10 rounded p-0 text-white bg-[#6536c1] transition hover:bg-[#7d4fc7]"
title="Download PDF"
>
<Download size={24} />
</Button>
Expand All @@ -131,6 +133,7 @@ const Controls = memo(function Controls({documentId, toggleFullscreen, isFullscr
onClick={zoomOut}
disabled={typeof zoomLevel === "number" && zoomLevel <= 0.25}
className="h-10 w-10 rounded p-0 text-white bg-[#6536c1] transition hover:bg-[#7d4fc7] disabled:bg-gray-400"
title="Zoom out"
>
<ZoomOut size={24} />
</Button>
Expand All @@ -143,6 +146,7 @@ const Controls = memo(function Controls({documentId, toggleFullscreen, isFullscr
onClick={zoomIn}
disabled={typeof zoomLevel === "number" && zoomLevel >= 3}
className="h-10 w-10 rounded p-0 text-white bg-[#6536c1] transition hover:bg-[#7d4fc7] disabled:bg-gray-400"
title="Zoom in"
>
<ZoomIn size={24} />
</Button>
Expand Down
Loading