Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

version-history-button.tsx 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import React, { type FC, useCallback } from 'react'
  2. import { RiHistoryLine } from '@remixicon/react'
  3. import { useTranslation } from 'react-i18next'
  4. import { useKeyPress } from 'ahooks'
  5. import Button from '../../base/button'
  6. import Tooltip from '../../base/tooltip'
  7. import { getKeyboardKeyCodeBySystem } from '../utils'
  8. import useTheme from '@/hooks/use-theme'
  9. import cn from '@/utils/classnames'
  10. type VersionHistoryButtonProps = {
  11. onClick: () => Promise<unknown> | unknown
  12. }
  13. const VERSION_HISTORY_SHORTCUT = ['⌘', '⇧', 'H']
  14. const PopupContent = React.memo(() => {
  15. const { t } = useTranslation()
  16. return (
  17. <div className='flex items-center gap-x-1'>
  18. <div className='system-xs-medium px-0.5 text-text-secondary'>
  19. {t('workflow.common.versionHistory')}
  20. </div>
  21. <div className='flex items-center gap-x-0.5'>
  22. {VERSION_HISTORY_SHORTCUT.map(key => (
  23. <span
  24. key={key}
  25. className='system-kbd rounded-[4px] bg-components-kbd-bg-white px-[1px] text-text-tertiary'
  26. >
  27. {key}
  28. </span>
  29. ))}
  30. </div>
  31. </div>
  32. )
  33. })
  34. PopupContent.displayName = 'PopupContent'
  35. const VersionHistoryButton: FC<VersionHistoryButtonProps> = ({
  36. onClick,
  37. }) => {
  38. const { theme } = useTheme()
  39. const handleViewVersionHistory = useCallback(async () => {
  40. await onClick?.()
  41. }, [onClick])
  42. useKeyPress(`${getKeyboardKeyCodeBySystem('ctrl')}.shift.h`, (e) => {
  43. e.preventDefault()
  44. handleViewVersionHistory()
  45. },
  46. { exactMatch: true, useCapture: true })
  47. return <Tooltip
  48. popupContent={<PopupContent />}
  49. noDecoration
  50. popupClassName='rounded-lg border-[0.5px] border-components-panel-border bg-components-tooltip-bg
  51. shadow-lg shadow-shadow-shadow-5 backdrop-blur-[5px] p-1.5'
  52. >
  53. <Button
  54. className={cn(
  55. 'p-2',
  56. theme === 'dark' && 'rounded-lg border border-black/5 bg-white/10 backdrop-blur-sm',
  57. )}
  58. onClick={handleViewVersionHistory}
  59. >
  60. <RiHistoryLine className='h-4 w-4 text-components-button-secondary-text' />
  61. </Button>
  62. </Tooltip>
  63. }
  64. export default VersionHistoryButton