import { Overlay } from "../Overlay/Overlay"; import { Dropdown, Tabs } from "antd"; import { useConfigApi } from "../../lib/useApi"; import { useQuery } from "@tanstack/react-query"; import { StreamConfig } from "../../lib/schema"; import { LoadingAnimation } from "../GlobalLoader/GlobalLoader"; import { ErrorCard } from "../GlobalError/GlobalError"; import { Center } from "../Center/Center"; import { HtmlManual } from "./Html"; import { ReactManual } from "./React"; import { ButtonLabel } from "../ButtonLabel/ButtonLabel"; import { FiMonitor } from "react-icons/fi"; import { FaGlobe, FaNodeJs, FaReact } from "react-icons/fa"; import { NPMManual } from "./NPMPackage"; import { Other } from "./Other"; import { useAppConfig } from "../../lib/context"; import { ReactNode, useState } from "react"; import { HiSelector } from "react-icons/hi"; import { HTTPManual } from "./HTTPApi"; import { Plug } from "lucide-react"; import { useQueryStringState } from "../../lib/useQueryStringState"; import { useConfigObjectList } from "../../lib/store"; function SegmentLogo() { return ( ); } export const DomainSelector: React.FC<{ domains: string[]; domain: string; onChange: (domain: string) => void; }> = props => { const [dropdownOpen, setDropdownOpen] = useState(false); return (
{props.domain} (
{props.domains.map(d => (
{ props.onChange(d); setDropdownOpen(false); }} >
{d === props.domain ? "→" : " "}
{d}
))}
)} >
setDropdownOpen(!dropdownOpen)}>
); }; export const TrackingIntegrationDocumentation: React.FC<{ streamId: string; onCancel: () => void }> = ({ streamId, onCancel, }) => { const ds = useConfigObjectList("domain"); const staticDomains = ds.filter(d => !d.name.includes("*")).map(d => d.name); const appConfig = useAppConfig(); const configApi = useConfigApi("stream"); const [selectedDomain, setSelectedDomain] = useState(); const { data: stream, isLoading, error, } = useQuery(["stream", streamId], () => configApi.get(streamId), { cacheTime: 0, retry: false }); const [framework, setFramework] = useQueryStringState("framework", { defaultValue: "html", parser: v => v, serializer: v => v, }); let domains: string[] = []; let protocol = appConfig.publicEndpoints.protocol; if (appConfig.publicEndpoints.ingestUrl) { //extract host and port try { const url = new URL(appConfig.publicEndpoints.ingestUrl); const host = url.host; protocol = url.protocol === "https:" ? "https" : "http"; domains.push(host); } catch (e) { console.error("Can't parse ingest URL", appConfig.publicEndpoints.ingestUrl); } } else { domains = stream ? appConfig.publicEndpoints.dataHost ? [ ...new Set([...staticDomains, ...(stream?.domains ?? [])]), `${stream.id}.${appConfig.publicEndpoints.dataHost}`, ] : ["{deploy domain}"] : []; } const writeKey = appConfig.publicEndpoints.dataHost ? undefined : stream?.publicKeys?.[0] ? `${stream.publicKeys[0].id}:${stream.publicKeys[0].hint}` : streamId || "{write-key}"; const serverWriteKey = stream?.privateKeys?.[0] ? `${stream.privateKeys[0].id}:${stream.privateKeys[0].hint}` : "{server-write-key}"; const displayDomain = `${protocol}://${selectedDomain ?? domains?.[0]}`; const wrap = (r: ReactNode) => { return (
{(appConfig.ee.available || appConfig.publicEndpoints.dataHost) && ( )}
{r}
); }; return ( <>
<> {isLoading && (
)} {error && (
)} {stream && ( }> HTML ), key: "html", children: wrap(), }, { label: ( }> React ), key: "react", children: wrap(), }, { label: ( }> NPM Package ), key: "js", children: wrap(), }, { label: ( }> HTTP API ), key: "http", children: wrap(), }, { label: ( }> Apps & Others ), key: "other", children: wrap(), }, ]} /> )}
); };