agent-log-nav-more.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { useState } from 'react'
  2. import { RiMoreLine } from '@remixicon/react'
  3. import {
  4. PortalToFollowElem,
  5. PortalToFollowElemContent,
  6. PortalToFollowElemTrigger,
  7. } from '@/app/components/base/portal-to-follow-elem'
  8. import Button from '@/app/components/base/button'
  9. import type { AgentLogItemWithChildren } from '@/types/workflow'
  10. type AgentLogNavMoreProps = {
  11. options: { id: string; label: string }[]
  12. onShowAgentOrToolLog: (detail?: AgentLogItemWithChildren) => void
  13. }
  14. const AgentLogNavMore = ({
  15. options,
  16. onShowAgentOrToolLog,
  17. }: AgentLogNavMoreProps) => {
  18. const [open, setOpen] = useState(false)
  19. return (
  20. <PortalToFollowElem
  21. placement='bottom-start'
  22. offset={{
  23. mainAxis: 2,
  24. crossAxis: -54,
  25. }}
  26. open={open}
  27. onOpenChange={setOpen}
  28. >
  29. <PortalToFollowElemTrigger>
  30. <Button
  31. className='h-6 w-6'
  32. variant='ghost-accent'
  33. >
  34. <RiMoreLine className='h-4 w-4' />
  35. </Button>
  36. </PortalToFollowElemTrigger>
  37. <PortalToFollowElemContent>
  38. <div className='w-[136px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg'>
  39. {
  40. options.map(option => (
  41. <div
  42. key={option.id}
  43. className='system-md-regular flex h-8 cursor-pointer items-center rounded-lg px-2 text-text-secondary hover:bg-state-base-hover'
  44. onClick={() => {
  45. onShowAgentOrToolLog(option as AgentLogItemWithChildren)
  46. setOpen(false)
  47. }}
  48. >
  49. {option.label}
  50. </div>
  51. ))
  52. }
  53. </div>
  54. </PortalToFollowElemContent>
  55. </PortalToFollowElem>
  56. )
  57. }
  58. export default AgentLogNavMore