import { SupportCategories } from '@supabase/shared-types/out/constants' import { SupportLink } from 'components/interfaces/Support/SupportLink' import { PropsWithChildren, useEffect, useRef } from 'react' import { Admonition } from 'ui-patterns/admonition' import { Button } from 'ui' import { useTrack } from 'lib/telemetry/track' export interface AlertErrorProps { projectRef?: string subject?: string error?: { message: string } | null layout?: 'vertical' | 'horizontal' className?: string showIcon?: boolean additionalActions?: React.ReactNode } const ContactSupportButton = ({ projectRef, subject, error, }: { projectRef?: string subject?: string error?: { message: string } | null }) => { return ( Contact support ) } // [Joshen] To standardize the language for all error UIs export const AlertError = ({ projectRef, subject, error, className, showIcon = true, layout = 'horizontal', children, additionalActions, }: PropsWithChildren) => { const track = useTrack() const hasTrackedRef = useRef(false) const formattedErrorMessage = error?.message?.includes('503') ? '503 Service Temporarily Unavailable' : error?.message useEffect(() => { if (!hasTrackedRef.current) { hasTrackedRef.current = true if (Math.random() < 0.1) { track('dashboard_error_created', { source: 'admonition', }) } } }, [track]) return ( {error?.message && Error: {formattedErrorMessage}} Try refreshing your browser. If the issue persists for more than a few minutes, please reach out to us via support. {children} > } actions={ additionalActions ? ( <> {additionalActions} > ) : ( ) } className={className} /> ) } export default AlertError
Error: {formattedErrorMessage}
Try refreshing your browser. If the issue persists for more than a few minutes, please reach out to us via support.