Path: blob/main/components/dashboard/src/hooks/use-orbital.ts
2500 views
/**1* Copyright (c) 2023 Gitpod GmbH. All rights reserved.2* Licensed under the GNU Affero General Public License (AGPL).3* See License.AGPL.txt in the project root for license information.4*/56import { useEffect, useState } from "react";7import type { orbital } from "@useorbital/client-types/types";8import { useFeatureFlag } from "../data/featureflag-query";9import { isGitpodIo } from "../utils";1011declare global {12interface Window {13orbital: orbital;14}15}1617export const useOrbital = (spaceId: string) => {18const [isLoaded, setIsLoaded] = useState<boolean>(false);19const [discoveryIds, setDiscoveryIds] = useState<Set<string>>(new Set());2021const enabledOrbitalDiscoveries = useFeatureFlag("enabledOrbitalDiscoveries");2223useEffect(() => {24if (!isGitpodIo()) return;25if (document.getElementById("orbital-client")) return;26if (discoveryIds.size === 0) return;2728const body = document.getElementsByTagName("body")[0];2930const installationScript = document.createElement("script");31installationScript.innerHTML = `(function(o,r,b,i,t,a,l){o[r]||(t=o[r]=function(){i.push(arguments)},t._t=new Date,t._v=1,i=t._q=[])})(window,'orbital');`;32body.appendChild(installationScript);3334const orbitalScript = document.createElement("script");35orbitalScript.setAttribute("id", "orbital-client");36orbitalScript.setAttribute("src", `https://client.useorbital.com/api/account/${spaceId}/client.js`);37orbitalScript.setAttribute("async", "");38body.appendChild(orbitalScript);39orbitalScript.addEventListener(40"load",41() => {42if (typeof window["orbital"] === "undefined") {43console.error("Orbital script failed to load.");44return;45}46setIsLoaded(true);47},48{ once: true, capture: false },49);50}, [discoveryIds.size, spaceId]);5152useEffect(() => {53if (!enabledOrbitalDiscoveries || enabledOrbitalDiscoveries === true) return;54setDiscoveryIds(new Set(enabledOrbitalDiscoveries.split(",").filter((value) => !!value)));55}, [enabledOrbitalDiscoveries]);5657return {58isLoaded,59discoveryIds,60orbital: window["orbital"],61};62};636465