mirror of
https://github.com/supabase/supabase.git
synced 2026-05-10 19:00:05 -04:00
4a0bb36ca8
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Ivan Vasilov <vasilov.ivan@gmail.com>
86 lines
2.4 KiB
TypeScript
86 lines
2.4 KiB
TypeScript
import { IS_PLATFORM, useParams } from 'common'
|
|
import Link from 'next/link'
|
|
import { usePathname } from 'next/navigation'
|
|
import { PropsWithChildren } from 'react'
|
|
import { NavMenu, NavMenuItem } from 'ui'
|
|
import {
|
|
PageHeader,
|
|
PageHeaderAside,
|
|
PageHeaderDescription,
|
|
PageHeaderMeta,
|
|
PageHeaderNavigationTabs,
|
|
PageHeaderSummary,
|
|
PageHeaderTitle,
|
|
} from 'ui-patterns/PageHeader'
|
|
|
|
import { BUCKET_TYPES } from '@/components/interfaces/Storage/Storage.constants'
|
|
import { useStorageV2Page } from '@/components/interfaces/Storage/Storage.utils'
|
|
import { DocsButton } from '@/components/ui/DocsButton'
|
|
|
|
export const StorageBucketsLayout = ({
|
|
title,
|
|
hideSubtitle = false,
|
|
children,
|
|
}: PropsWithChildren<{ title?: string; hideSubtitle?: boolean }>) => {
|
|
const { ref } = useParams()
|
|
const pathname = usePathname()
|
|
const page = useStorageV2Page()
|
|
const config = !!page && page !== 's3' ? BUCKET_TYPES[page] : undefined
|
|
|
|
const navigationItems =
|
|
page === 'files'
|
|
? [
|
|
{
|
|
label: 'Buckets',
|
|
href: `/project/${ref}/storage/files`,
|
|
},
|
|
...(IS_PLATFORM
|
|
? [
|
|
{
|
|
label: 'Settings',
|
|
href: `/project/${ref}/storage/files/settings`,
|
|
},
|
|
]
|
|
: []),
|
|
{
|
|
label: 'Policies',
|
|
href: `/project/${ref}/storage/files/policies`,
|
|
},
|
|
]
|
|
: []
|
|
|
|
return (
|
|
<>
|
|
<PageHeader>
|
|
<PageHeaderMeta>
|
|
<PageHeaderSummary>
|
|
<PageHeaderTitle>{title || (config?.displayName ?? 'Storage')}</PageHeaderTitle>
|
|
{!hideSubtitle && (
|
|
<PageHeaderDescription>
|
|
{config?.description || 'Manage your storage buckets and files.'}
|
|
</PageHeaderDescription>
|
|
)}
|
|
</PageHeaderSummary>
|
|
|
|
<PageHeaderAside>
|
|
{config?.docsUrl && <DocsButton key="docs" href={config.docsUrl} />}
|
|
</PageHeaderAside>
|
|
</PageHeaderMeta>
|
|
|
|
{navigationItems.length > 0 && (
|
|
<PageHeaderNavigationTabs>
|
|
<NavMenu>
|
|
{navigationItems.map((item) => (
|
|
<NavMenuItem key={item.label} active={pathname === item.href}>
|
|
<Link href={item.href}>{item.label}</Link>
|
|
</NavMenuItem>
|
|
))}
|
|
</NavMenu>
|
|
</PageHeaderNavigationTabs>
|
|
)}
|
|
</PageHeader>
|
|
{children}
|
|
</>
|
|
)
|
|
}
|