import React, { useEffect, useState } from 'react'; import { submissionAPI, taskAPI, userAPI } from '../../services/api'; import Loader from '../common/Loader'; import EmptyState from '../common/EmptyState'; import { formatDateTime, safeArray } from '../../utils/formatters'; const AdminPanel = () => { const [users, setUsers] = useState([]); const [submissions, setSubmissions] = useState([]); const [newTask, setNewTask] = useState({ title: '', description: '', dueDate: '' }); const [loading, setLoading] = useState(true); const [dashboardError, setDashboardError] = useState(''); const [taskError, setTaskError] = useState(''); const [creatingTask, setCreatingTask] = useState(false); useEffect(() => { const loadDashboard = async () => { try { setLoading(true); const [usersResponse, submissionsResponse] = await Promise.all([ userAPI.getAllUsers(), submissionAPI.getAllSubmissions(), ]); setUsers(safeArray(usersResponse?.data)); setSubmissions(safeArray(submissionsResponse?.data)); } catch (err) { const message = err?.response?.data?.message ?? 'We were unable to load admin data.'; setDashboardError(message); } finally { setLoading(false); } }; loadDashboard(); }, []); const handleTaskChange = (event) => { const { name, value } = event.target; setNewTask((prev) => ({ ...prev, [name]: value })); }; const handleCreateTask = async (event) => { event.preventDefault(); setCreatingTask(true); setTaskError(''); try { await taskAPI.createTask(newTask); setNewTask({ title: '', description: '', dueDate: '' }); } catch (err) { const message = err?.response?.data?.message ?? 'The task could not be created.'; setTaskError(message); } finally { setCreatingTask(false); } }; if (loading) { return ; } return (
{dashboardError && (
{dashboardError}
)}

Quick task creation

Create work items directly from the admin panel.