forked from langfuse/langfuse-docs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathToAppButton.tsx
More file actions
117 lines (110 loc) · 3.28 KB
/
ToAppButton.tsx
File metadata and controls
117 lines (110 loc) · 3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import Link from "next/link";
import { Button } from "./ui/button";
import { useState, useEffect } from "react";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from "./ui/dropdown-menu";
const continentHostMapping = {
AF: "https://cloud.langfuse.com", // Africa
AN: "https://cloud.langfuse.com", // Antarctica
AS: "https://cloud.langfuse.com", // Asia
EU: "https://cloud.langfuse.com", // Europe
NA: "https://us.cloud.langfuse.com", // North America
OC: "https://cloud.langfuse.com", // Oceania
SA: "https://us.cloud.langfuse.com", // South America
};
export const ToAppButton = () => {
const [signedInUS, setSignedInUS] = useState(false);
const [signedInEU, setSignedInEU] = useState(false);
const [continentCode, setContinentCode] = useState<string | null>(null);
useEffect(() => {
if (process.env.NODE_ENV === "production") {
fetch("https://us.cloud.langfuse.com/api/auth/session", {
credentials: "include",
mode: "cors",
})
.then((us) => us.json())
.then((usData) => {
setSignedInUS(isSignedIn(usData));
})
.catch(() => {
setSignedInUS(false);
});
fetch("https://cloud.langfuse.com/api/auth/session", {
credentials: "include",
mode: "cors",
})
.then((eu) => eu.json())
.then((euData) => {
setSignedInEU(isSignedIn(euData));
})
.catch(() => {
setSignedInEU(false);
});
fetch("/api/get-continent-code")
.then((response) => response.json())
.then((data) => {
if (data.continentCode && continentHostMapping[data.continentCode]) {
setContinentCode(data.continentCode);
}
})
.catch(() => {
setContinentCode(null);
});
}
}, []);
if (signedInUS && signedInEU) {
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button size="xs" className="whitespace-nowrap w-[70px]">
To App
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem asChild key="us">
<Link href="https://us.cloud.langfuse.com">US region</Link>
</DropdownMenuItem>
<DropdownMenuItem asChild key="eu">
<Link href="https://cloud.langfuse.com">EU region</Link>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
} else if (signedInUS || signedInEU) {
return (
<Button size="xs" asChild className="whitespace-nowrap w-[70px]">
<Link
href={
signedInUS
? "https://us.cloud.langfuse.com"
: "https://cloud.langfuse.com"
}
>
To App
</Link>
</Button>
);
} else {
return (
<Button size="xs" asChild className="whitespace-nowrap w-[70px]">
<Link
href={
continentCode
? continentHostMapping[continentCode]
: "https://cloud.langfuse.com"
}
>
Sign Up
</Link>
</Button>
);
}
};
const isSignedIn = (session: Record<string, unknown>) => {
// check if session is object and has key "user", get typing right
return session && "user" in session;
};