Clean ovewview code
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
|
||||
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 { Phone, CheckCircle, Clock, UserCheck, ChevronDown, BarChart3, HelpCircle, Mail, ArrowDown, Bot, Zap, Rocket, LineChart, Layers, Fingerprint, Network, MonitorPlay, Plus } from 'lucide-react';
|
||||
import { Card, Button } from '../components/UI';
|
||||
import { getDashboardStats } from '../services/mockData';
|
||||
import { Assistant } from '../types';
|
||||
@@ -27,45 +27,78 @@ export const DashboardPage: React.FC = () => {
|
||||
}, [timeRange, selectedAssistantId]);
|
||||
|
||||
useEffect(() => {
|
||||
let disposed = false;
|
||||
|
||||
const loadAssistants = async () => {
|
||||
try {
|
||||
const list = await fetchAssistants();
|
||||
if (!disposed) {
|
||||
setAssistants(list);
|
||||
}
|
||||
} catch (error) {
|
||||
if (!disposed) {
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
loadAssistants();
|
||||
|
||||
return () => {
|
||||
disposed = true;
|
||||
};
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
const updateTopRailHeight = () => {
|
||||
setTopRailHeight(topRailRef.current?.offsetHeight ?? 0);
|
||||
const nextHeight = topRailRef.current?.offsetHeight ?? 0;
|
||||
setTopRailHeight((prev) => (prev === nextHeight ? prev : nextHeight));
|
||||
};
|
||||
|
||||
updateTopRailHeight();
|
||||
|
||||
const observer = new ResizeObserver(() => {
|
||||
let observer: ResizeObserver | null = null;
|
||||
if (typeof ResizeObserver !== 'undefined' && topRailRef.current) {
|
||||
observer = new ResizeObserver(() => {
|
||||
updateTopRailHeight();
|
||||
});
|
||||
|
||||
if (topRailRef.current) {
|
||||
observer.observe(topRailRef.current);
|
||||
}
|
||||
|
||||
window.addEventListener('resize', updateTopRailHeight);
|
||||
return () => {
|
||||
if (observer) {
|
||||
observer.disconnect();
|
||||
}
|
||||
window.removeEventListener('resize', updateTopRailHeight);
|
||||
};
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (!scrollRootRef.current || !overviewRef.current) return;
|
||||
if (typeof IntersectionObserver === 'undefined') {
|
||||
const onScroll = () => {
|
||||
if (!scrollRootRef.current || !overviewRef.current) return;
|
||||
const rootRect = scrollRootRef.current.getBoundingClientRect();
|
||||
const overviewRect = overviewRef.current.getBoundingClientRect();
|
||||
const lowerBound = rootRect.top + rootRect.height * 0.35;
|
||||
const upperBound = rootRect.bottom - rootRect.height * 0.35;
|
||||
const isVisible = overviewRect.bottom > lowerBound && overviewRect.top < upperBound;
|
||||
setIsOverviewVisible((prev) => (prev === isVisible ? prev : isVisible));
|
||||
};
|
||||
|
||||
onScroll();
|
||||
scrollRootRef.current.addEventListener('scroll', onScroll, { passive: true });
|
||||
window.addEventListener('resize', onScroll);
|
||||
return () => {
|
||||
scrollRootRef.current?.removeEventListener('scroll', onScroll);
|
||||
window.removeEventListener('resize', onScroll);
|
||||
};
|
||||
}
|
||||
|
||||
const observer = new IntersectionObserver(
|
||||
([entry]) => {
|
||||
setIsOverviewVisible(entry.isIntersecting);
|
||||
setIsOverviewVisible((prev) => (prev === entry.isIntersecting ? prev : entry.isIntersecting));
|
||||
},
|
||||
{
|
||||
root: scrollRootRef.current,
|
||||
@@ -81,22 +114,25 @@ export const DashboardPage: React.FC = () => {
|
||||
const updateScrollRootCenter = () => {
|
||||
if (!scrollRootRef.current) return;
|
||||
const rect = scrollRootRef.current.getBoundingClientRect();
|
||||
setScrollRootCenterX(rect.left + rect.width / 2);
|
||||
const nextCenterX = rect.left + rect.width / 2;
|
||||
setScrollRootCenterX((prev) => (prev === nextCenterX ? prev : nextCenterX));
|
||||
};
|
||||
|
||||
updateScrollRootCenter();
|
||||
|
||||
const observer = new ResizeObserver(() => {
|
||||
let observer: ResizeObserver | null = null;
|
||||
if (typeof ResizeObserver !== 'undefined' && scrollRootRef.current) {
|
||||
observer = new ResizeObserver(() => {
|
||||
updateScrollRootCenter();
|
||||
});
|
||||
|
||||
if (scrollRootRef.current) {
|
||||
observer.observe(scrollRootRef.current);
|
||||
}
|
||||
|
||||
window.addEventListener('resize', updateScrollRootCenter);
|
||||
return () => {
|
||||
if (observer) {
|
||||
observer.disconnect();
|
||||
}
|
||||
window.removeEventListener('resize', updateScrollRootCenter);
|
||||
};
|
||||
}, []);
|
||||
|
||||
Reference in New Issue
Block a user