import { createContext, useContext, useState } from "react"; import { useAppOrigin } from "~/hooks/useAppOrigin"; import { useProject } from "~/hooks/useProject"; import { useTriggerCliTag } from "~/hooks/useTriggerCliTag"; import { ClientTabs, ClientTabsContent, ClientTabsList, ClientTabsTrigger, } from "./primitives/ClientTabs"; import { ClipboardField } from "./primitives/ClipboardField"; import { Header3 } from "./primitives/Headers"; type PackageManagerContextType = { activePackageManager: string; setActivePackageManager: (value: string) => void; }; const PackageManagerContext = createContext(undefined); export function PackageManagerProvider({ children }: { children: React.ReactNode }) { const [activePackageManager, setActivePackageManager] = useState("npm"); return ( {children} ); } function usePackageManager() { const context = useContext(PackageManagerContext); if (context === undefined) { throw new Error("usePackageManager must be used within a PackageManagerProvider"); } return context; } function getApiUrlArg() { const appOrigin = useAppOrigin(); let apiUrl: string | undefined = undefined; switch (appOrigin) { case "https://cloud.trigger.dev": // don't display the arg, use the CLI default break; case "https://test-cloud.trigger.dev": apiUrl = "https://test-api.trigger.dev"; break; case "https://internal.trigger.dev": apiUrl = "https://internal-api.trigger.dev"; break; default: apiUrl = appOrigin; break; } return apiUrl ? `-a ${apiUrl}` : undefined; } // Add title prop to the component interfaces type TabsProps = { title?: string; }; export function InitCommandV3({ title }: TabsProps) { const project = useProject(); const projectRef = project.externalRef; const apiUrlArg = getApiUrlArg(); const triggerCliTag = useTriggerCliTag(); const initCommandParts = [`trigger.dev@${triggerCliTag}`, "init", `-p ${projectRef}`, apiUrlArg]; const initCommand = initCommandParts.filter(Boolean).join(" "); const { activePackageManager, setActivePackageManager } = usePackageManager(); return (
{title && {title}} npm pnpm yarn
); } export function TriggerDevStepV3({ title }: TabsProps) { const triggerCliTag = useTriggerCliTag(); const { activePackageManager, setActivePackageManager } = usePackageManager(); return (
{title && {title}} npm pnpm yarn
); } export function TriggerLoginStepV3({ title }: TabsProps) { const triggerCliTag = useTriggerCliTag(); const { activePackageManager, setActivePackageManager } = usePackageManager(); return (
{title && {title}} npm pnpm yarn
); } export function TriggerDeployStep({ title, environment, }: TabsProps & { environment: { type: string } }) { const triggerCliTag = useTriggerCliTag(); const { activePackageManager, setActivePackageManager } = usePackageManager(); // Generate the environment flag based on environment type const getEnvironmentFlag = () => { switch (environment.type) { case "STAGING": return " --env staging"; case "PREVIEW": return " --env preview"; case "PRODUCTION": default: return ""; } }; const environmentFlag = getEnvironmentFlag(); return (
{title && {title}} npm pnpm yarn
); }