DocsMobileNav.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { Menu } from 'lucide-react'
  2. import { useEffect, useState } from 'react'
  3. import { Button, Sheet, SheetContent, SheetHeader, SheetTitle } from 'ui'
  4. import type { ShowApiKey } from '../../Docs/Docs.types'
  5. import { LangSelector } from '../../Docs/LangSelector'
  6. import { DocsMenu } from '@/components/interfaces/Integrations/DataApi/DocsMenu'
  7. import { ProductMenuGroup } from '@/components/ui/ProductMenu/ProductMenu.types'
  8. interface DocsMobileNavProps {
  9. activePage: string
  10. menu: Array<ProductMenuGroup>
  11. selectedLang: 'js' | 'bash'
  12. selectedApiKey: ShowApiKey
  13. setSelectedLang: (lang: 'js' | 'bash') => void
  14. setSelectedApiKey: (key: ShowApiKey) => void
  15. }
  16. export const DocsMobileNav = ({
  17. activePage,
  18. menu,
  19. selectedLang,
  20. selectedApiKey,
  21. setSelectedLang,
  22. setSelectedApiKey,
  23. }: DocsMobileNavProps) => {
  24. const [open, setOpen] = useState(false)
  25. // Close mobile nav when the active page changes
  26. useEffect(() => {
  27. setOpen(false)
  28. }, [activePage])
  29. return (
  30. <>
  31. <div className="sticky top-0 z-10 flex lg:hidden items-center border-b bg-surface-100 px-4 py-3">
  32. <Button type="default" icon={<Menu size={16} />} onClick={() => setOpen(true)}>
  33. Menu
  34. </Button>
  35. </div>
  36. <Sheet open={open} onOpenChange={setOpen}>
  37. <SheetContent side="left" size="content" className="w-72 overflow-y-auto">
  38. <SheetHeader className="border-b-0">
  39. <SheetTitle>Data API Docs</SheetTitle>
  40. </SheetHeader>
  41. <div className="flex flex-col gap-y-6 px-5 pb-6">
  42. <LangSelector
  43. selectedLang={selectedLang}
  44. selectedApiKey={selectedApiKey}
  45. setSelectedLang={setSelectedLang}
  46. setSelectedApiKey={setSelectedApiKey}
  47. />
  48. <DocsMenu activePage={activePage} menu={menu} />
  49. </div>
  50. </SheetContent>
  51. </Sheet>
  52. </>
  53. )
  54. }