/** * This file is part of Sharenet. * * Sharenet is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * * You may obtain a copy of the license at: * https://creativecommons.org/licenses/by-nc-sa/4.0/ * * Copyright (c) 2024 Continuist */ 'use client'; import { useState, useEffect } from 'react'; import { userApi, User } from '@/lib/api'; import { Button } from '@/components/ui/button'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; export default function UsersPage() { const [users, setUsers] = useState([]); const [isDialogOpen, setIsDialogOpen] = useState(false); const [editingUser, setEditingUser] = useState(null); const [formData, setFormData] = useState({ username: '', email: '', }); useEffect(() => { loadUsers(); }, []); const loadUsers = async () => { try { const response = await userApi.getAll(); setUsers(response.data); } catch (error) { console.error('Error loading users:', error); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); try { if (editingUser) { await userApi.update(editingUser.id, formData); } else { await userApi.create(formData); } setIsDialogOpen(false); setEditingUser(null); setFormData({ username: '', email: '' }); loadUsers(); } catch (error) { console.error('Error saving user:', error); } }; const handleEdit = (user: User) => { setEditingUser(user); setFormData({ username: user.username, email: user.email }); setIsDialogOpen(true); }; const handleDelete = async (id: string) => { if (confirm('Are you sure you want to delete this user?')) { try { await userApi.delete(id); loadUsers(); } catch (error) { console.error('Error deleting user:', error); } } }; return (

Users

{editingUser ? 'Edit User' : 'Add User'}
setFormData({ ...formData, username: e.target.value })} required />
setFormData({ ...formData, email: e.target.value })} required />
ID Username Email Created At Updated At Actions {users.map((user) => ( {user.id} {user.username} {user.email} {new Date(user.created_at).toLocaleString()} {new Date(user.updated_at).toLocaleString()}
))}
); }