feat: review

This commit is contained in:
moolcoov
2025-03-02 17:53:20 +03:00
parent 802c88adb0
commit 8accf88bb6
11 changed files with 166 additions and 10 deletions
+45 -5
View File
@@ -1,9 +1,12 @@
import { Loading } from "@/components/ui/Loading";
import { Loading } from "@/components/ui/loading";
import { getReviewer, getReviewerSubmissions } from "@/shared/api/review";
import { useQuery } from "@tanstack/react-query";
import { useNavigate, useParams } from "react-router";
import { ReviewHeader } from "./modules/review-header";
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { ReviewsList } from "./modules/reviews-list";
import React from "react";
import { ReviewStatus } from "@/shared/types/review";
const ReviewPage = () => {
const { token } = useParams<{ token: string }>();
@@ -20,6 +23,22 @@ const ReviewPage = () => {
retry: 0,
});
const availableReviews = React.useMemo(
() =>
(submissionsQuery.data?.submissions || []).filter(
(s) => s.review_status === ReviewStatus.NOT_CHECKED,
),
[submissionsQuery.data],
);
const checkedReviews = React.useMemo(
() =>
(submissionsQuery.data?.submissions || []).filter(
(s) => s.review_status === ReviewStatus.CHECKED,
),
[submissionsQuery.data],
);
if (reviewerQuery.isLoading || submissionsQuery.isLoading) {
return <Loading />;
}
@@ -34,14 +53,35 @@ const ReviewPage = () => {
<div className="mx-auto max-w-5xl">
<ReviewHeader reviewer={reviewerQuery.data} />
<Tabs defaultValue="available" className="my-3">
<Tabs
defaultValue="available"
className="my-3 flex flex-col items-stretch gap-6"
>
<div className="flex items-center justify-between">
<h1 className="text-3xl font-semibold">Посылки</h1>
<h1 className="text-3xl font-semibold">Решения</h1>
<TabsList>
<TabsTrigger value="available">Доступные</TabsTrigger>
<TabsTrigger
value="available"
className="flex items-center gap-2"
>
<span>Доступные</span>
{availableReviews.length > 0 && (
<div className="bg-primary min-w-5 rounded-full px-1.5 py-0.5 text-xs">
{availableReviews.length}
</div>
)}
</TabsTrigger>
<TabsTrigger value="checked">Проверенные</TabsTrigger>
</TabsList>
</div>
<TabsContent value="available" asChild>
<ReviewsList reviews={availableReviews} />
</TabsContent>
<TabsContent value="checked" asChild>
<ReviewsList reviews={checkedReviews} />
</TabsContent>
</Tabs>
</div>
</div>