import { useParams } from 'common' import dayjs from 'dayjs' import relativeTime from 'dayjs/plugin/relativeTime' import { Clock } from 'lucide-react' import { useState } from 'react' import { HoverCard, HoverCardContent, HoverCardTrigger } from 'ui' import { TimestampInfo } from 'ui-patterns' import { PageHeader, PageHeaderAside, PageHeaderDescription, PageHeaderMeta, PageHeaderSummary, PageHeaderTitle, } from 'ui-patterns/PageHeader' import { EDGE_FUNCTION_CHART_INTERVALS, formatShortFromNow } from './EdgeFunctionOverview.utils' import CopyButton from '@/components/ui/CopyButton' import { ChartIntervalDropdown } from '@/components/ui/Logs/ChartIntervalDropdown' import { ShortcutTooltip } from '@/components/ui/ShortcutTooltip' import { useProjectApiUrl } from '@/data/config/project-endpoint-query' import { useEdgeFunctionQuery } from '@/data/edge-functions/edge-function-query' import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' import { SHORTCUT_IDS } from '@/state/shortcuts/registry' dayjs.extend(relativeTime) interface EdgeFunctionOverviewHeaderProps { interval: string onIntervalChange: (interval: string) => void showIntervalDropdown?: boolean onIntervalDropdownOpenChange?: (open: boolean) => void } export const EdgeFunctionOverviewHeader = ({ interval, onIntervalChange, showIntervalDropdown, onIntervalDropdownOpenChange, }: EdgeFunctionOverviewHeaderProps) => { const { ref: projectRef, functionSlug } = useParams() const [isTimestampHoverCardOpen, setIsTimestampHoverCardOpen] = useState(false) const { data: organization } = useSelectedOrganizationQuery() const { data: selectedFunction } = useEdgeFunctionQuery({ projectRef, slug: functionSlug, }) const { data: endpoint } = useProjectApiUrl({ projectRef }) const name = selectedFunction?.name || '' const functionUrl = endpoint && selectedFunction?.slug ? `${endpoint}/functions/v1/${selectedFunction.slug}` : '' const createdRelative = selectedFunction?.created_at ? dayjs(selectedFunction.created_at).fromNow() : undefined const updatedRelative = selectedFunction?.updated_at ? dayjs(selectedFunction.updated_at).fromNow() : undefined const updatedShortRelative = selectedFunction?.updated_at ? formatShortFromNow(selectedFunction.updated_at) : undefined return ( {name || functionSlug} {functionUrl ? (
{functionUrl}
) : null} {createdRelative && (

Created

{!!selectedFunction && ( )}
)} {updatedRelative && (

Last deployed

{!!selectedFunction && ( )}
)} {selectedFunction?.version !== undefined && (

Deployments

{selectedFunction.version}

)}
) }