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;
description?: string;
datasetId: number;
annotationTool: string;
annotationTool?: string;
published?: boolean;
}) {
const result = await requireAdmin();
@@ -34,7 +34,7 @@ export async function createExperiment({
name: name.trim(),
description: description?.trim() || null,
datasetId,
annotationTool: annotationTool.trim(),
annotationTool: annotationTool?.trim(),
published,
});
revalidatePath('/admin/experiments');
@@ -67,7 +67,7 @@ export async function updateExperiment(
updateData.description = updates.description.trim() || null;
}
if (updates.annotationTool !== undefined) {
updateData.annotationTool = updates.annotationTool;
updateData.annotationTool = updates.annotationTool?.trim();
}
if (updates.published !== undefined) {
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 CreateDatasetModal from "@/components/CreateDatasetModal";
import ExperimentsList from "@/components/ExperimentsList";
import { AdminTokenForm } from "@/components/AdminTokenForm";
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="mb-8">
<h1 className="text-3xl font-bold mb-4">Admin Panel</h1>
<div className="flex gap-4">
<div className="flex flex-wrap gap-4">
<Link
href="/admin/users"
href="/admin/datasets"
className="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"
>
Manage Users
Manage Datasets
</Link>
<Link
href="/admin/experiments"
@@ -35,6 +34,12 @@ export default async function AdminPage() {
>
Manage Experiments
</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>
@@ -42,16 +47,14 @@ export default async function AdminPage() {
<BuildInfo />
</div>
<div className="mt-8">
<h2 className="text-2xl font-bold mb-4">Datasets</h2>
<CreateDatasetModal />
<DatasetsList />
</div>
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8 mt-8">
<div>
<DatasetsList />
</div>
<div className="mt-12">
<h2 className="text-2xl font-bold mb-4">Experiments</h2>
<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>
<ExperimentsList />
<div>
<ExperimentsList />
</div>
</div>
</div>
);