ConnectTabs.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { FileJson2 } from 'lucide-react'
  2. import { isValidElement, ReactNode } from 'react'
  3. import { Tabs_Shadcn_, TabsContent_Shadcn_, TabsList_Shadcn_, TabsTrigger_Shadcn_ } from 'ui'
  4. interface ConnectTabTriggerProps {
  5. value: string
  6. }
  7. interface ConnectTabTriggersProps {
  8. children: ReactNode[]
  9. }
  10. interface ConnectFileTabProps {
  11. children: ReactNode[]
  12. value?: string
  13. onValueChange?: (value: string) => void
  14. }
  15. interface ConnectTabContentProps {
  16. children: ReactNode
  17. value: string
  18. }
  19. export const ConnectTabs = ({ children, value, onValueChange }: ConnectFileTabProps) => {
  20. const firstChild = children[0]
  21. const defaultValue = isValidElement(firstChild)
  22. ? (firstChild.props as any)?.children[0]?.props?.value || ''
  23. : null
  24. return (
  25. <Tabs_Shadcn_ defaultValue={defaultValue} value={value} onValueChange={onValueChange}>
  26. {children}
  27. </Tabs_Shadcn_>
  28. )
  29. }
  30. export const ConnectTabTrigger = ({ value }: ConnectTabTriggerProps) => {
  31. return (
  32. <TabsTrigger_Shadcn_
  33. value={value}
  34. className="flex items-center gap-1 text-xs px-0 data-[state=active]:bg-transparent py-2.5"
  35. >
  36. <FileJson2 size={15} className="text-foreground-muted" />
  37. {value}
  38. </TabsTrigger_Shadcn_>
  39. )
  40. }
  41. export const ConnectTabTriggers = ({ children }: ConnectTabTriggersProps) => {
  42. return (
  43. <TabsList_Shadcn_ className="bg-surface-100 px-5 rounded-lg rounded-b-none gap-5">
  44. {children}
  45. </TabsList_Shadcn_>
  46. )
  47. }
  48. export const ConnectTabContent = ({ value, children }: ConnectTabContentProps) => {
  49. return (
  50. <TabsContent_Shadcn_ value={value} className="p-3 mt-1 max-h-72 overflow-scroll">
  51. {children}
  52. </TabsContent_Shadcn_>
  53. )
  54. }