'use client' import * as React from 'react' import { cn } from '@/lib/utils' import { buttonVariants } from '@/components/ui/button' import { IconGitHub, IconNotice } from '@/components/ui/icons' import Link from 'next/link' import { useHealth } from '@/lib/hooks/use-health' import { ReleaseInfo, useLatestRelease } from '@/lib/hooks/use-latest-release' import { compare } from 'compare-versions' import { useWorkers } from '@/lib/hooks/use-workers' import { WorkerKind } from '@/lib/gql/generates/graphql' import { has } from 'lodash-es' import { ThemeToggle } from './theme-toggle' export function Header() { const { data } = useHealth() const workers = useWorkers(data) const isChatEnabled = has(workers, WorkerKind.Chat) const version = data?.version?.git_describe const { data: latestRelease } = useLatestRelease() const newVersionAvailable = isNewVersionAvailable(version, latestRelease) return (
Dashboard {isChatEnabled && ( Playground )}
{newVersionAvailable && ( New version ({latestRelease?.name}) available )} GitHub
) } function isNewVersionAvailable(version?: string, latestRelease?: ReleaseInfo) { try { return version && latestRelease && compare(latestRelease.name, version, '>') } catch (err) { // Handle invalid semver console.warn(err) return true } }