Files
supabase/apps/studio/components/ui/OrganizationProjectSelector/EmbeddedProjectList.tsx
T
Francesco Sansalvadore b997b7fb13 feat(studio): org project branch mobile selector (#43238)
- add new
[OrgSelector](https://github.com/supabase/supabase/pull/43238/changes#diff-214b339101a9c06864ea2755ac7246eb4c971ce74c5d3169b1385a28ee1d4227)
and
[ProjectBranchSelector](https://github.com/supabase/supabase/pull/43238/changes#diff-82d25c128c306b61bea7481026f58f670a229874f23ca3a1a1d78ddeabde21e0)
components to the mobile navigation, replacing the previous which took
up a lot of horizontal space
- org/project/branch dropdowns now open up in the bottom MobileSheetNav
for a better mobile ux
- desktop nav remains unchanged
2026-03-11 16:25:22 +01:00

53 lines
1.4 KiB
TypeScript

import type { OrgProject } from 'data/projects/org-projects-infinite-query'
import type { ReactNode } from 'react'
import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader'
import { ProjectCommandItem } from './ProjectCommandItem'
export interface EmbeddedProjectListProps {
projects: OrgProject[]
selectedRef: string | undefined
onSelect?: (project: OrgProject) => void
onClose: () => void
renderRow?: (project: OrgProject) => ReactNode
checkPosition?: 'right' | 'left'
isOptionDisabled?: (project: OrgProject) => boolean
sentinelRef: (node: Element | null) => void
hasNextPage: boolean
}
export function EmbeddedProjectList({
projects,
selectedRef,
onSelect,
onClose,
renderRow,
checkPosition,
isOptionDisabled,
sentinelRef,
hasNextPage,
}: EmbeddedProjectListProps) {
return (
<div className="min-h-0 p-1">
{projects.map((project) => (
<ProjectCommandItem
key={project.ref}
project={project}
selectedRef={selectedRef}
onSelect={onSelect}
onClose={onClose}
renderRow={renderRow}
checkPosition={checkPosition}
isOptionDisabled={isOptionDisabled}
/>
))}
<div ref={sentinelRef} className="h-1 -mt-1" />
{hasNextPage && (
<div className="px-2 py-1">
<ShimmeringLoader className="py-2" />
</div>
)}
</div>
)
}