Files
supabase/apps/studio/components/layouts/DatabaseLayout/DatabaseTriggersLayout.tsx
T
Danny WhiteandJoshen Lim 0972d61db5 feat(studio): page titles for project surfaces (#43534)
Stacked PR 2/5 for page title improvements. Includes Auth, Database,
editors, and Edge Functions layout title adoption.

_Base:
[dnywh/feat/page-titles](https://github.com/supabase/supabase/pull/43538)_

---

## What kind of change does this PR introduce?

- Resolves FE-1960
- Resolves FE-1983
- Resolves DEPR-207

## What is the current behavior?

Page titles between surfaces are inconsistent and vague. Sometimes they
say the product name:

```
My Project | My Org | Supabase
```

...even when on a specific surface like Database > Tables.

Other times they show the entity name but skip over the project or org
name :

```
Edge Functions | Supabase
```

## What is the new behavior?

Auth, Database, editors, and Edge Functions adopt the layout title
format introduced in https://github.com/supabase/supabase/pull/43538:

```
users | Table Editor | My Project | My Org | Supabase
hello-world | Logs | Edge Functions | My Project | My Org | Supabase
Backups | Database | My Project | My Org | Supabase
Authentication | My Project | My Org | Supabase
```

That format is:

entity, section, surface, project, org, brand

## Additional context

Related stacked PRs also based on the the original
[dnywh/feat/page-titles](https://github.com/supabase/supabase/pull/43538)
branch:

- https://github.com/supabase/supabase/pull/43535
- https://github.com/supabase/supabase/pull/43536
- https://github.com/supabase/supabase/pull/43537

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2026-03-11 12:38:02 +11:00

47 lines
1.4 KiB
TypeScript

import { PermissionAction } from '@supabase/shared-types/out/constants'
import { useParams } from 'common'
import { PageLayout } from 'components/layouts/PageLayout/PageLayout'
import NoPermission from 'components/ui/NoPermission'
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
import { PropsWithChildren } from 'react'
import DatabaseLayout from './DatabaseLayout'
type DatabaseTriggersLayoutProps = PropsWithChildren
export const DatabaseTriggersLayout = ({ children }: DatabaseTriggersLayoutProps) => {
const { ref } = useParams()
const { can: canReadTriggers, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
PermissionAction.TENANT_SQL_ADMIN_READ,
'triggers'
)
const navigationItems = [
{
label: 'Data',
href: `/project/${ref}/database/triggers/data`,
},
{
label: 'Event',
href: `/project/${ref}/database/triggers/event`,
},
]
return (
<DatabaseLayout title="Triggers">
{isPermissionsLoaded && !canReadTriggers ? (
<NoPermission isFullPage resourceText="view database triggers" />
) : (
<PageLayout
title="Database Triggers"
subtitle="Execute actions automatically when database events occur"
navigationItems={navigationItems}
size="large"
>
{children}
</PageLayout>
)}
</DatabaseLayout>
)
}