feat: Update experiment creation and update functions to handle optional annotationTool and trim inputs; add datasets management page

This commit is contained in:
averel10
2026-03-20 07:33:32 +01:00
parent dd5d99ec24
commit 7d58abd30f
3 changed files with 56 additions and 16 deletions

View File

@@ -17,7 +17,7 @@ export async function createExperiment({
name: string; name: string;
description?: string; description?: string;
datasetId: number; datasetId: number;
annotationTool: string; annotationTool?: string;
published?: boolean; published?: boolean;
}) { }) {
const result = await requireAdmin(); const result = await requireAdmin();
@@ -34,7 +34,7 @@ export async function createExperiment({
name: name.trim(), name: name.trim(),
description: description?.trim() || null, description: description?.trim() || null,
datasetId, datasetId,
annotationTool: annotationTool.trim(), annotationTool: annotationTool?.trim(),
published, published,
}); });
revalidatePath('/admin/experiments'); revalidatePath('/admin/experiments');
@@ -67,7 +67,7 @@ export async function updateExperiment(
updateData.description = updates.description.trim() || null; updateData.description = updates.description.trim() || null;
} }
if (updates.annotationTool !== undefined) { if (updates.annotationTool !== undefined) {
updateData.annotationTool = updates.annotationTool; updateData.annotationTool = updates.annotationTool?.trim();
} }
if (updates.published !== undefined) { if (updates.published !== undefined) {
updateData.published = updates.published; updateData.published = updates.published;

View File

@@ -0,0 +1,37 @@
import Link from 'next/link';
import DatasetsList from '@/components/DatasetsList';
import CreateDatasetModal from '@/components/CreateDatasetModal';
import { requireAdmin } from '@/lib/auth';
import { redirect } from 'next/navigation';
export default async function DatasetsAdminPage() {
const result = await requireAdmin();
if (!result.authenticated) {
redirect("/user/sign-in");
}
if (!result.admin) {
redirect("/");
}
return (
<div className="px-4 sm:px-6 lg:px-8 py-8">
<Link
href="/admin"
className="text-blue-500 hover:text-blue-600 mb-6 inline-block"
>
Back to Admin
</Link>
<div className="mb-8">
<h1 className="text-3xl font-bold mb-4">Datasets Management</h1>
<p className="text-gray-600">Manage all datasets</p>
</div>
<CreateDatasetModal />
<DatasetsList />
</div>
);
}

View File

@@ -1,5 +1,4 @@
import DatasetsList from "@/components/DatasetsList"; import DatasetsList from "@/components/DatasetsList";
import CreateDatasetModal from "@/components/CreateDatasetModal";
import ExperimentsList from "@/components/ExperimentsList"; import ExperimentsList from "@/components/ExperimentsList";
import { AdminTokenForm } from "@/components/AdminTokenForm"; import { AdminTokenForm } from "@/components/AdminTokenForm";
import BuildInfo from "@/components/BuildInfo"; import BuildInfo from "@/components/BuildInfo";
@@ -22,12 +21,12 @@ export default async function AdminPage() {
<div className="px-4 sm:px-6 lg:px-8 py-8"> <div className="px-4 sm:px-6 lg:px-8 py-8">
<div className="mb-8"> <div className="mb-8">
<h1 className="text-3xl font-bold mb-4">Admin Panel</h1> <h1 className="text-3xl font-bold mb-4">Admin Panel</h1>
<div className="flex gap-4"> <div className="flex flex-wrap gap-4">
<Link <Link
href="/admin/users" href="/admin/datasets"
className="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600" className="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"
> >
Manage Users Manage Datasets
</Link> </Link>
<Link <Link
href="/admin/experiments" href="/admin/experiments"
@@ -35,6 +34,12 @@ export default async function AdminPage() {
> >
Manage Experiments Manage Experiments
</Link> </Link>
<Link
href="/admin/users"
className="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"
>
Manage Users
</Link>
</div> </div>
</div> </div>
@@ -42,16 +47,14 @@ export default async function AdminPage() {
<BuildInfo /> <BuildInfo />
</div> </div>
<div className="mt-8"> <div className="grid grid-cols-1 lg:grid-cols-2 gap-8 mt-8">
<h2 className="text-2xl font-bold mb-4">Datasets</h2> <div>
<CreateDatasetModal /> <DatasetsList />
<DatasetsList /> </div>
</div>
<div className="mt-12"> <div>
<h2 className="text-2xl font-bold mb-4">Experiments</h2> <ExperimentsList />
<p className="text-gray-600 mb-4">Manage experiments globally or <Link href="/admin/experiments" className="text-blue-500 hover:text-blue-600 font-semibold">go to the experiments management page</Link></p> </div>
<ExperimentsList />
</div> </div>
</div> </div>
); );