NewTokenButton.tsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { ChevronDown } from 'lucide-react'
  2. import { useState } from 'react'
  3. import {
  4. Button,
  5. DropdownMenu,
  6. DropdownMenuContent,
  7. DropdownMenuItem,
  8. DropdownMenuTrigger,
  9. } from 'ui'
  10. import { NewTokenDialog } from './NewTokenDialog'
  11. import { type NewAccessToken } from '@/data/access-tokens/access-tokens-create-mutation'
  12. export interface NewAccessTokenButtonProps {
  13. onCreateToken: (token: NewAccessToken) => void
  14. }
  15. export const NewTokenButton = ({ onCreateToken }: NewAccessTokenButtonProps) => {
  16. const [visible, setVisible] = useState(false)
  17. const [tokenScope, setTokenScope] = useState<'V0' | undefined>(undefined)
  18. return (
  19. <>
  20. <div className="flex items-center">
  21. <Button
  22. className="rounded-r-none px-3"
  23. onClick={() => {
  24. setTokenScope(undefined)
  25. setVisible(true)
  26. }}
  27. >
  28. Generate new token
  29. </Button>
  30. <DropdownMenu>
  31. <DropdownMenuTrigger asChild>
  32. <Button
  33. type="primary"
  34. title="Choose token scope"
  35. className="rounded-l-none px-[4px] py-[5px]"
  36. icon={<ChevronDown />}
  37. />
  38. </DropdownMenuTrigger>
  39. <DropdownMenuContent align="end" side="bottom">
  40. <DropdownMenuItem
  41. key="experimental-token"
  42. onClick={() => {
  43. setTokenScope('V0')
  44. setVisible(true)
  45. }}
  46. >
  47. <div className="space-y-1">
  48. <p className="block text-foreground">Generate token for experimental API</p>
  49. </div>
  50. </DropdownMenuItem>
  51. </DropdownMenuContent>
  52. </DropdownMenu>
  53. </div>
  54. <NewTokenDialog
  55. open={visible}
  56. onOpenChange={setVisible}
  57. tokenScope={tokenScope}
  58. onCreateToken={onCreateToken}
  59. />
  60. </>
  61. )
  62. }