AccessTokensLayout.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { useFlag } from 'common'
  2. import Link from 'next/link'
  3. import { useRouter } from 'next/router'
  4. import { PropsWithChildren } from 'react'
  5. import { NavMenu, NavMenuItem } from 'ui'
  6. import { PageContainer } from 'ui-patterns/PageContainer'
  7. import {
  8. PageHeader,
  9. PageHeaderDescription,
  10. PageHeaderMeta,
  11. PageHeaderNavigationTabs,
  12. PageHeaderSummary,
  13. PageHeaderTitle,
  14. } from 'ui-patterns/PageHeader'
  15. export const AccessTokensLayout = ({ children }: PropsWithChildren) => {
  16. const router = useRouter()
  17. const scopedTokensEnabled = useFlag('scopedPAT')
  18. const navigationItems = [
  19. {
  20. label: 'Classic Tokens',
  21. href: `/account/tokens`,
  22. id: 'classic-tokens',
  23. },
  24. ...(scopedTokensEnabled
  25. ? [
  26. {
  27. label: 'Scoped Tokens',
  28. href: `/account/tokens/scoped`,
  29. id: 'scoped-tokens',
  30. },
  31. ]
  32. : []),
  33. ]
  34. const title = 'Access Tokens'
  35. const description = 'Create and manage access tokens for API authentication.'
  36. return (
  37. <>
  38. <PageHeader size="small">
  39. <PageHeaderMeta>
  40. <PageHeaderSummary>
  41. <PageHeaderTitle>{title}</PageHeaderTitle>
  42. <PageHeaderDescription>{description}</PageHeaderDescription>
  43. </PageHeaderSummary>
  44. </PageHeaderMeta>
  45. {navigationItems.length > 0 && (
  46. <PageHeaderNavigationTabs>
  47. <NavMenu>
  48. {navigationItems.map((item) => {
  49. const isActive = router.asPath.split('?')[0] === item.href
  50. return (
  51. <NavMenuItem key={item.label} active={isActive}>
  52. <Link href={item.href}>{item.label}</Link>
  53. </NavMenuItem>
  54. )
  55. })}
  56. </NavMenu>
  57. </PageHeaderNavigationTabs>
  58. )}
  59. </PageHeader>
  60. <PageContainer size="small" className="pt-8 pb-16">
  61. {children}
  62. </PageContainer>
  63. </>
  64. )
  65. }