feat(appliance): initial release of MERICA standalone appliance v1.0.0

This commit is contained in:
2026-10-21 17:16:46 +07:00
commit 851be0cda7
144 changed files with 31135 additions and 0 deletions
+82
View File
@@ -0,0 +1,82 @@
import React from 'react';
import { HashRouter, Routes, Route, Navigate } from 'react-router-dom';
import { useAuth } from '../context/AuthContext';
import LoginPage from '../pages/LoginPage';
import StudioPage from '../pages/StudioPage';
import WorkspacePage from '../pages/WorkspacePage';
import PipelineListPage from '../pages/PipelineListPage';
import ComponentDocsPage from '../pages/ComponentDocsPage';
import SettingsPage from '../pages/SettingsPage';
function ProtectedRoute({ children }) {
const { isAuthenticated } = useAuth();
if (!isAuthenticated) {
return <Navigate to="/login" replace />;
}
return children;
}
export default function AppRouter() {
const { isAuthenticated } = useAuth();
return (
<HashRouter>
<Routes>
<Route path="/" element={<Navigate to={isAuthenticated ? '/studio' : '/login'} replace />} />
<Route path="/login" element={isAuthenticated ? <Navigate to="/studio" replace /> : <LoginPage />} />
<Route path="/auth/callback" element={<LoginPage />} />
<Route
path="/overview"
element={
<ProtectedRoute>
<WorkspacePage isAllPipelines={false} />
</ProtectedRoute>
}
/>
<Route
path="/studio"
element={
<ProtectedRoute>
<StudioPage />
</ProtectedRoute>
}
/>
<Route
path="/studio/:pipelineId"
element={
<ProtectedRoute>
<StudioPage />
</ProtectedRoute>
}
/>
<Route
path="/pipelines"
element={
<ProtectedRoute>
<WorkspacePage isAllPipelines={true} />
</ProtectedRoute>
}
/>
<Route
path="/docs"
element={
<ProtectedRoute>
<ComponentDocsPage />
</ProtectedRoute>
}
/>
<Route
path="/settings"
element={
<ProtectedRoute>
<SettingsPage />
</ProtectedRoute>
}
/>
<Route path="*" element={<Navigate to={isAuthenticated ? '/studio' : '/login'} replace />} />
</Routes>
</HashRouter>
);
}