OrgSelectorSheet.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import { Boxes } from 'lucide-react'
  2. import {
  3. SheetHeader,
  4. SheetTitle,
  5. Tabs_Shadcn_,
  6. TabsContent_Shadcn_,
  7. TabsList_Shadcn_,
  8. TabsTrigger_Shadcn_,
  9. } from 'ui'
  10. import MobileSheetNav from 'ui-patterns/MobileSheetNav/MobileSheetNav'
  11. import { OrganizationDropdown } from '@/components/layouts/AppLayout/OrganizationDropdown'
  12. import type { Organization } from '@/types'
  13. const embeddedClassName =
  14. 'bg-transparent border-0 shadow-none min-h-0 flex-1 flex flex-col overflow-hidden rounded-none'
  15. export interface OrgSelectorSheetProps {
  16. open: boolean
  17. onOpenChange: (open: boolean) => void
  18. onClose: () => void
  19. selectedOrganization?: Organization | null
  20. selectedOrganizationName?: string | null
  21. }
  22. export function OrgSelectorSheet({
  23. open,
  24. onOpenChange,
  25. onClose,
  26. selectedOrganization,
  27. selectedOrganizationName,
  28. }: OrgSelectorSheetProps) {
  29. const orgLabel = selectedOrganizationName ?? selectedOrganization?.name ?? 'Select organization'
  30. return (
  31. <MobileSheetNav
  32. open={open}
  33. onOpenChange={onOpenChange}
  34. className="flex flex-col overflow-hidden h-[85dvh] md:max-h-[500px]"
  35. >
  36. <Tabs_Shadcn_
  37. defaultValue="organization"
  38. className="flex flex-col flex-1 min-h-0 overflow-hidden p-0"
  39. >
  40. <SheetHeader className="border-0 border-default p-0 shrink-0">
  41. <SheetTitle className="sr-only">Switch organization</SheetTitle>
  42. <TabsList_Shadcn_ className="w-full grid grid-cols-1 shrink-0">
  43. <TabsTrigger_Shadcn_
  44. value="organization"
  45. className="text-xs flex flex-col items-center gap-1.5 px-4 py-3 data-[state=active]:border-0"
  46. >
  47. <Boxes className="shrink-0" size={16} strokeWidth={1.5} />
  48. <span className="truncate max-w-full text-xs leading-tight" title={orgLabel}>
  49. {orgLabel}
  50. </span>
  51. </TabsTrigger_Shadcn_>
  52. </TabsList_Shadcn_>
  53. </SheetHeader>
  54. <TabsContent_Shadcn_
  55. value="organization"
  56. className="flex-1 min-h-0 overflow-hidden flex flex-col mt-0 p-0 data-[state=inactive]:hidden"
  57. >
  58. <OrganizationDropdown embedded className={embeddedClassName} onClose={onClose} />
  59. </TabsContent_Shadcn_>
  60. </Tabs_Shadcn_>
  61. </MobileSheetNav>
  62. )
  63. }