'use client'; import { useState } from 'react'; import { Modal } from '@/components/Modal'; import Link from 'next/link'; import { TextInput } from '@/components/formInputs'; import useDatasetList from '@/hooks/useDatasetList'; import { Button } from '@headlessui/react'; import { FaRegTrashAlt } from 'react-icons/fa'; import { openConfirm } from '@/components/ConfirmModal'; import { TopBar, MainContent } from '@/components/layout'; import UniversalTable, { TableColumn } from '@/components/UniversalTable'; import { apiClient } from '@/utils/api'; import { useRouter } from 'next/navigation'; export default function Datasets() { const router = useRouter(); const { datasets, status, refreshDatasets } = useDatasetList(); const [newDatasetName, setNewDatasetName] = useState(''); const [isNewDatasetModalOpen, setIsNewDatasetModalOpen] = useState(false); // Transform datasets array into rows with objects const tableRows = datasets.map(dataset => ({ name: dataset, actions: dataset, // Pass full dataset name for actions })); const columns: TableColumn[] = [ { title: 'Dataset Name', key: 'name', render: row => ( {row.name} ), }, { title: 'Actions', key: 'actions', className: 'w-20 text-right', render: row => ( handleDeleteDataset(row.name)} > ), }, ]; const handleDeleteDataset = (datasetName: string) => { openConfirm({ title: 'Delete Dataset', message: `Are you sure you want to delete the dataset "${datasetName}"? This action cannot be undone.`, type: 'warning', confirmText: 'Delete', onConfirm: () => { apiClient .post('/api/datasets/delete', { name: datasetName }) .then(() => { console.log('Dataset deleted:', datasetName); refreshDatasets(); }) .catch(error => { console.error('Error deleting dataset:', error); }); }, }); }; const handleCreateDataset = async (e: React.FormEvent) => { e.preventDefault(); try { const data = await apiClient.post('/api/datasets/create', { name: newDatasetName }).then(res => res.data); console.log('New dataset created:', data); refreshDatasets(); setNewDatasetName(''); setIsNewDatasetModalOpen(false); } catch (error) { console.error('Error creating new dataset:', error); } }; const openNewDatasetModal = () => { openConfirm({ title: 'New Dataset', message: 'Enter the name of the new dataset:', type: 'info', confirmText: 'Create', inputTitle: 'Dataset Name', onConfirm: async (name?: string) => { if (!name) { console.error('Dataset name is required.'); return; } try { const data = await apiClient.post('/api/datasets/create', { name }).then(res => res.data); console.log('New dataset created:', data); if (data.name) { router.push(`/datasets/${data.name}`); } else { refreshDatasets(); } } catch (error) { console.error('Error creating new dataset:', error); } }, }); }; return ( <> Datasets openNewDatasetModal()} > New Dataset setIsNewDatasetModalOpen(false)} title="New Dataset" size="md" > This will create a new folder with the name below in your dataset folder. setNewDatasetName(value)} /> setIsNewDatasetModalOpen(false)} > Cancel Confirm > ); }