mirror of
https://github.com/supabase/supabase.git
synced 2026-10-10 20:05:06 +03:00
## Problem The `_Shadcn_` suffix isn't needed anymore on Accordion components ## Solution - Remove the `_Shadcn_` suffix - Simplify UI package exports - Apply prettier <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Refactor** * Updated accordion component exports and imports to use unified naming conventions across the codebase, improving consistency for developers using the UI library. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/supabase/supabase/pull/46107?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
175 lines
4.8 KiB
TypeScript
175 lines
4.8 KiB
TypeScript
'use client'
|
|
|
|
import { ExternalLink } from 'lucide-react'
|
|
import { useState } from 'react'
|
|
import { AccordionContent, AccordionItem, AccordionTrigger, Button } from 'ui'
|
|
|
|
import { RestartProjectDialog } from './RestartProjectDialog'
|
|
import { AiAssistantDropdown } from '@/components/ui/AiAssistantDropdown'
|
|
import { useTrack } from '@/lib/telemetry/track'
|
|
|
|
interface StepTriggerProps {
|
|
number: number
|
|
title: string
|
|
}
|
|
|
|
function StepTrigger({ number, title }: StepTriggerProps) {
|
|
return (
|
|
<AccordionTrigger className="py-3 hover:no-underline">
|
|
<div className="flex items-center gap-2.5">
|
|
<span className="shrink-0 w-6 h-6 border border-button-hover text-foreground font-mono tabular-nums bg-button rounded-md text-xs font-medium flex items-center justify-center">
|
|
{number}
|
|
</span>
|
|
<span className="text-sm font-medium text-foreground text-left">{title}</span>
|
|
</div>
|
|
</AccordionTrigger>
|
|
)
|
|
}
|
|
|
|
interface RestartDatabaseTroubleshootingSectionProps {
|
|
number: number
|
|
errorType: string
|
|
/** Override the restart handler. If not provided, opens the restart dialog internally. */
|
|
onRestartProject?: () => void
|
|
}
|
|
|
|
export function RestartDatabaseTroubleshootingSection({
|
|
number,
|
|
errorType,
|
|
onRestartProject,
|
|
}: RestartDatabaseTroubleshootingSectionProps) {
|
|
const track = useTrack()
|
|
const [showDialog, setShowDialog] = useState(false)
|
|
|
|
const handleClick = () => {
|
|
track('inline_error_troubleshooter_action_clicked', {
|
|
errorType,
|
|
ctaType: 'restart_db',
|
|
})
|
|
if (onRestartProject) {
|
|
onRestartProject()
|
|
} else {
|
|
setShowDialog(true)
|
|
}
|
|
}
|
|
|
|
return (
|
|
<>
|
|
<AccordionItem
|
|
value={`step-${number}`}
|
|
className="border-b border-default last:border-b-0 px-3 py-2"
|
|
>
|
|
<StepTrigger number={number} title="Try restarting your project" />
|
|
<AccordionContent className="pt-1">
|
|
<div className="px-2">
|
|
<p className="text-sm text-foreground-light mb-3">
|
|
Restarting your project can help resolve timeout errors or stale connections.
|
|
</p>
|
|
<Button type="default" size="tiny" onClick={handleClick}>
|
|
Restart project
|
|
</Button>
|
|
</div>
|
|
</AccordionContent>
|
|
</AccordionItem>
|
|
|
|
<RestartProjectDialog
|
|
visible={showDialog}
|
|
onClose={() => setShowDialog(false)}
|
|
restartType="database"
|
|
/>
|
|
</>
|
|
)
|
|
}
|
|
|
|
interface TroubleshootingGuideSectionProps {
|
|
number: number
|
|
errorType: string
|
|
href: string
|
|
title?: string
|
|
description?: string
|
|
}
|
|
|
|
export function TroubleshootingGuideSection({
|
|
number,
|
|
errorType,
|
|
href,
|
|
title = 'Try our troubleshooting guide',
|
|
description,
|
|
}: TroubleshootingGuideSectionProps) {
|
|
const track = useTrack()
|
|
|
|
return (
|
|
<AccordionItem
|
|
value={`step-${number}`}
|
|
className="border-b border-default last:border-b-0 px-3 py-2"
|
|
>
|
|
<StepTrigger number={number} title={title} />
|
|
<AccordionContent className="pt-1">
|
|
<div className="px-2">
|
|
{description && <p className="text-sm text-foreground-light mb-3">{description}</p>}
|
|
<Button
|
|
asChild
|
|
type="default"
|
|
size="tiny"
|
|
onClick={() =>
|
|
track('inline_error_troubleshooter_action_clicked', {
|
|
errorType,
|
|
ctaType: 'troubleshooting_guide',
|
|
})
|
|
}
|
|
iconRight={<ExternalLink />}
|
|
>
|
|
<a href={href} target="_blank" rel="noopener noreferrer">
|
|
View troubleshooting guide
|
|
</a>
|
|
</Button>
|
|
</div>
|
|
</AccordionContent>
|
|
</AccordionItem>
|
|
)
|
|
}
|
|
|
|
interface FixWithAITroubleshootingSectionProps {
|
|
number: number
|
|
errorType: string
|
|
description?: string
|
|
onDebugWithAI?: (prompt: string) => void
|
|
buildPrompt: () => string
|
|
}
|
|
|
|
export function FixWithAITroubleshootingSection({
|
|
number,
|
|
errorType,
|
|
description = 'Let our AI assistant help diagnose and suggest solutions.',
|
|
onDebugWithAI,
|
|
buildPrompt,
|
|
}: FixWithAITroubleshootingSectionProps) {
|
|
const track = useTrack()
|
|
|
|
return (
|
|
<AccordionItem
|
|
value={`step-${number}`}
|
|
className="border-b border-default last:border-b-0 px-3 py-2"
|
|
>
|
|
<StepTrigger number={number} title="Debug with AI" />
|
|
<AccordionContent className="pt-1">
|
|
<div className="px-2">
|
|
<p className="text-sm text-foreground-light mb-3">{description}</p>
|
|
<AiAssistantDropdown
|
|
label="Debug with AI"
|
|
buildPrompt={buildPrompt}
|
|
onOpenAssistant={() => {
|
|
track('inline_error_troubleshooter_action_clicked', {
|
|
errorType,
|
|
ctaType: 'ask_ai',
|
|
})
|
|
onDebugWithAI?.(buildPrompt())
|
|
}}
|
|
size="tiny"
|
|
/>
|
|
</div>
|
|
</AccordionContent>
|
|
</AccordionItem>
|
|
)
|
|
}
|