diff --git a/app/props/[propId]/page.tsx b/app/props/[propId]/page.tsx
index b349836..495d53f 100644
--- a/app/props/[propId]/page.tsx
+++ b/app/props/[propId]/page.tsx
@@ -1,4 +1,5 @@
import { getForecasts, getPropById } from "@/lib/db_actions";
+import { getCurrentUserRole } from "@/lib/db_actions/competition-members";
import { getUserFromCookies } from "@/lib/get-user";
import { Suspense } from "react";
import ErrorPage from "@/components/pages/error-page";
@@ -60,6 +61,17 @@ async function PropPageContent({
// Find user's forecast
const userForecast = forecasts.find((f) => f.user_id === user.id);
+ // Determine if the user is an admin of this prop's competition (if any)
+ let isCompetitionAdmin = false;
+ if (prop.competition_id !== null) {
+ const roleResult = await getCurrentUserRole(prop.competition_id);
+ if (roleResult.success && roleResult.data === "admin") {
+ isCompetitionAdmin = true;
+ }
+ }
+ const canEdit =
+ user.is_admin || isCompetitionAdmin || prop.prop_user_id === user.id;
+
// Calculate stats
const forecastValues = forecasts.map((f) => f.forecast);
const average =
@@ -76,6 +88,7 @@ async function PropPageContent({
{/* Stats Row */}
diff --git a/app/props/[propId]/prop-page-header.tsx b/app/props/[propId]/prop-page-header.tsx
index 78ca1c0..4a434c4 100644
--- a/app/props/[propId]/prop-page-header.tsx
+++ b/app/props/[propId]/prop-page-header.tsx
@@ -5,8 +5,9 @@ import { useRouter } from "next/navigation";
import { VProp } from "@/types/db_types";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
-import { ChevronLeft, CheckCircle2 } from "lucide-react";
+import { ChevronLeft, CheckCircle2, Pencil } from "lucide-react";
import { ResolutionDialog } from "@/components/dialogs/resolution-dialog";
+import { PropEditDialog } from "@/components/dialogs/prop-edit-dialog";
import { MarkdownRenderer } from "@/components/markdown";
import { PropStatusBadge } from "@/components/ui/prop-status-badge";
import { getPropStatusFromProp } from "@/lib/prop-status";
@@ -14,14 +15,17 @@ import { getPropStatusFromProp } from "@/lib/prop-status";
interface PropPageHeaderProps {
prop: VProp;
canResolve: boolean;
+ canEdit: boolean;
}
export default function PropPageHeader({
prop,
canResolve,
+ canEdit,
}: PropPageHeaderProps) {
const router = useRouter();
const [isResolutionDialogOpen, setIsResolutionDialogOpen] = useState(false);
+ const [isEditDialogOpen, setIsEditDialogOpen] = useState(false);
return (
<>
@@ -45,17 +49,28 @@ export default function PropPageHeader({
)}
- {canResolve && (
-
- )}
+
+ {canEdit && (
+
+ )}
+ {canResolve && (
+
+ )}
+
{prop.prop_text}
@@ -82,6 +97,15 @@ export default function PropPageHeader({
isOpen={isResolutionDialogOpen}
onClose={() => setIsResolutionDialogOpen(false)}
/>
+
+ {
+ setIsEditDialogOpen(false);
+ router.refresh();
+ }}
+ />
>
);
}