fix:iframe切换颜色
This commit is contained in:
1 parent
5436719bfb
commit
59f2f56124
3 files changed
+32
-3
No files matched your search
@@ -61,7 +61,10 @@ function AppProviders({ children }: { children: React.ReactNode }) {
|
|||||||
// 走 next-themes forcedTheme(不写 localStorage)→ 同浏览器另开的正常系统页不受影响。
|
// 走 next-themes forcedTheme(不写 localStorage)→ 同浏览器另开的正常系统页不受影响。
|
||||||
const embedTheme = resolveForcedEmbedTheme(location.search);
|
const embedTheme = resolveForcedEmbedTheme(location.search);
|
||||||
if (embedTheme) return embedTheme;
|
if (embedTheme) return embedTheme;
|
||||||
const routeTheme = resolveForcedThemeForPath(location.pathname);
|
const routeTheme = resolveForcedThemeForPath(
|
||||||
|
location.pathname,
|
||||||
|
location.search,
|
||||||
|
);
|
||||||
if (routeTheme) return routeTheme;
|
if (routeTheme) return routeTheme;
|
||||||
if (location.pathname === "/embed/roundtable") {
|
if (location.pathname === "/embed/roundtable") {
|
||||||
const wp = readWujieProps();
|
const wp = readWujieProps();
|
||||||
|
|||||||
@@ -31,3 +31,20 @@ test("forces light theme for landing and chats_iframe routes only", () => {
|
|||||||
);
|
);
|
||||||
assert.equal(resolveForcedThemeForPath("/page/workspace/chats/new"), undefined);
|
assert.equal(resolveForcedThemeForPath("/page/workspace/chats/new"), undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("honors the dark-blue theme query on chats_iframe routes", () => {
|
||||||
|
assert.equal(
|
||||||
|
resolveForcedThemeForPath(
|
||||||
|
"/page/workspace/chats_iframe/new",
|
||||||
|
"?from=iframe&theme=dark-blue",
|
||||||
|
),
|
||||||
|
"dark",
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
resolveForcedThemeForPath(
|
||||||
|
"/page/workspace/chats_iframe/new",
|
||||||
|
"?from=iframe&theme=red",
|
||||||
|
),
|
||||||
|
"light",
|
||||||
|
);
|
||||||
|
});
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import { resolveEmbedThemeMode } from "@/core/embed/embed-session";
|
||||||
|
|
||||||
export function isChatsIframeWorkspacePath(pathname: string): boolean {
|
export function isChatsIframeWorkspacePath(pathname: string): boolean {
|
||||||
return (
|
return (
|
||||||
pathname === "/page/workspace/chats_iframe/new" ||
|
pathname === "/page/workspace/chats_iframe/new" ||
|
||||||
@@ -7,10 +9,17 @@ export function isChatsIframeWorkspacePath(pathname: string): boolean {
|
|||||||
|
|
||||||
export function resolveForcedThemeForPath(
|
export function resolveForcedThemeForPath(
|
||||||
pathname: string,
|
pathname: string,
|
||||||
): "light" | undefined {
|
search = "",
|
||||||
if (pathname === "/landing" || isChatsIframeWorkspacePath(pathname)) {
|
): "light" | "dark" | undefined {
|
||||||
|
if (pathname === "/landing") {
|
||||||
return "light";
|
return "light";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isChatsIframeWorkspacePath(pathname)) {
|
||||||
|
const normalizedSearch = search.startsWith("?") ? search : `?${search}`;
|
||||||
|
const rawTheme = new URLSearchParams(normalizedSearch).get("theme")?.trim();
|
||||||
|
return rawTheme ? resolveEmbedThemeMode(rawTheme) : "light";
|
||||||
|
}
|
||||||
|
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user