This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import React, { useState } from 'react';
|
||||
import { useParams, useNavigate } from 'react-router-dom';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import { useQuery, useQueryClient } from '@tanstack/react-query';
|
||||
import { Typography, Tabs, Button, Row, Col, Card, Statistic, Tag, Descriptions, Empty, message, Spin } from 'antd';
|
||||
import { CalendarOutlined, TrophyOutlined, UserOutlined, FileTextOutlined, CloudUploadOutlined, CopyOutlined, CheckOutlined } from '@ant-design/icons';
|
||||
import ReactMarkdown from 'react-markdown';
|
||||
@@ -79,6 +79,7 @@ const CodeBlock = ({ inline, className, children, ...props }) => {
|
||||
const CompetitionDetail = () => {
|
||||
const { id } = useParams();
|
||||
const navigate = useNavigate();
|
||||
const queryClient = useQueryClient();
|
||||
const { user, showLoginModal } = useAuth();
|
||||
const [activeTab, setActiveTab] = useState('details');
|
||||
const [submissionModalVisible, setSubmissionModalVisible] = useState(false);
|
||||
@@ -104,6 +105,15 @@ const CompetitionDetail = () => {
|
||||
retry: false
|
||||
});
|
||||
|
||||
// Fetch my project if enrolled
|
||||
const { data: myProjects, isLoading: loadingMyProject } = useQuery({
|
||||
queryKey: ['myProject', id, enrollment?.id],
|
||||
queryFn: () => getProjects({ competition: id, contestant: enrollment.id }).then(res => res.data),
|
||||
enabled: !!enrollment?.id
|
||||
});
|
||||
|
||||
const myProject = myProjects?.results?.[0];
|
||||
|
||||
const handleEnroll = async () => {
|
||||
if (!user) {
|
||||
showLoginModal();
|
||||
@@ -297,8 +307,15 @@ const CompetitionDetail = () => {
|
||||
</Button>
|
||||
)}
|
||||
{isContestant && (
|
||||
<Button icon={<CloudUploadOutlined />} onClick={() => setSubmissionModalVisible(true)}>
|
||||
提交/管理作品
|
||||
<Button
|
||||
icon={<CloudUploadOutlined />}
|
||||
loading={loadingMyProject}
|
||||
onClick={() => {
|
||||
setEditingProject(myProject || null);
|
||||
setSubmissionModalVisible(true);
|
||||
}}
|
||||
>
|
||||
{myProject ? '管理/修改作品' : '提交作品'}
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
@@ -325,6 +342,8 @@ const CompetitionDetail = () => {
|
||||
setSubmissionModalVisible(false);
|
||||
setEditingProject(null);
|
||||
// Refetch projects
|
||||
queryClient.invalidateQueries(['projects']);
|
||||
queryClient.invalidateQueries(['myProject']);
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user