From c86f4c12b7199b4ef6c01d6e337ea84989372caa Mon Sep 17 00:00:00 2001 From: dswbx Date: Wed, 18 Jun 2025 07:56:58 +0200 Subject: [PATCH] admin: add options such as logo return path when served static --- app/src/modules/server/AdminController.tsx | 11 +++++++++-- app/src/ui/Admin.tsx | 8 ++++++-- app/src/ui/client/BkndProvider.tsx | 2 +- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/src/modules/server/AdminController.tsx b/app/src/modules/server/AdminController.tsx index 6dd39e7..aa109ee 100644 --- a/app/src/modules/server/AdminController.tsx +++ b/app/src/modules/server/AdminController.tsx @@ -16,6 +16,8 @@ export type AdminBkndWindowContext = { user?: TApiUser; logout_route: string; admin_basepath: string; + logo_return_path?: string; + theme?: "dark" | "light" | "system"; }; // @todo: add migration to remove admin path from config @@ -26,6 +28,8 @@ export type AdminControllerOptions = { html?: string; forceDev?: boolean | { mainPath: string }; debugRerenders?: boolean; + theme?: "dark" | "light" | "system"; + logoReturnPath?: string; }; export class AdminController extends Controller { @@ -46,6 +50,8 @@ export class AdminController extends Controller { basepath: this._options.basepath ?? "/", adminBasepath: this._options.adminBasepath ?? "", assetsPath: this._options.assetsPath ?? config.server.assets_path, + theme: this._options.theme ?? "system", + logo_return_path: this._options.logoReturnPath ?? "/", }; } @@ -108,10 +114,12 @@ export class AdminController extends Controller { }, }), async (c) => { - const obj = { + const obj: AdminBkndWindowContext = { user: c.get("auth")?.user, logout_route: authRoutes.logout, admin_basepath: this.options.adminBasepath, + theme: this.options.theme, + logo_return_path: this.options.logoReturnPath, }; const html = await this.getHtml(obj); if (!html) { @@ -172,7 +180,6 @@ export class AdminController extends Controller { return this.options.html as string; } - const configs = this.app.modules.configs(); const isProd = !isDebug() && !this.options.forceDev; const mainPath = typeof this.options.forceDev === "object" && "mainPath" in this.options.forceDev diff --git a/app/src/ui/Admin.tsx b/app/src/ui/Admin.tsx index 1c73a58..86b4e8e 100644 --- a/app/src/ui/Admin.tsx +++ b/app/src/ui/Admin.tsx @@ -5,7 +5,7 @@ import { BkndProvider, type BkndAdminOptions } from "ui/client/bknd"; import { useTheme } from "ui/client/use-theme"; import { Logo } from "ui/components/display/Logo"; import * as AppShell from "ui/layouts/AppShell/AppShell"; -import { ClientProvider, type ClientProviderProps } from "./client"; +import { ClientProvider, useBkndWindowContext, type ClientProviderProps } from "./client"; import { createMantineTheme } from "./lib/mantine/theme"; import { Routes } from "./routes"; @@ -18,7 +18,7 @@ export type BkndAdminProps = { export default function Admin({ baseUrl: baseUrlOverride, withProvider = false, - config, + config: _config = {}, }: BkndAdminProps) { const { theme } = useTheme(); const Provider = ({ children }: any) => @@ -32,6 +32,10 @@ export default function Admin({ ) : ( children ); + const config = { + ..._config, + ...useBkndWindowContext(), + }; const BkndWrapper = ({ children }: { children: ReactNode }) => ( }> diff --git a/app/src/ui/client/BkndProvider.tsx b/app/src/ui/client/BkndProvider.tsx index 15672c8..4e938d1 100644 --- a/app/src/ui/client/BkndProvider.tsx +++ b/app/src/ui/client/BkndProvider.tsx @@ -9,8 +9,8 @@ import { Message } from "ui/components/display/Message"; import { useNavigate } from "ui/lib/routes"; export type BkndAdminOptions = { - logo_return_path?: string; basepath?: string; + logo_return_path?: string; theme?: AppTheme; }; type BkndContext = {