@@ -89,7 +96,7 @@ export default function ProjectPagination({
pages.push(
{
changePage(i);
}}
@@ -125,7 +132,9 @@ export default function ProjectPagination({
onClick={() => {
if (data.hasNextPage) changePage(+page! + 1);
}}
- />
+ >
+ {t("previous_page_button")}
+
diff --git a/apps/web/src/components/dashboard/project-view.tsx b/apps/web/src/components/dashboard/project-view.tsx
index 22cd15f..d3d18d7 100644
--- a/apps/web/src/components/dashboard/project-view.tsx
+++ b/apps/web/src/components/dashboard/project-view.tsx
@@ -5,12 +5,21 @@ import Image from "next/image";
import { useEffect, useState } from "react";
import type { Project } from "~/lib/validators/project";
import { Button } from "../ui/button";
-import { useMutation, useQueryClient } from "@tanstack/react-query";
+import { useQueryClient } from "@tanstack/react-query";
import ProjectForm from "./project-form";
import { Badge } from "../ui/badge";
-import { GitPullRequestClosed, Merge } from "lucide-react";
+import { GitPullRequestClosed, Loader2, Merge } from "lucide-react";
import { useLanguagesQuery } from "~/lib/queries/useLanguagesQuery";
import { useCategoriesQuery } from "~/lib/queries/useCategoriesQuery";
+import {
+ Tooltip,
+ TooltipContent,
+ TooltipProvider,
+ TooltipTrigger,
+} from "../ui/tooltip";
+import { useProjectStatusMutation } from "~/lib/mutations/useProjectStatusMutation";
+import { useProjectQuery } from "~/lib/queries/useProjectsQuery";
+import { useEditProjectMutation } from "~/lib/mutations/useEditProjectMutation";
import type { SupportedLanguages } from "~/i18n/settings";
import { useTranslation } from "~/i18n/client";
@@ -24,10 +33,6 @@ function ProjectDisplay({ channel, project, lang }: ProjectDisplayProps) {
const [showWholeDescription, setShowWholeDescription] = useState(false);
const descriptionLines = project.description.split("\n");
- const { t } = useTranslation(lang, "project-page", {
- keyPrefix: "project_display",
- });
-
const { data: languages } = useLanguagesQuery(lang);
const language = languages?.find(
(language) => language.id === project.defaultLanguage,
@@ -38,6 +43,18 @@ function ProjectDisplay({ channel, project, lang }: ProjectDisplayProps) {
(category) => category.id === project.categoryId,
);
+ const { t } = useTranslation(lang, "project-page", {
+ keyPrefix: "project_display",
+ });
+
+ const queryClient = useQueryClient();
+
+ const { mutate, isPending } = useProjectStatusMutation(project.id, {
+ onSuccess: () => {
+ queryClient.refetchQueries({ queryKey: ["project", project.id] });
+ },
+ });
+
return (
<>
{project.title}
@@ -73,12 +90,14 @@ function ProjectDisplay({ channel, project, lang }: ProjectDisplayProps) {
{descriptionLines[0]}
)}
-
+ {descriptionLines.length > 1 && (
+
+ )}
@@ -128,15 +147,53 @@ function ProjectDisplay({ channel, project, lang }: ProjectDisplayProps) {