36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
"use client";
|
|
|
|
import { useEffect } from "react";
|
|
import { isEmbedded, listenFromParent } from "@/lib/iframe-bridge";
|
|
import { getPathPrefix, getLocaleFromPath } from "@/lib/browser-navigation";
|
|
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 prefix = getPathPrefix();
|
|
const locale = getLocaleFromPath();
|
|
window.location.href = `${prefix}/${locale}/login`;
|
|
break;
|
|
}
|
|
case "sso:trigger-logout":
|
|
logout();
|
|
break;
|
|
}
|
|
}, parentOrigin || undefined);
|
|
|
|
return unsubscribe;
|
|
}, [embeddedMode, parentOrigin, logout]);
|
|
|
|
return <>{children}</>;
|
|
}
|