diff --git a/web/src/components/layout/HeaderBar.js b/web/src/components/layout/HeaderBar.js
index b7425645..98a7e17b 100644
--- a/web/src/components/layout/HeaderBar.js
+++ b/web/src/components/layout/HeaderBar.js
@@ -221,7 +221,16 @@ const HeaderBar = () => {
.fill(null)
.map((_, index) => (
-
+
+ }
+ />
));
}
@@ -272,9 +281,22 @@ const HeaderBar = () => {
if (isLoading) {
return (
);
@@ -448,22 +470,35 @@ const HeaderBar = () => {
/>
handleNavLinkClick('home')} className="flex items-center gap-2 group ml-2">
- {isLoading ? (
-
- ) : (
+
+ }
+ >
- )}
+
- {isLoading ? (
-
- ) : (
-
+
+ }
+ >
+
{systemName}
- )}
+
{(isSelfUseMode || isDemoSiteMode) && !isLoading && (
{
// ========== Hooks - Memoized Values ==========
const performanceMetrics = useMemo(() => {
const timeDiff = (Date.parse(end_timestamp) - Date.parse(start_timestamp)) / 60000;
- const avgRPM = (times / timeDiff).toFixed(3);
+ const avgRPM = isNaN(times / timeDiff) ? '0' : (times / timeDiff).toFixed(3);
const avgTPM = isNaN(consumeTokens / timeDiff) ? '0' : (consumeTokens / timeDiff).toFixed(3);
return { avgRPM, avgTPM, timeDiff };
@@ -627,6 +628,7 @@ const Detail = (props) => {
const loadQuotaData = useCallback(async () => {
setLoading(true);
+ const startTime = Date.now();
try {
let url = '';
let localStartTimestamp = Date.parse(start_timestamp) / 1000;
@@ -654,7 +656,11 @@ const Detail = (props) => {
showError(message);
}
} finally {
- setLoading(false);
+ const elapsed = Date.now() - startTime;
+ const remainingTime = Math.max(0, 500 - elapsed);
+ setTimeout(() => {
+ setLoading(false);
+ }, remainingTime);
}
}, [start_timestamp, end_timestamp, username, dataExportDefaultTime, isAdminUser]);
@@ -1202,10 +1208,24 @@ const Detail = (props) => {
{item.title}
-
{item.value}
+
+
+ }
+ >
+ {item.value}
+
+
- {item.trendData && item.trendData.length > 0 && (
+ {(loading || (item.trendData && item.trendData.length > 0)) && (