Skip to content

Commit

Permalink
🐰 Display start hour in wave
Browse files Browse the repository at this point in the history
  • Loading branch information
nezouse authored and ClumsyVlad committed May 10, 2024
1 parent 87d9bf3 commit f35c84a
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 25 deletions.
13 changes: 10 additions & 3 deletions src/components/ui/wavesTimelinePreview/timelinePreview.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Wave } from "@/types/Wave";
import { getWaveStage } from "@/config/waveStages";
import { cn } from "@/lib/cn";
import { formatTime } from "@/lib/dates";
import { Badge } from "@/components/ui/badge";

import { TimelineStage } from "./timelineStage";
Expand All @@ -14,12 +15,18 @@ export const TimelinePreview = ({ wave, className }: TimelinePreviewProps) => {
const { openStartDate, denoisingStartDate, assesmentStartDate, closeDate } =
wave;

const waveStage = getWaveStage(wave);
const { waveStage, nextStageDate } = getWaveStage(wave);

return (
<div className={cn("flex flex-col items-center gap-2", className)}>
{waveStage === "notOpen" && (
<Badge className="px-4 font-mono">Wave will start soon</Badge>
{nextStageDate && (
<Badge className="px-4 font-mono">
{`${
waveStage === "notOpen"
? "Wave will start at"
: "Next stage will start at"
} ${formatTime(nextStageDate)}`}
</Badge>
)}
<ul className="flex w-full rounded-3xl ">
<TimelineStage
Expand Down
2 changes: 1 addition & 1 deletion src/config/actionPermissions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ async function checkWaveStage({
if (cookies()?.get("skipWaveStageCheck")?.value === "true") return;

const wave = await getWaveDates(waveId);
const waveStage = getWaveStage(wave);
const { waveStage } = getWaveStage(wave);
const isCorrectStage = canPerformActionByStage(waveStage, action);
if (!isCorrectStage) {
throw new ValidationError(errorMsg);
Expand Down
12 changes: 6 additions & 6 deletions src/config/waveStages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,26 +17,26 @@ export function getWaveStage({
denoisingStartDate,
assesmentStartDate,
closeDate,
}: WaveStageArgs): WaveStage {
}: WaveStageArgs): { waveStage: WaveStage; nextStageDate: Date | undefined } {
const currentDate = new Date();

if (currentDate > closeDate) {
return "close";
return { waveStage: "close", nextStageDate: undefined };
}

if (currentDate > assesmentStartDate) {
return "assesment";
return { waveStage: "assesment", nextStageDate: closeDate };
}

if (currentDate > denoisingStartDate) {
return "denoising";
return { waveStage: "denoising", nextStageDate: assesmentStartDate };
}

if (currentDate > openStartDate) {
return "open";
return { waveStage: "open", nextStageDate: denoisingStartDate };
}

return "notOpen";
return { waveStage: "notOpen", nextStageDate: openStartDate };
}

export type UserAction =
Expand Down
2 changes: 1 addition & 1 deletion src/lib/dates.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export function formatDate(date: Date) {
}

const timeFormatter = new Intl.DateTimeFormat("en-US", {
year: "2-digit",
year: "numeric",
month: "short",
day: "2-digit",
hour: "2-digit",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { db } from "@/drizzle/db";
import { Moderator, Reviewer, User, Wave } from "@/drizzle/schema";
import { eq } from "drizzle-orm";
import { mockUserSession } from "tests/helpers/mockUserSession";
import {
createBlocked,
Expand All @@ -13,8 +12,6 @@ import {
} from "tests/helpers/queries";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";

import { getWaveStage } from "@/config/waveStages";
import { addDays } from "@/lib/dates";
import { createApplicationAction } from "@/app/waves/[waveId]/applications/create/preview/createApplicationAction";

const waveId = 0;
Expand Down
25 changes: 15 additions & 10 deletions tests/unit/config/waveStages.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,65 +17,70 @@ describe("config/waveStages", () => {
test("should return notOpen when current date is before start date", () => {
vi.useFakeTimers({ now: initialDate });

const stage = getWaveStage({
const { waveStage, nextStageDate } = getWaveStage({
openStartDate: createDate(1),
denoisingStartDate: createDate(2),
assesmentStartDate: createDate(3),
closeDate: createDate(4),
});

expect(stage).toBe("notOpen");
expect(waveStage).toBe("notOpen");
expect(nextStageDate).toStrictEqual(createDate(1));
});

test("should return open when current date is after start date", () => {
vi.useFakeTimers({ now: createDate(2) });

const stage = getWaveStage({
const { waveStage, nextStageDate } = getWaveStage({
openStartDate: createDate(1),
denoisingStartDate: createDate(2),
assesmentStartDate: createDate(3),
closeDate: createDate(4),
});

expect(stage).toBe("open");
expect(waveStage).toBe("open");
expect(nextStageDate).toStrictEqual(createDate(2));
});

test("should return denoising when current date is after denoising start date", () => {
vi.useFakeTimers({ now: createDate(3) });

const stage = getWaveStage({
const { waveStage, nextStageDate } = getWaveStage({
openStartDate: createDate(1),
denoisingStartDate: createDate(2),
assesmentStartDate: createDate(3),
closeDate: createDate(4),
});

expect(stage).toBe("denoising");
expect(waveStage).toBe("denoising");
expect(nextStageDate).toStrictEqual(createDate(3));
});

test("should return assesment when current date is after assesment start date", () => {
vi.useFakeTimers({ now: createDate(4) });

const stage = getWaveStage({
const { waveStage, nextStageDate } = getWaveStage({
openStartDate: createDate(1),
denoisingStartDate: createDate(2),
assesmentStartDate: createDate(3),
closeDate: createDate(4),
});

expect(stage).toBe("assesment");
expect(waveStage).toBe("assesment");
expect(nextStageDate).toStrictEqual(createDate(4));
});

test("should return closed when current date is after close date", () => {
vi.useFakeTimers({ now: createDate(5) });

const stage = getWaveStage({
const { waveStage, nextStageDate } = getWaveStage({
openStartDate: createDate(1),
denoisingStartDate: createDate(2),
assesmentStartDate: createDate(3),
closeDate: createDate(4),
});

expect(stage).toBe("close");
expect(waveStage).toBe("close");
expect(nextStageDate).toBeUndefined();
});
});
2 changes: 1 addition & 1 deletion tests/unit/lib/dates/formatDate.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ describe("lib/dates", () => {
describe("formatTime", () => {
test("should correctly format a Date object into a time string", () => {
expect(formatTime(new Date("2022-01-01 00:00:00"))).toBe(
"Jan 01, 22, 00:00",
"Jan 01, 2022, 00:00",
);
});
});
Expand Down

0 comments on commit f35c84a

Please sign in to comment.