Frontend start to use backend CRUD api

This commit is contained in:
Xin Wang
2026-02-08 15:08:18 +08:00
parent b9a315177a
commit 86744f0842
12 changed files with 768 additions and 154 deletions

View File

@@ -1,14 +1,17 @@
import React, { useState, useMemo, useRef } from 'react';
import React, { useState, useMemo, useRef, useEffect } from 'react';
import { useNavigate } from 'react-router-dom';
import { Phone, CheckCircle, Clock, UserCheck, Activity, Filter, ChevronDown, BarChart3, HelpCircle, Mail, Sparkles, ArrowDown, Bot, Zap, Rocket, LineChart, Layers, Fingerprint, Network, MonitorPlay, Plus } from 'lucide-react';
import { Card, Button } from '../components/UI';
import { mockAssistants, getDashboardStats } from '../services/mockData';
import { getDashboardStats } from '../services/mockData';
import { Assistant } from '../types';
import { fetchAssistants } from '../services/backendApi';
export const DashboardPage: React.FC = () => {
const navigate = useNavigate();
const [timeRange, setTimeRange] = useState<'week' | 'month' | 'year'>('week');
const [selectedAssistantId, setSelectedAssistantId] = useState<string>('all');
const [assistants, setAssistants] = useState<Assistant[]>([]);
const workflowRef = useRef<HTMLDivElement>(null);
const aboutRef = useRef<HTMLDivElement>(null);
@@ -17,6 +20,18 @@ export const DashboardPage: React.FC = () => {
return getDashboardStats(timeRange, selectedAssistantId);
}, [timeRange, selectedAssistantId]);
useEffect(() => {
const loadAssistants = async () => {
try {
const list = await fetchAssistants();
setAssistants(list);
} catch (error) {
console.error(error);
}
};
loadAssistants();
}, []);
const scrollToNext = (ref: React.RefObject<HTMLDivElement>) => {
ref.current?.scrollIntoView({ behavior: 'smooth' });
};
@@ -83,7 +98,7 @@ export const DashboardPage: React.FC = () => {
onChange={(e) => setSelectedAssistantId(e.target.value)}
>
<option value="all" className="bg-background"></option>
{mockAssistants.map(a => (
{assistants.map(a => (
<option key={a.id} value={a.id} className="bg-background">{a.name}</option>
))}
</select>