'use client';
import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query';
import Link from 'next/link';
import {useRouter} from 'next/navigation';
import {useState} from 'react';
import {EmptyState} from '@/components/feedback/empty-state';
import {ErrorState} from '@/components/feedback/error-state';
import {LoadingState} from '@/components/feedback/loading-state';
import {PageHeader} from '@/components/layout/page-header';
import {AppCard} from '@/components/ui/app-card';
import {
activatePagesDeployment,
deletePagesDeployment,
deletePagesProject,
getPagesDeployments,
getPagesProject,
} from '@/features/pages/api/pages';
import {DangerButton, PrimaryButton, SecondaryButton,} from '@/features/shared/components/resource-primitives';
import {PagesProjectEditorModal} from './pages-project-editor-modal';
import {PagesDeploymentUploadModal} from './pages-deployment-upload-modal';
import {formatBytes} from '@/lib/utils/metrics';
import {deploymentsQueryKey, projectQueryKey, projectsQueryKey,} from '../utils';
export function PagesProjectDetailPage({ projectId }: { projectId: string }) {
const router = useRouter();
const queryClient = useQueryClient();
const [isEditModalOpen, setEditModalOpen] = useState(false);
const [isUploadModalOpen, setUploadModalOpen] = useState(false);
const parsedProjectId = Number(projectId);
const projectQuery = useQuery({
queryKey: projectQueryKey(projectId),
queryFn: () => getPagesProject(parsedProjectId),
enabled: projectId !== '' && Number.isFinite(parsedProjectId),
});
const deploymentsQuery = useQuery({
queryKey: deploymentsQueryKey(parsedProjectId),
queryFn: () => getPagesDeployments(parsedProjectId),
enabled: projectId !== '' && Number.isFinite(parsedProjectId),
});
const activateMutation = useMutation({
mutationFn: (deploymentId: number) =>
activatePagesDeployment(parsedProjectId, deploymentId),
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: deploymentsQueryKey(parsedProjectId),
});
queryClient.invalidateQueries({ queryKey: projectQueryKey(projectId) });
queryClient.invalidateQueries({ queryKey: projectsQueryKey });
},
});
const deleteDeploymentMutation = useMutation({
mutationFn: (deploymentId: number) =>
deletePagesDeployment(parsedProjectId, deploymentId),
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: deploymentsQueryKey(parsedProjectId),
});
queryClient.invalidateQueries({ queryKey: projectQueryKey(projectId) });
queryClient.invalidateQueries({ queryKey: projectsQueryKey });
},
});
const deleteProjectMutation = useMutation({
mutationFn: () => deletePagesProject(parsedProjectId),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: projectsQueryKey });
router.push('/pages');
},
});
if (projectId === '' || !Number.isFinite(parsedProjectId)) {
return (
加载中...
) : deploymentsQuery.isError ? ({deploymentsQuery.error.message}
) : (deploymentsQuery.data ?? []).length === 0 ? (#{deployment.deployment_number}{' '} {deployment.status === 'active' ? '· 已激活' : ''}
{deployment.checksum.slice(0, 16)} · {deployment.file_count}{' '} files · {formatBytes(deployment.total_size)}