Updated the public documentation site with improved layout and accessibility, including new sections for client integration and admin guides. Enhanced API queries by adding 'active_only' and 'group_by' parameters for better data filtering in risk management. Refined UI components for agent management, ensuring consistent styling and improved user experience across the application. Added localization support for new documentation content in English and Nepali.
137 lines
5.9 KiB
TypeScript
137 lines
5.9 KiB
TypeScript
export type PageTitleSpec = {
|
|
ns: string;
|
|
key: string;
|
|
params?: Record<string, string>;
|
|
};
|
|
|
|
const EXACT_ROUTES: Record<string, PageTitleSpec> = {
|
|
"/admin": { ns: "dashboard", key: "title" },
|
|
"/admin/players": { ns: "players", key: "title" },
|
|
"/admin/draws": { ns: "draws", key: "statusListTitle" },
|
|
"/admin/tickets": { ns: "tickets", key: "title" },
|
|
"/admin/settlement-batches": { ns: "settlement", key: "batchList" },
|
|
"/admin/reconcile": { ns: "reconcile", key: "title" },
|
|
"/admin/reports": { ns: "reports", key: "title" },
|
|
"/admin/audit-logs": { ns: "audit", key: "title" },
|
|
"/admin/admin-users": { ns: "adminUsers", key: "title" },
|
|
"/admin/admin-roles": { ns: "adminRoles", key: "title" },
|
|
"/admin/agents": { ns: "agents", key: "title" },
|
|
"/admin/agents/list": { ns: "agents", key: "listTitle" },
|
|
"/admin/agents/provision": { ns: "agents", key: "subnav.provision" },
|
|
"/admin/agents/sites": { ns: "config", key: "integrationSites.title" },
|
|
"/admin/settlement-center": { ns: "settlementCenter", key: "title" },
|
|
"/admin/agents/settlement-bills": { ns: "settlementCenter", key: "title" },
|
|
"/admin/config/integration-sites": { ns: "config", key: "integrationSites.title" },
|
|
"/docs": { ns: "config", key: "integrationGuide.title" },
|
|
"/docs/integration": { ns: "config", key: "integrationGuide.title" },
|
|
"/docs/integration/fundamentals": { ns: "config", key: "integrationGuide.title" },
|
|
"/docs/integration/preparation": { ns: "config", key: "integrationGuide.title" },
|
|
"/docs/integration/sso": { ns: "config", key: "integrationGuide.title" },
|
|
"/docs/integration/iframe": { ns: "config", key: "integrationGuide.title" },
|
|
"/docs/integration/wallet": { ns: "config", key: "integrationGuide.title" },
|
|
"/docs/integration/transfer": { ns: "config", key: "integrationGuide.title" },
|
|
"/docs/integration/errors": { ns: "config", key: "integrationGuide.title" },
|
|
"/docs/integration/go-live": { ns: "config", key: "integrationGuide.title" },
|
|
"/docs/admin": { ns: "adminDocs", key: "shell.title" },
|
|
"/docs/admin/roles": { ns: "adminDocs", key: "nav.roles" },
|
|
"/docs/admin/site-setup": { ns: "adminDocs", key: "nav.siteSetup" },
|
|
"/docs/admin/draws": { ns: "adminDocs", key: "nav.draws" },
|
|
"/docs/admin/settlement-center": { ns: "adminDocs", key: "nav.settlementCenter" },
|
|
"/docs/admin/agents": { ns: "adminDocs", key: "nav.agents" },
|
|
"/docs/admin/players": { ns: "adminDocs", key: "nav.players" },
|
|
"/docs/admin/reports": { ns: "adminDocs", key: "nav.reports" },
|
|
"/docs/admin/faq": { ns: "adminDocs", key: "nav.faq" },
|
|
"/admin/docs/integration-guide": { ns: "config", key: "integrationGuide.title" },
|
|
"/admin/wallet": { ns: "wallet", key: "title" },
|
|
"/admin/wallet/transactions": { ns: "wallet", key: "walletTransactions" },
|
|
"/admin/wallet/transfer-orders": { ns: "wallet", key: "transferOrders" },
|
|
"/admin/wallet/player": { ns: "wallet", key: "playerWalletQuery" },
|
|
"/admin/risk": { ns: "risk", key: "center" },
|
|
"/admin/settings": { ns: "common", key: "nav.settings" },
|
|
"/admin/settings/currencies": { ns: "config", key: "currencies.title" },
|
|
"/admin/currencies": { ns: "config", key: "currencies.title" },
|
|
"/admin/config": { ns: "config", key: "hub.title" },
|
|
"/admin/rules/plays": { ns: "config", key: "nav.rulesPlaysTitle" },
|
|
"/admin/rules/odds": { ns: "config", key: "nav.rulesOddsTitle" },
|
|
"/admin/jackpot": { ns: "jackpot", key: "configTitle" },
|
|
"/admin/risk/cap": { ns: "config", key: "nav.riskCapTitle" },
|
|
"/admin/login": { ns: "auth", key: "title" },
|
|
"/admin/account": { ns: "common", key: "accountSettings" },
|
|
};
|
|
|
|
type RoutePattern = {
|
|
test: (pathname: string) => boolean;
|
|
resolve: (pathname: string) => PageTitleSpec;
|
|
};
|
|
|
|
const ROUTE_PATTERNS: RoutePattern[] = [
|
|
{
|
|
test: (p) => /^\/admin\/players\/\d+$/.test(p),
|
|
resolve: () => ({ ns: "players", key: "detailTitle" }),
|
|
},
|
|
{
|
|
test: (p) => /^\/admin\/draws\/\d+\/finance$/.test(p),
|
|
resolve: () => ({ ns: "draws", key: "subnav.finance" }),
|
|
},
|
|
{
|
|
test: (p) => /^\/admin\/draws\/\d+\/results$/.test(p),
|
|
resolve: () => ({ ns: "draws", key: "subnav.results" }),
|
|
},
|
|
{
|
|
test: (p) => /^\/admin\/draws\/\d+\/review$/.test(p),
|
|
resolve: () => ({ ns: "draws", key: "subnav.review" }),
|
|
},
|
|
{
|
|
test: (p) => /^\/admin\/draws\/\d+\/publish\/\d+$/.test(p),
|
|
resolve: () => ({ ns: "draws", key: "publishTitle" }),
|
|
},
|
|
{
|
|
test: (p) => /^\/admin\/draws\/\d+\/risk\/occupancy$/.test(p) || /^\/admin\/risk\/draws\/\d+\/occupancy$/.test(p),
|
|
resolve: () => ({ ns: "draws", key: "subnav.riskLockLogs" }),
|
|
},
|
|
{
|
|
test: (p) =>
|
|
/^\/admin\/draws\/\d+\/risk\/pools$/.test(p)
|
|
|| /^\/admin\/risk\/draws\/\d+\/pools$/.test(p)
|
|
|| /^\/admin\/draws\/\d+\/risk\/hot$/.test(p)
|
|
|| /^\/admin\/risk\/draws\/\d+\/hot$/.test(p)
|
|
|| /^\/admin\/draws\/\d+\/risk\/sold-out$/.test(p)
|
|
|| /^\/admin\/risk\/draws\/\d+\/sold-out$/.test(p),
|
|
resolve: () => ({ ns: "draws", key: "subnav.riskPools" }),
|
|
},
|
|
{
|
|
test: (p) => /^\/admin\/draws\/\d+\/risk\/pools\/[^/]+$/.test(p) || /^\/admin\/risk\/draws\/\d+\/pools\/[^/]+$/.test(p),
|
|
resolve: (p) => {
|
|
const number = decodeURIComponent(p.split("/").pop() ?? "");
|
|
return { ns: "risk", key: "numberTitle", params: { number } };
|
|
},
|
|
},
|
|
{
|
|
test: (p) => /^\/admin\/draws\/\d+\/risk$/.test(p),
|
|
resolve: () => ({ ns: "risk", key: "title" }),
|
|
},
|
|
{
|
|
test: (p) => /^\/admin\/draws\/\d+$/.test(p),
|
|
resolve: () => ({ ns: "draws", key: "drawDetail" }),
|
|
},
|
|
{
|
|
test: (p) => /^\/admin\/settlement-batches\/\d+\/details$/.test(p),
|
|
resolve: () => ({ ns: "settlement", key: "details" }),
|
|
},
|
|
];
|
|
|
|
/** 根据路径解析浏览器标题用的 i18n 规格。 */
|
|
export function resolveAdminPageTitle(pathname: string): PageTitleSpec | null {
|
|
if (EXACT_ROUTES[pathname]) {
|
|
return EXACT_ROUTES[pathname];
|
|
}
|
|
|
|
for (const pattern of ROUTE_PATTERNS) {
|
|
if (pattern.test(pathname)) {
|
|
return pattern.resolve(pathname);
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|