feat: Update experiment creation and update functions to handle optional annotationTool and trim inputs; add datasets management page
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
37
src/app/admin/datasets/page.tsx
Normal file
37
src/app/admin/datasets/page.tsx
Normal 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>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -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>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user