import React, { useState, useEffect } from 'react'; import { DataTable, TableColumn, Badge, Group, Text, SidebarLayout, Sidebar } from '@skybridge/web-components'; import { IconEye, IconCopy } from '@tabler/icons-react'; import { notifications } from '@mantine/notifications'; import { apiService, Application } from '../services/apiService'; import ApplicationSidebar from './ApplicationSidebar'; import dayjs from 'dayjs'; const Applications: React.FC = () => { const [applications, setApplications] = useState([]); const [loading, setLoading] = useState(false); const [sidebarOpen, setSidebarOpen] = useState(false); const [editingApp, setEditingApp] = useState(null); useEffect(() => { loadApplications(); }, []); const loadApplications = async () => { try { setLoading(true); const response = await apiService.getApplications(100, 0); setApplications(response.data); } catch (error) { console.error('Failed to load applications:', error); } finally { setLoading(false); } }; const handleAdd = () => { setEditingApp(null); setSidebarOpen(true); }; const handleEdit = (app: Application) => { setEditingApp(app); setSidebarOpen(true); }; const handleDelete = async (app: Application) => { await apiService.deleteApplication(app.app_id); loadApplications(); }; const handleSuccess = () => { setSidebarOpen(false); setEditingApp(null); loadApplications(); }; const copyToClipboard = (text: string) => { navigator.clipboard.writeText(text); notifications.show({ title: 'Copied', message: 'Copied to clipboard', color: 'blue', }); }; const columns: TableColumn[] = [ { key: 'app_id', label: 'Application ID', render: (value) => {value} }, { key: 'type', label: 'Type', render: (value: string[]) => ( {value.map((type) => ( {type} ))} ) }, { key: 'owner', label: 'Owner', render: (value: any) => ( {value.name} ({value.owner}) ) }, { key: 'created_at', label: 'Created', render: (value) => ( {dayjs(value).format('MMM DD, YYYY')} ) }, ]; const customActions = [ { key: 'view', label: 'View Details', icon: , onClick: (app: Application) => { // Could open a modal or navigate to details page console.log('View details for:', app.app_id); }, }, { key: 'copy', label: 'Copy App ID', icon: , onClick: (app: Application) => copyToClipboard(app.app_id), }, ]; return ( setSidebarOpen(false)} onSuccess={handleSuccess} editingApp={editingApp} /> } > ); }; export default Applications;