mirror of
https://github.com/supabase/supabase.git
synced 2026-10-06 09:55:06 +03:00
## Summary * Adds the client query layer for `/api/status-page` (`statusPageQueryOptions` in `data/platform/status-page-query.ts`) and a shared normalization module (`lib/status-page/status-page.utils.ts`) that maps the endpoint response into region- and project-creation-aware `StatusItem`s — later PRs in this stack (assistant tool, project-creation admonition, global banner) build on this same module. * Wires the support form's status pill and incident admonition to the new data behind the `incidentIoStatusPage` ConfigCat flag. `useSupportStatus` branches between the new endpoint and the existing `useIncidentStatusQuery`/`processIncidentData` path, both mapped to the same `SupportStatus` shape. * `IncidentAdmonition` becomes purely presentational; the status link now points at the `pageUrl` returned by the endpoint instead of a hardcoded URL. Part of [FE-4057](https://linear.app/supabase/issue/FE-4057/frontend-bannerbot-reconfigured) — see Linear for full design context. ## Test plan - [X] `pnpm --filter studio run typecheck` - [X] `pnpm --filter studio run lint:ratchet` - [X] `pnpm knip --workspace apps/studio` - [X] `pnpm test:prettier` - [X] `pnpm --filter studio exec vitest run` (touched files) — 70 tests passing, including a flag-on case for `SupportFormPage` <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Support pages now display current incident and maintenance information, including relevant status descriptions and links to the status page. * Status details can reflect items affecting a user’s region or project-creation services. Upcoming maintenance is excluded from active alerts. * **Bug Fixes** * Status labels and alerts now account for loading, errors, incidents, and maintenance consistently across support pages. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
49 lines
1.2 KiB
TypeScript
49 lines
1.2 KiB
TypeScript
import { AnimatePresence, motion } from 'framer-motion'
|
|
import { ExternalLink } from 'lucide-react'
|
|
import Link from 'next/link'
|
|
import { Button } from 'ui'
|
|
import { Admonition } from 'ui-patterns/Admonition'
|
|
|
|
interface IncidentAdmonitionProps {
|
|
isActive: boolean
|
|
title: string
|
|
description: string
|
|
statusPageUrl: string
|
|
className?: string
|
|
}
|
|
|
|
export function IncidentAdmonition({
|
|
isActive,
|
|
title,
|
|
description,
|
|
statusPageUrl,
|
|
className,
|
|
}: IncidentAdmonitionProps) {
|
|
return (
|
|
<AnimatePresence>
|
|
{isActive && (
|
|
<motion.aside
|
|
initial={{ height: 0, opacity: 0 }}
|
|
animate={{ height: 'auto', opacity: 1 }}
|
|
exit={{ height: 0, opacity: 0 }}
|
|
>
|
|
<Admonition
|
|
type="warning"
|
|
layout="horizontal"
|
|
className={className}
|
|
title={title}
|
|
description={description}
|
|
actions={
|
|
<Button asChild icon={<ExternalLink strokeWidth={1.5} />}>
|
|
<Link href={statusPageUrl} target="_blank" rel="noreferrer">
|
|
Status page
|
|
</Link>
|
|
</Button>
|
|
}
|
|
/>
|
|
</motion.aside>
|
|
)}
|
|
</AnimatePresence>
|
|
)
|
|
}
|