mirror of
https://github.com/supabase/supabase.git
synced 2026-10-05 17:35:10 +03:00
Fill up side bar nav data for other pages and refactor
This commit is contained in:
1 parent
4e9017ff33
commit
4f90176fb1
14 files changed
+499
-191
No files matched your search
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,199 @@
|
||||
import Link from 'next/link'
|
||||
import Image from 'next/image'
|
||||
import { useRouter } from 'next/router'
|
||||
import { IconChevronRight, IconArrowLeft } from '~/../../packages/ui'
|
||||
import { NavMenuGroup, NavMenuSection } from './Nav.constants'
|
||||
import * as Accordion from '@radix-ui/react-accordion'
|
||||
|
||||
const SideBar = ({ menuItems = [] }: { menuItems: any }) => {
|
||||
const { asPath } = useRouter()
|
||||
const pathSegments = asPath.split('/')
|
||||
|
||||
const isInReferencePages = pathSegments.includes('reference') && pathSegments.length >= 3
|
||||
const references = {
|
||||
javascript: { name: 'supabase-js', icon: '/docs/img/libraries/javascript-icon.svg' },
|
||||
dart: { name: 'Flutter', icon: '/docs/img/libraries/dart-icon.svg' },
|
||||
cli: { name: 'CLI', icon: '/docs/img/libraries/cli-icon.svg' },
|
||||
api: { name: 'API', icon: '/docs/img/libraries/api-icon.svg' },
|
||||
}
|
||||
const referenceMeta = pathSegments.length >= 3 ? references[pathSegments[2]] : undefined
|
||||
|
||||
const currentSection: NavMenuGroup = menuItems.find((group) => {
|
||||
const foundItem = group.items.find((section) => {
|
||||
if (section.items.length > 0) {
|
||||
const foundSubItem = section.items.find((item) => {
|
||||
if (item.url === asPath) return item
|
||||
})
|
||||
if (foundSubItem) return section
|
||||
} else {
|
||||
if (section.url === asPath) return section
|
||||
}
|
||||
})
|
||||
if (foundItem) return group
|
||||
})
|
||||
|
||||
const currentSubSection: NavMenuSection =
|
||||
currentSection !== undefined
|
||||
? currentSection.items.find((section) => {
|
||||
if (section.items.length === 0) {
|
||||
return undefined
|
||||
} else {
|
||||
return section.items.find((item) => {
|
||||
if (item.url === asPath) return item
|
||||
})
|
||||
}
|
||||
})
|
||||
: undefined
|
||||
|
||||
console.log({ currentSection, currentSubSection })
|
||||
|
||||
return (
|
||||
<div
|
||||
className="dark:bg-scale-200 dark:border-scale-400 sidebar-width sticky top-0
|
||||
h-screen overflow-y-scroll border-r py-8 px-6 sidebar-menu-container"
|
||||
>
|
||||
{isInReferencePages && (
|
||||
<>
|
||||
<Link href="/reference">
|
||||
<a>
|
||||
<div className="flex items-center space-x-4 opacity-75 hover:opacity-100 transition">
|
||||
<IconArrowLeft size={16} strokeWidth={2} className="text-scale-1200" />
|
||||
<span className="text-sm text-scale-1200">All Reference Docs</span>
|
||||
</div>
|
||||
</a>
|
||||
</Link>
|
||||
{referenceMeta !== undefined && (
|
||||
<div className="my-5 flex items-center space-x-4">
|
||||
<div className="h-10 w-10 rounded bg-scale-500 flex items-center justify-center">
|
||||
<Image
|
||||
className="rounded"
|
||||
width={24}
|
||||
height={24}
|
||||
alt={referenceMeta.name}
|
||||
src={referenceMeta.icon}
|
||||
/>
|
||||
</div>
|
||||
<p className="text-scale-1200 font-bold">{referenceMeta.name}</p>
|
||||
</div>
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
{menuItems.length === 1 ? (
|
||||
<div className="my-2">
|
||||
{menuItems[0].items.map((item) => (
|
||||
<Link href={item.url}>
|
||||
<a>
|
||||
<div
|
||||
key={item.name}
|
||||
className={[
|
||||
'py-1.5 px-5 rounded text-sm transition',
|
||||
`${
|
||||
item.url === asPath
|
||||
? 'bg-scale-400 text-brand-900'
|
||||
: 'text-scale-1100 hover:text-scale-1200'
|
||||
}`,
|
||||
].join(' ')}
|
||||
>
|
||||
{item.name}
|
||||
</div>
|
||||
</a>
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
) : (
|
||||
<Accordion.Root
|
||||
collapsible
|
||||
type="single"
|
||||
defaultValue={currentSection?.label}
|
||||
className="w-full space-y-0.5"
|
||||
>
|
||||
{menuItems.map((group: NavMenuGroup) => (
|
||||
<Accordion.Item key={group.label} value={group.label}>
|
||||
<Accordion.Trigger className="w-full flex items-center space-x-2 py-1.5">
|
||||
<IconChevronRight
|
||||
className="transition text-scale-1000 data-open-parent:rotate-90"
|
||||
size={14}
|
||||
strokeWidth={2}
|
||||
/>
|
||||
<span className="text-scale-1200 text-sm group-hover:text-brand-900 transition">
|
||||
{group.label}
|
||||
</span>
|
||||
</Accordion.Trigger>
|
||||
<Accordion.Content className="transition my-2 data-open:animate-slide-down data-closed:animate-slide-up">
|
||||
{group.items.map((section: NavMenuSection) => {
|
||||
if (section.items.length === 0) {
|
||||
return (
|
||||
<Link href={section.url}>
|
||||
<a>
|
||||
<div
|
||||
key={section.name}
|
||||
className={[
|
||||
'py-1.5 px-5 rounded text-sm transition',
|
||||
`${
|
||||
section.url === asPath
|
||||
? 'bg-scale-400 text-brand-900'
|
||||
: 'text-scale-1100 hover:text-scale-1200'
|
||||
}`,
|
||||
].join(' ')}
|
||||
>
|
||||
{section.name}
|
||||
</div>
|
||||
</a>
|
||||
</Link>
|
||||
)
|
||||
} else {
|
||||
return (
|
||||
<Accordion.Root
|
||||
collapsible
|
||||
key={section.name}
|
||||
type="single"
|
||||
className="space-y-0.5"
|
||||
defaultValue={currentSubSection?.name}
|
||||
>
|
||||
<Accordion.Item value={section.name}>
|
||||
<Accordion.Trigger className="flex items-center space-x-2 px-4 py-1.5">
|
||||
<IconChevronRight
|
||||
className="transition text-scale-1000 data-open-parent:rotate-90"
|
||||
size={14}
|
||||
strokeWidth={2}
|
||||
/>
|
||||
<span className="text-scale-1200 text-sm group-hover:text-brand-900 transition">
|
||||
{section.name}
|
||||
</span>
|
||||
</Accordion.Trigger>
|
||||
<Accordion.Content className="my-2 data-open:animate-slide-down data-closed:animate-slide-up">
|
||||
{section.items.map((item: NavMenuSection) => (
|
||||
<Link href={item.url}>
|
||||
<a>
|
||||
<div
|
||||
key={item.name}
|
||||
className={[
|
||||
'py-1.5 ml-4 px-5 rounded text-sm transition',
|
||||
`${
|
||||
item.url === asPath
|
||||
? 'bg-scale-400 text-brand-900'
|
||||
: 'text-scale-1100 hover:text-scale-1200'
|
||||
}`,
|
||||
].join(' ')}
|
||||
>
|
||||
{item.name}
|
||||
</div>
|
||||
</a>
|
||||
</Link>
|
||||
))}
|
||||
</Accordion.Content>
|
||||
</Accordion.Item>
|
||||
</Accordion.Root>
|
||||
)
|
||||
}
|
||||
})}
|
||||
</Accordion.Content>
|
||||
</Accordion.Item>
|
||||
))}
|
||||
</Accordion.Root>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default SideBar
|
||||
@@ -1,136 +0,0 @@
|
||||
import Link from 'next/link'
|
||||
import { useRouter } from 'next/router'
|
||||
import { IconChevronRight } from '~/../../packages/ui'
|
||||
import { NavMenuGroup, NavMenuSection } from './Nav.constants'
|
||||
import * as Accordion from '@radix-ui/react-accordion'
|
||||
|
||||
const SideBar = ({ menuItems = [] }: { menuItems: any }) => {
|
||||
const { asPath } = useRouter()
|
||||
|
||||
const currentSection: NavMenuGroup = menuItems.find((group) => {
|
||||
const foundItem = group.items.find((section) => {
|
||||
if (section.items.length > 0) {
|
||||
const foundSubItem = section.items.find((item) => {
|
||||
if (item.url === asPath) return item
|
||||
})
|
||||
if (foundSubItem) return section
|
||||
} else {
|
||||
if (section.url === asPath) return section
|
||||
}
|
||||
})
|
||||
if (foundItem) return group
|
||||
})
|
||||
|
||||
const currentSubSection: NavMenuSection =
|
||||
currentSection !== undefined
|
||||
? currentSection.items.find((section) => {
|
||||
if (section.items.length === 0) {
|
||||
return undefined
|
||||
} else {
|
||||
return section.items.find((item) => {
|
||||
if (item.url === asPath) return item
|
||||
})
|
||||
}
|
||||
})
|
||||
: undefined
|
||||
|
||||
return (
|
||||
<div
|
||||
className="dark:bg-scale-200 dark:border-scale-400 sidebar-width sticky top-0 flex
|
||||
h-screen overflow-y-scroll border-r py-8 px-6 sidebar-menu-container"
|
||||
>
|
||||
<Accordion.Root
|
||||
collapsible
|
||||
type="single"
|
||||
defaultValue={currentSection?.label}
|
||||
className="w-full space-y-0.5"
|
||||
>
|
||||
{menuItems.map((group: NavMenuGroup) => (
|
||||
<Accordion.Item key={group.label} value={group.label}>
|
||||
<Accordion.Trigger className="w-full flex items-center space-x-2 py-1.5">
|
||||
<IconChevronRight
|
||||
className="transition text-scale-1000 data-open-parent:rotate-90"
|
||||
size={14}
|
||||
strokeWidth={2}
|
||||
/>
|
||||
<span className="text-scale-1200 text-sm group-hover:text-brand-900 transition">
|
||||
{group.label}
|
||||
</span>
|
||||
</Accordion.Trigger>
|
||||
<Accordion.Content className="transition my-2 data-open:animate-slide-down data-closed:animate-slide-up">
|
||||
{group.items.map((section: NavMenuSection) => {
|
||||
if (section.items.length === 0) {
|
||||
return (
|
||||
<Link href={section.url}>
|
||||
<a>
|
||||
<div
|
||||
key={section.name}
|
||||
className={[
|
||||
'py-1.5 px-5 rounded text-sm transition',
|
||||
`${
|
||||
section.url === asPath
|
||||
? 'bg-scale-400 text-brand-900'
|
||||
: 'text-scale-1100 hover:text-scale-1200'
|
||||
}`,
|
||||
].join(' ')}
|
||||
>
|
||||
{section.name}
|
||||
</div>
|
||||
</a>
|
||||
</Link>
|
||||
)
|
||||
} else {
|
||||
return (
|
||||
<Accordion.Root
|
||||
collapsible
|
||||
key={section.name}
|
||||
type="single"
|
||||
className="space-y-0.5"
|
||||
defaultValue={currentSubSection?.name}
|
||||
>
|
||||
<Accordion.Item value={section.name}>
|
||||
<Accordion.Trigger className="flex items-center space-x-2 px-4 py-1.5">
|
||||
<IconChevronRight
|
||||
className="transition text-scale-1000 data-open-parent:rotate-90"
|
||||
size={14}
|
||||
strokeWidth={2}
|
||||
/>
|
||||
<span className="text-scale-1200 text-sm group-hover:text-brand-900 transition">
|
||||
{section.name}
|
||||
</span>
|
||||
</Accordion.Trigger>
|
||||
<Accordion.Content className="my-2 data-open:animate-slide-down data-closed:animate-slide-up">
|
||||
{section.items.map((item: NavMenuSection) => (
|
||||
<Link href={item.url}>
|
||||
<a>
|
||||
<div
|
||||
key={item.name}
|
||||
className={[
|
||||
'py-1.5 ml-4 px-5 rounded text-sm transition',
|
||||
`${
|
||||
item.url === asPath
|
||||
? 'bg-scale-400 text-brand-900'
|
||||
: 'text-scale-1100 hover:text-scale-1200'
|
||||
}`,
|
||||
].join(' ')}
|
||||
>
|
||||
{item.name}
|
||||
</div>
|
||||
</a>
|
||||
</Link>
|
||||
))}
|
||||
</Accordion.Content>
|
||||
</Accordion.Item>
|
||||
</Accordion.Root>
|
||||
)
|
||||
}
|
||||
})}
|
||||
</Accordion.Content>
|
||||
</Accordion.Item>
|
||||
))}
|
||||
</Accordion.Root>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default SideBar
|
||||
@@ -1,3 +1,132 @@
|
||||
const Nav = []
|
||||
const Nav = [
|
||||
{
|
||||
label: 'Getting Started',
|
||||
items: [
|
||||
{ name: 'Supabase Dart Library', url: '/reference/dart/v0', items: [] },
|
||||
{ name: 'Installing', url: '/reference/dart/v0/installing', items: [] },
|
||||
{ name: 'Initializing', url: '/reference/dart/v0/initializing', items: [] },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Auth',
|
||||
items: [
|
||||
{ name: 'signUp()', url: '/reference/dart/v0/auth-signup', items: [] },
|
||||
{ name: 'signIn()', url: '/reference/dart/v0/auth-signin', items: [] },
|
||||
{
|
||||
name: 'signInWithProvider()',
|
||||
url: '/reference/dart/v0/auth-signinwithprovider',
|
||||
items: [],
|
||||
},
|
||||
{ name: 'signOut()', url: '/reference/dart/v0/auth-signout', items: [] },
|
||||
{ name: 'session()', url: '/reference/dart/v0/auth-session', items: [] },
|
||||
{ name: 'user()', url: '/reference/dart/v0/auth-user', items: [] },
|
||||
{ name: 'update()', url: '/reference/dart/v0/auth-update', items: [] },
|
||||
{
|
||||
name: 'onAuthStateChange()',
|
||||
url: '/reference/dart/v0/auth-onauthstatechanged',
|
||||
items: [],
|
||||
},
|
||||
{
|
||||
name: 'Reset Password (Email)',
|
||||
url: '/reference/dart/v0/reset-password-email',
|
||||
items: [],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Functions',
|
||||
items: [{ name: 'invoke()', url: '/reference/dart/v0/invoke', items: [] }],
|
||||
},
|
||||
{
|
||||
label: 'Database',
|
||||
items: [
|
||||
{ name: 'Fetch data: select()', url: '/reference/dart/v0/select', items: [] },
|
||||
{ name: 'Create data: insert()', url: '/reference/dart/v0/insert', items: [] },
|
||||
{ name: 'Modify data: update()', url: '/reference/dart/v0/update', items: [] },
|
||||
{ name: 'Upsert data: upsert()', url: '/reference/dart/v0/upsert', items: [] },
|
||||
{ name: 'Delete data: delete()', url: '/reference/dart/v0/delete', items: [] },
|
||||
{ name: 'Stored Procedures: rpc()', url: '/reference/dart/v0/rpc', items: [] },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Realtime',
|
||||
items: [
|
||||
{ name: 'stream', url: '/reference/dart/v0/stream', items: [] },
|
||||
{ name: 'on().subscribe()', url: '/reference/dart/v0/subscribe', items: [] },
|
||||
{
|
||||
name: 'removeSubscription()',
|
||||
url: '/reference/dart/v0/removesubscription',
|
||||
items: [],
|
||||
},
|
||||
{ name: 'getSubscriptions()', url: '/reference/dart/v0/getsubscriptions', items: [] },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Storage',
|
||||
items: [
|
||||
{ name: 'createBucket()', url: '/reference/dart/v0/storage-createbucket', items: [] },
|
||||
{ name: 'getBucket()', url: '/reference/dart/v0/storage-getbucket', items: [] },
|
||||
{ name: 'listBuckets()', url: '/reference/dart/v0/storage-listbuckets', items: [] },
|
||||
{ name: 'updateBucket()', url: '/reference/dart/v0/storage-updatebucket', items: [] },
|
||||
{ name: 'deleteBucket()', url: '/reference/dart/v0/storage-deletebucket', items: [] },
|
||||
{ name: 'emptyBucket()', url: '/reference/dart/v0/storage-emptybucket', items: [] },
|
||||
{ name: 'from.upload()', url: '/reference/dart/v0/storage-from-upload', items: [] },
|
||||
{ name: 'from.download()', url: '/reference/dart/v0/storage-from-download', items: [] },
|
||||
{ name: 'from.list()', url: '/reference/dart/v0/storage-from-list', items: [] },
|
||||
{ name: 'from.update()', url: '/reference/dart/v0/storage-from-update', items: [] },
|
||||
{ name: 'from.move()', url: '/reference/dart/v0/storage-from-move', items: [] },
|
||||
{ name: 'from.remove()', url: '/reference/dart/v0/storage-from-remove', items: [] },
|
||||
{
|
||||
name: 'from.createSignedUrl()',
|
||||
url: '/reference/dart/v0/storage-from-createsignedurl',
|
||||
items: [],
|
||||
},
|
||||
{
|
||||
name: 'from.getPublicUrl()',
|
||||
url: '/reference/dart/v0/storage-from-getpublicurl',
|
||||
items: [],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Filters',
|
||||
items: [
|
||||
{ name: 'Using Filters', url: '/reference/dart/v0/using-filters', items: [] },
|
||||
{ name: 'eq()', url: '/reference/dart/v0/eq', items: [] },
|
||||
{ name: 'neq()', url: '/reference/dart/v0/neq', items: [] },
|
||||
{ name: 'gt()', url: '/reference/dart/v0/gt', items: [] },
|
||||
{ name: 'gte()', url: '/reference/dart/v0/gte', items: [] },
|
||||
{ name: 'lt()', url: '/reference/dart/v0/lt', items: [] },
|
||||
{ name: 'lte()', url: '/reference/dart/v0/lte', items: [] },
|
||||
{ name: 'like()', url: '/reference/dart/v0/like', items: [] },
|
||||
{ name: 'ilike()', url: '/reference/dart/v0/ilike', items: [] },
|
||||
{ name: 'is_()', url: '/reference/dart/v0/is_', items: [] },
|
||||
{ name: 'in_()', url: '/reference/dart/v0/in_', items: [] },
|
||||
{ name: 'contains()', url: '/reference/dart/v0/contains', items: [] },
|
||||
{ name: 'containedBy()', url: '/reference/dart/v0/containedby', items: [] },
|
||||
{ name: 'rangeGt()', url: '/reference/dart/v0/rangegt', items: [] },
|
||||
{ name: 'rangeGte()', url: '/reference/dart/v0/rangegte', items: [] },
|
||||
{ name: 'rangeLt()', url: '/reference/dart/v0/rangelt', items: [] },
|
||||
{ name: 'rangeLte()', url: '/reference/dart/v0/rangelte', items: [] },
|
||||
{ name: 'rangeAdjacent()', url: '/reference/dart/v0/rangeadjacent', items: [] },
|
||||
{ name: 'overlaps()', url: '/reference/dart/v0/overlaps', items: [] },
|
||||
{ name: 'textSearch()', url: '/reference/dart/v0/textsearch', items: [] },
|
||||
{ name: 'match()', url: '/reference/dart/v0/match', items: [] },
|
||||
{ name: 'not()', url: '/reference/dart/v0/not', items: [] },
|
||||
{ name: 'or()', url: '/reference/dart/v0/or', items: [] },
|
||||
{ name: 'filter()', url: '/reference/dart/v0/filter', items: [] },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Modifiers',
|
||||
items: [
|
||||
{ name: 'Using Modifiers', url: '/reference/dart/v0/using-modifiers', items: [] },
|
||||
{ name: 'order()', url: '/reference/dart/v0/order', items: [] },
|
||||
{ name: 'limit()', url: '/reference/dart/v0/limit', items: [] },
|
||||
{ name: 'range()', url: '/reference/dart/v0/range', items: [] },
|
||||
{ name: 'single()', url: '/reference/dart/v0/single', items: [] },
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
export default Nav
|
||||
@@ -1,3 +1,130 @@
|
||||
const Nav = []
|
||||
const Nav = [
|
||||
{
|
||||
label: 'Getting Started',
|
||||
items: [
|
||||
{ name: 'Supabase Flutter Library', url: '/reference/dart', items: [] },
|
||||
{ name: 'Installing', url: '/reference/dart/installing', items: [] },
|
||||
{ name: 'Initializing', url: '/reference/dart/initializing', items: [] },
|
||||
{ name: 'Upgrading to supabase-flutter v1', url: '/reference/dart/upgrade-guide', items: [] },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Auth',
|
||||
items: [
|
||||
{ name: 'signUp()', url: '/reference/dart/auth-signup', items: [] },
|
||||
{
|
||||
name: 'signInWithPassword()',
|
||||
url: '/reference/dart/auth-signinwithpassword',
|
||||
items: [],
|
||||
},
|
||||
{ name: 'signInWithOtp()', url: '/reference/dart/auth-signinwithotp', items: [] },
|
||||
{ name: 'signInWithOAuth()', url: '/reference/dart/auth-signinwithoauth', items: [] },
|
||||
{ name: 'signOut()', url: '/reference/dart/auth-signout', items: [] },
|
||||
{ name: 'verifyOtp()', url: '/reference/dart/auth-verifyotp', items: [] },
|
||||
{ name: 'currentSession', url: '/reference/dart/auth-currentsession', items: [] },
|
||||
{ name: 'currentUser', url: '/reference/dart/auth-currentuser', items: [] },
|
||||
{ name: 'updateUser()', url: '/reference/dart/auth-updateuser', items: [] },
|
||||
{ name: 'setSession()', url: '/reference/dart/auth-setSession', items: [] },
|
||||
{
|
||||
name: 'resetPasswordForEmail()',
|
||||
url: '/reference/dart/auth-resetpasswordforemail',
|
||||
items: [],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Functions',
|
||||
items: [{ name: 'invoke()', url: '/reference/dart/invoke', items: [] }],
|
||||
},
|
||||
{
|
||||
label: 'Database',
|
||||
items: [
|
||||
{ name: 'Fetch data: select()', url: '/reference/dart/select', items: [] },
|
||||
{ name: 'Create data: insert()', url: '/reference/dart/insert', items: [] },
|
||||
{ name: 'Modify data: update()', url: '/reference/dart/update', items: [] },
|
||||
{ name: 'Upsert data: upsert()', url: '/reference/dart/upsert', items: [] },
|
||||
{ name: 'Delete data: delete()', url: '/reference/dart/delete', items: [] },
|
||||
{ name: 'Stored Procedures: rpc()', url: '/reference/dart/rpc', items: [] },
|
||||
{
|
||||
name: 'Filters',
|
||||
url: undefined,
|
||||
items: [
|
||||
{ name: 'Using Filters', url: '/reference/dart/using-filters', items: [] },
|
||||
{ name: 'eq()', url: '/reference/dart/eq', items: [] },
|
||||
{ name: 'neq()', url: '/reference/dart/neq', items: [] },
|
||||
{ name: 'gt()', url: '/reference/dart/gt', items: [] },
|
||||
{ name: 'gte()', url: '/reference/dart/gte', items: [] },
|
||||
{ name: 'lt()', url: '/reference/dart/lt', items: [] },
|
||||
{ name: 'lte()', url: '/reference/dart/lte', items: [] },
|
||||
{ name: 'like()', url: '/reference/dart/like', items: [] },
|
||||
{ name: 'ilike()', url: '/reference/dart/ilike', items: [] },
|
||||
{ name: 'is_()', url: '/reference/dart/is_', items: [] },
|
||||
{ name: 'in_()', url: '/reference/dart/in_', items: [] },
|
||||
{ name: 'contains()', url: '/reference/dart/contains', items: [] },
|
||||
{ name: 'containedBy()', url: '/reference/dart/containedby', items: [] },
|
||||
{ name: 'rangeGt()', url: '/reference/dart/rangegt', items: [] },
|
||||
{ name: 'rangeGte()', url: '/reference/dart/rangegte', items: [] },
|
||||
{ name: 'rangeLt()', url: '/reference/dart/rangelt', items: [] },
|
||||
{ name: 'rangeLte()', url: '/reference/dart/rangelte', items: [] },
|
||||
{ name: 'rangeAdjacent()', url: '/reference/dart/rangeadjacent', items: [] },
|
||||
{ name: 'overlaps()', url: '/reference/dart/overlaps', items: [] },
|
||||
{ name: 'textSearch()', url: '/reference/dart/textsearch', items: [] },
|
||||
{ name: 'match()', url: '/reference/dart/match', items: [] },
|
||||
{ name: 'not()', url: '/reference/dart/not', items: [] },
|
||||
{ name: 'or()', url: '/reference/dart/or', items: [] },
|
||||
{ name: 'filter()', url: '/reference/dart/filter', items: [] },
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'Modifiers',
|
||||
url: undefined,
|
||||
items: [
|
||||
{ name: 'Using Modifiers', url: '/reference/dart/using-modifiers', items: [] },
|
||||
{ name: 'order()', url: '/reference/dart/order', items: [] },
|
||||
{ name: 'limit()', url: '/reference/dart/limit', items: [] },
|
||||
{ name: 'range()', url: '/reference/dart/range', items: [] },
|
||||
{ name: 'single()', url: '/reference/dart/single', items: [] },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Realtime',
|
||||
items: [
|
||||
{ name: 'stream()', url: '/reference/dart/stream', items: [] },
|
||||
{ name: 'on().subscribe()', url: '/reference/dart/subscribe', items: [] },
|
||||
{ name: 'removeChannel()', url: '/reference/dart/removechannel', items: [] },
|
||||
{ name: 'removeAllChannels()', url: '/reference/dart/removeallchannels', items: [] },
|
||||
{ name: 'getChannels()', url: '/reference/dart/getchannels', items: [] },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Storage',
|
||||
items: [
|
||||
{ name: 'createBucket()', url: '/reference/dart/storage-createbucket', items: [] },
|
||||
{ name: 'getBucket()', url: '/reference/dart/storage-getbucket', items: [] },
|
||||
{ name: 'listBuckets()', url: '/reference/dart/storage-listbuckets', items: [] },
|
||||
{ name: 'updateBucket()', url: '/reference/dart/storage-updatebucket', items: [] },
|
||||
{ name: 'deleteBucket()', url: '/reference/dart/storage-deletebucket', items: [] },
|
||||
{ name: 'emptyBucket()', url: '/reference/dart/storage-emptybucket', items: [] },
|
||||
{ name: 'from.upload()', url: '/reference/dart/storage-from-upload', items: [] },
|
||||
{ name: 'from.download()', url: '/reference/dart/storage-from-download', items: [] },
|
||||
{ name: 'from.list()', url: '/reference/dart/storage-from-list', items: [] },
|
||||
{ name: 'from.update()', url: '/reference/dart/storage-from-update', items: [] },
|
||||
{ name: 'from.move()', url: '/reference/dart/storage-from-move', items: [] },
|
||||
{ name: 'from.remove()', url: '/reference/dart/storage-from-remove', items: [] },
|
||||
{
|
||||
name: 'from.createSignedUrl()',
|
||||
url: '/reference/dart/storage-from-createsignedurl',
|
||||
items: [],
|
||||
},
|
||||
{
|
||||
name: 'from.getPublicUrl()',
|
||||
url: '/reference/dart/storage-from-getpublicurl',
|
||||
items: [],
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
export default Nav
|
||||
@@ -127,44 +127,41 @@ const Nav = [
|
||||
{
|
||||
label: 'Filters',
|
||||
items: [
|
||||
{ name: 'Using Filters', url: '/reference/javascript/using-filters', items: [] },
|
||||
{ name: 'eq()', url: '/reference/javascript/eq', items: [] },
|
||||
{ name: 'neq()', url: '/reference/javascript/neq', items: [] },
|
||||
{ name: 'gt()', url: '/reference/javascript/gt', items: [] },
|
||||
{ name: 'gte()', url: '/reference/javascript/gte', items: [] },
|
||||
{ name: 'lt()', url: '/reference/javascript/lt', items: [] },
|
||||
{ name: 'lte()', url: '/reference/javascript/lte', items: [] },
|
||||
{ name: 'like()', url: '/reference/javascript/like', items: [] },
|
||||
{ name: 'ilike()', url: '/reference/javascript/ilike', items: [] },
|
||||
{ name: 'is()', url: '/reference/javascript/is', items: [] },
|
||||
{ name: 'in()', url: '/reference/javascript/in', items: [] },
|
||||
{ name: 'contains()', url: '/reference/javascript/contains', items: [] },
|
||||
{ name: 'containedBy()', url: '/reference/javascript/containedby', items: [] },
|
||||
{ name: 'rangeGt()', url: '/reference/javascript/rangegt', items: [] },
|
||||
{ name: 'rangeGte()', url: '/reference/javascript/rangegte', items: [] },
|
||||
{ name: 'rangeLt()', url: '/reference/javascript/rangelt', items: [] },
|
||||
{ name: 'rangeLte()', url: '/reference/javascript/rangelte', items: [] },
|
||||
{ name: 'rangeAdjacent()', url: '/reference/javascript/rangeadjacent', items: [] },
|
||||
{ name: 'overlaps()', url: '/reference/javascript/overlaps', items: [] },
|
||||
{ name: 'textSearch()', url: '/reference/javascript/overlaps', items: [] },
|
||||
{ name: 'match()', url: '/reference/javascript/match', items: [] },
|
||||
{ name: 'not()', url: '/reference/javascript/not', items: [] },
|
||||
{ name: 'or()', url: '/reference/javascript/or', items: [] },
|
||||
{ name: 'filter()', url: '/reference/javascript/filter', items: [] },
|
||||
{ name: 'Using Filters', url: '/reference/javascript/v1/using-filters', items: [] },
|
||||
{ name: 'eq()', url: '/reference/javascript/v1/eq', items: [] },
|
||||
{ name: 'neq()', url: '/reference/javascript/v1/neq', items: [] },
|
||||
{ name: 'gt()', url: '/reference/javascript/v1/gt', items: [] },
|
||||
{ name: 'gte()', url: '/reference/javascript/v1/gte', items: [] },
|
||||
{ name: 'lt()', url: '/reference/javascript/v1/lt', items: [] },
|
||||
{ name: 'lte()', url: '/reference/javascript/v1/lte', items: [] },
|
||||
{ name: 'like()', url: '/reference/javascript/v1/like', items: [] },
|
||||
{ name: 'ilike()', url: '/reference/javascript/v1/ilike', items: [] },
|
||||
{ name: 'is()', url: '/reference/javascript/v1/is', items: [] },
|
||||
{ name: 'in()', url: '/reference/javascript/v1/in', items: [] },
|
||||
{ name: 'contains()', url: '/reference/javascript/v1/contains', items: [] },
|
||||
{ name: 'containedBy()', url: '/reference/javascript/v1/containedby', items: [] },
|
||||
{ name: 'rangeGt()', url: '/reference/javascript/v1/rangegt', items: [] },
|
||||
{ name: 'rangeGte()', url: '/reference/javascript/v1/rangegte', items: [] },
|
||||
{ name: 'rangeLt()', url: '/reference/javascript/v1/rangelt', items: [] },
|
||||
{ name: 'rangeLte()', url: '/reference/javascript/v1/rangelte', items: [] },
|
||||
{ name: 'rangeAdjacent()', url: '/reference/javascript/v1/rangeadjacent', items: [] },
|
||||
{ name: 'overlaps()', url: '/reference/javascript/v1/overlaps', items: [] },
|
||||
{ name: 'textSearch()', url: '/reference/javascript/v1/textsearch', items: [] },
|
||||
{ name: 'match()', url: '/reference/javascript/v1/match', items: [] },
|
||||
{ name: 'not()', url: '/reference/javascript/v1/not', items: [] },
|
||||
{ name: 'or()', url: '/reference/javascript/v1/or', items: [] },
|
||||
{ name: 'filter()', url: '/reference/javascript/v1/filter', items: [] },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Modifiers',
|
||||
items: [
|
||||
{ name: 'Using Modifiers', url: '/reference/javascript/using-modifiers', items: [] },
|
||||
{ name: 'select()', url: '/reference/javascript/db-modifiers-select', items: [] },
|
||||
{ name: 'order()', url: '/reference/javascript/order', items: [] },
|
||||
{ name: 'limit()', url: '/reference/javascript/limit', items: [] },
|
||||
{ name: 'range()', url: '/reference/javascript/range', items: [] },
|
||||
{ name: 'abortSignal()', url: '/reference/javascript/db-abortsignal', items: [] },
|
||||
{ name: 'single()', url: '/reference/javascript/single', items: [] },
|
||||
{ name: 'maybeSingle()', url: '/reference/javascript/maybesingle', items: [] },
|
||||
{ name: 'csv()', url: '/reference/javascript/db-csv', items: [] },
|
||||
{ name: 'Using Modifiers', url: '/reference/javascript/v1/using-modifiers', items: [] },
|
||||
{ name: 'order()', url: '/reference/javascript/v1/order', items: [] },
|
||||
{ name: 'limit()', url: '/reference/javascript/v1/limit', items: [] },
|
||||
{ name: 'range()', url: '/reference/javascript/v1/range', items: [] },
|
||||
{ name: 'single()', url: '/reference/javascript/v1/single', items: [] },
|
||||
{ name: 'maybeSingle()', url: '/reference/javascript/v1/maybesingle', items: [] },
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
@@ -91,7 +91,7 @@ const Nav = [
|
||||
{ name: 'rangeLte()', url: '/reference/javascript/rangelte', items: [] },
|
||||
{ name: 'rangeAdjacent()', url: '/reference/javascript/rangeadjacent', items: [] },
|
||||
{ name: 'overlaps()', url: '/reference/javascript/overlaps', items: [] },
|
||||
{ name: 'textSearch()', url: '/reference/javascript/overlaps', items: [] },
|
||||
{ name: 'textSearch()', url: '/reference/javascript/textsearch', items: [] },
|
||||
{ name: 'match()', url: '/reference/javascript/match', items: [] },
|
||||
{ name: 'not()', url: '/reference/javascript/not', items: [] },
|
||||
{ name: 'or()', url: '/reference/javascript/or', items: [] },
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { useEffect } from 'react'
|
||||
import Head from 'next/head'
|
||||
import NavBar from '../components/nav/NavBar'
|
||||
import SideBar from '../components/nav/SideBar'
|
||||
import NavBar from '../components/Navigation/NavBar'
|
||||
import SideBar from '../components/Navigation/SideBar'
|
||||
import Footer from '../components/Footer'
|
||||
|
||||
const Layout = ({
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { MDXProvider } from '@mdx-js/react'
|
||||
import { NextSeo } from 'next-seo'
|
||||
import { useRouter } from 'next/router'
|
||||
import { menuItems } from '~/components/nav/Nav.constants'
|
||||
import { menuItems } from '~/components/Navigation/Nav.constants'
|
||||
import Layout from '~/layouts/Default'
|
||||
import { getPageType } from '~/lib/helpers'
|
||||
import getComponents from '~/lib/mdx/getComponents'
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// [Joshen] I think this can be done better, as its mostly used to choose what
|
||||
// menus to render in the SideBar.js (Ref Nav.constants.ts)
|
||||
export function getPageType(asPath: string) {
|
||||
let page
|
||||
if (!asPath) return ''
|
||||
@@ -12,6 +14,10 @@ export function getPageType(asPath: string) {
|
||||
page = 'reference/dart'
|
||||
} else if (asPath.includes('/reference/dart/v0')) {
|
||||
page = 'reference/dart/v0'
|
||||
} else if (asPath.includes('/reference/api')) {
|
||||
page = 'reference/api'
|
||||
} else if (asPath.includes('/reference/cli')) {
|
||||
page = 'reference/cli'
|
||||
} else if (asPath.includes('/reference')) {
|
||||
page = 'reference'
|
||||
} else {
|
||||
|
||||
@@ -3,7 +3,7 @@ import { useRouter } from 'next/router'
|
||||
import { MDXRemote } from 'next-mdx-remote'
|
||||
import { serialize } from 'next-mdx-remote/serialize'
|
||||
import components from '../components/index'
|
||||
import { menuItems } from '../components/nav/Nav.constants'
|
||||
import { menuItems } from '../components/Navigation/Nav.constants'
|
||||
import { getPageType } from '../lib/helpers'
|
||||
import { getAllDocs, getDocsBySlug } from '../lib/docs'
|
||||
import Layout from '~/layouts/Default'
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
import Layout from '~/layouts/Guide'
|
||||
|
||||
export const meta = {
|
||||
title: 'My Awesome Post',
|
||||
description: 'This is my awesome post',
|
||||
date: '2019-01-01',
|
||||
tags: ['awesome', 'post'],
|
||||
}
|
||||
|
||||
### SOC 2
|
||||
|
||||
Supabase is SOC2 Type 1 compliant. Enterprise customers can request a copy of our SOC2 through our [Security Portal](https://security.supabase.com).
|
||||
|
||||
export default (context) => <Layout meta={meta} children={context.children} context={context} />
|
||||
@@ -2,7 +2,7 @@ import { MDXProvider } from '@mdx-js/react'
|
||||
import { MDXRemote } from 'next-mdx-remote'
|
||||
import { serialize } from 'next-mdx-remote/serialize'
|
||||
import components from '~/components'
|
||||
import { menuItems } from '~/components/nav/Nav.constants'
|
||||
import { menuItems } from '~/components/Navigation/Nav.constants'
|
||||
|
||||
import Layout from '~/layouts/Default'
|
||||
import { getDocsBySlug } from '../lib/docs'
|
||||
|
||||
Reference in new issue
Block a user