8d6c0f9ac0
CI / verify (pull_request) Has been cancelled
Add partner-facing proxy order list/detail; unlock SUPER_ADMIN order delete with cascade cleanup and type filter. Co-authored-by: Cursor <cursoragent@cursor.com>
93 lines
3.7 KiB
TypeScript
93 lines
3.7 KiB
TypeScript
import { Navigate, Route, Routes } from 'react-router-dom';
|
|
import { usePartnerSession } from './contexts/PartnerSessionContext';
|
|
import { getPartnerNavKind, isSubAccount } from './lib/partnerAccess';
|
|
import TabLayout from './layouts/TabLayout';
|
|
import SubAccountLayout from './layouts/SubAccountLayout';
|
|
import HomePage from './pages/HomePage';
|
|
import StoreListPage from './pages/StoreListPage';
|
|
import StoreDetailPage from './pages/StoreDetailPage';
|
|
import StoreCreatePage from './pages/StoreCreatePage';
|
|
import OrderListPage from './pages/OrderListPage';
|
|
import OrderDetailPage from './pages/OrderDetailPage';
|
|
import CenterPage from './pages/CenterPage';
|
|
import PartnerMePage from './pages/PartnerMePage';
|
|
import BillsPage from './pages/BillsPage';
|
|
import SettlementPage from './pages/SettlementPage';
|
|
import WeeklyReportPage from './pages/WeeklyReportPage';
|
|
import ProxyOrderPage from './pages/ProxyOrderPage';
|
|
import ProxyOrderProductsPage from './pages/ProxyOrderProductsPage';
|
|
import ProxyOrderListPage from './pages/ProxyOrderListPage';
|
|
import ProxyOrderDetailPage from './pages/ProxyOrderDetailPage';
|
|
import StaffListPage from './pages/StaffListPage';
|
|
import StaffCreatePage from './pages/StaffCreatePage';
|
|
import LeaderboardPage from './pages/LeaderboardPage';
|
|
|
|
function PrimaryRoutes() {
|
|
return (
|
|
<Routes>
|
|
<Route element={<TabLayout />}>
|
|
<Route path="/" element={<HomePage />} />
|
|
<Route path="/stores" element={<StoreListPage />} />
|
|
<Route path="/center" element={<CenterPage />} />
|
|
</Route>
|
|
<Route path="/stores/new" element={<StoreCreatePage />} />
|
|
<Route path="/center/bills" element={<BillsPage />} />
|
|
<Route path="/center/settlement" element={<SettlementPage />} />
|
|
<Route path="/center/staff" element={<StaffListPage />} />
|
|
<Route path="/center/staff/new" element={<StaffCreatePage />} />
|
|
<Route path="/center/proxy-orders" element={<ProxyOrderListPage />} />
|
|
<Route path="/center/proxy-orders/:id" element={<ProxyOrderDetailPage />} />
|
|
<Route path="/proxy-order" element={<ProxyOrderPage />} />
|
|
<Route path="/proxy-order/products" element={<ProxyOrderProductsPage />} />
|
|
<Route path="/reports/weekly" element={<WeeklyReportPage />} />
|
|
<Route path="/leaderboard" element={<LeaderboardPage />} />
|
|
<Route path="/stores/:id" element={<StoreDetailPage />} />
|
|
<Route path="/orders" element={<OrderListPage />} />
|
|
<Route path="/orders/:id" element={<OrderDetailPage />} />
|
|
<Route path="*" element={<Navigate to="/" replace />} />
|
|
</Routes>
|
|
);
|
|
}
|
|
|
|
function SubAccountRoutes() {
|
|
const { account } = usePartnerSession();
|
|
const navKind = getPartnerNavKind(account);
|
|
const isWarehouse = navKind === 'warehouse_staff';
|
|
|
|
return (
|
|
<Routes>
|
|
<Route element={<SubAccountLayout navKind={navKind} />}>
|
|
<Route path="/" element={<HomePage />} />
|
|
{isWarehouse ? (
|
|
<Route path="/orders" element={<OrderListPage tabRoot />} />
|
|
) : (
|
|
<Route path="/stores" element={<StoreListPage />} />
|
|
)}
|
|
<Route path="/me" element={<PartnerMePage />} />
|
|
</Route>
|
|
{!isWarehouse && (
|
|
<>
|
|
<Route path="/stores/new" element={<StoreCreatePage />} />
|
|
<Route path="/stores/:id" element={<StoreDetailPage />} />
|
|
</>
|
|
)}
|
|
<Route path="/leaderboard" element={<LeaderboardPage />} />
|
|
{isWarehouse && <Route path="/orders/:id" element={<OrderDetailPage />} />}
|
|
<Route path="*" element={<Navigate to="/" replace />} />
|
|
</Routes>
|
|
);
|
|
}
|
|
|
|
export default function PartnerAppRoutes() {
|
|
const { account, authenticated } = usePartnerSession();
|
|
|
|
if (!authenticated) {
|
|
return null;
|
|
}
|
|
|
|
if (isSubAccount(account)) {
|
|
return <SubAccountRoutes />;
|
|
}
|
|
return <PrimaryRoutes />;
|
|
}
|