35 lines
1.0 KiB
TypeScript
35 lines
1.0 KiB
TypeScript
"use client";
|
|
|
|
import { useEffect } from "react";
|
|
import { isEmbedded, listenFromParent } from "@/lib/iframe-bridge";
|
|
import { useAuthStore } from "@/stores/auth-store";
|
|
import { useConfig } from "@/hooks/use-config";
|
|
|
|
export function EmbeddedBridgeProvider({ children }: { children: React.ReactNode }) {
|
|
const { parentOrigin, embeddedMode } = useConfig();
|
|
const logout = useAuthStore((s) => s.logout);
|
|
|
|
useEffect(() => {
|
|
if (!embeddedMode || !isEmbedded()) return;
|
|
|
|
const unsubscribe = listenFromParent((msg) => {
|
|
switch (msg.type) {
|
|
case "sso:trigger-login": {
|
|
// Navigate to login page to start SSO flow
|
|
const segments = window.location.pathname.split("/").filter(Boolean);
|
|
const locale = segments[0] || "en";
|
|
window.location.href = `/${locale}/login`;
|
|
break;
|
|
}
|
|
case "sso:trigger-logout":
|
|
logout();
|
|
break;
|
|
}
|
|
}, parentOrigin || undefined);
|
|
|
|
return unsubscribe;
|
|
}, [embeddedMode, parentOrigin, logout]);
|
|
|
|
return <>{children}</>;
|
|
}
|