Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 3,695 Bytes
debda0e ebdfd67 970eef1 31d11b5 970eef1 81e0b0c ebdfd67 81e0b0c d6f0b38 debda0e d6f0b38 debda0e d6f0b38 debda0e d6f0b38 debda0e 970eef1 d6f0b38 debda0e d6f0b38 debda0e d6f0b38 debda0e d6f0b38 debda0e d6f0b38 debda0e d6f0b38 debda0e d6f0b38 debda0e d6f0b38 debda0e d6f0b38 debda0e d6f0b38 debda0e 970eef1 81e0b0c 970eef1 81e0b0c 970eef1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
import React, { useEffect } from "react";
import { Box, Container, CssBaseline } from "@mui/material";
import {
HashRouter as Router,
Routes,
Route,
Navigate,
} from "react-router-dom";
import getTheme from "./config/theme";
import { useThemeMode } from "./hooks/useThemeMode";
import { ThemeProvider } from "@mui/material/styles";
import Navigation from "./components/Navigation";
import HomePage from "./pages/HomePage";
import BenchmarkGenerationPage from "./pages/BenchmarkGenerationPage";
import BenchmarkDisplayPage from "./pages/BenchmarkDisplayPage";
import BenchmarkEvaluationPage from "./pages/BenchmarkEvaluationPage";
import EvaluationDisplayPage from "./pages/EvaluationDisplayPage";
import Footer from "./components/Footer/Footer";
// Function to synchronize URL hash with parent Hugging Face page
const syncURLWithParent = () => {
// This function is only necessary in a Hugging Face Spaces environment
if (window.parent !== window) {
try {
// Send the current hash to the parent page (Hugging Face)
window.parent.postMessage(
{
hash: window.location.hash,
},
"https://huggingface.co"
);
// Log for debugging
console.log("Synced hash with parent:", window.location.hash);
} catch (error) {
console.error("Error syncing URL with parent:", error);
}
}
};
function App() {
const { mode } = useThemeMode();
const theme = getTheme(mode);
// Effect to monitor hash changes and synchronize them
useEffect(() => {
// Event handler function for hash changes
const handleHashChange = () => {
syncURLWithParent();
};
// Function to handle messages received from the parent page
const handleParentMessage = (event) => {
// Verify that the message comes from Hugging Face
if (event.origin === "https://huggingface.co") {
// If the message contains a hash and it's different from the current hash
if (event.data.hash && event.data.hash !== window.location.hash) {
console.log("Received hash from parent:", event.data.hash);
// Update the URL hash without reloading the page
window.location.hash = event.data.hash;
}
}
};
// Synchronize on initial load
syncURLWithParent();
// Listen for hash changes
window.addEventListener("hashchange", handleHashChange);
// Listen for messages from the parent page
window.addEventListener("message", handleParentMessage);
// Cleanup
return () => {
window.removeEventListener("hashchange", handleHashChange);
window.removeEventListener("message", handleParentMessage);
};
}, []);
return (
<ThemeProvider theme={theme}>
<CssBaseline />
<Router>
<Container maxWidth="md">
<Navigation />
<Box sx={{ pt: 12, pb: 4 }}>
<Routes>
<Route path="/" element={<HomePage />} />
<Route
path="/benchmark-generation"
element={<BenchmarkGenerationPage />}
/>
<Route
path="/benchmark-display"
element={<BenchmarkDisplayPage />}
/>
<Route
path="/benchmark-evaluation"
element={<BenchmarkEvaluationPage />}
/>
<Route
path="/evaluation-display"
element={<EvaluationDisplayPage />}
/>
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
<Footer />
</Box>
</Container>
</Router>
</ThemeProvider>
);
}
export default App;
|