Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

header-in-restoring.tsx 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import {
  2. useCallback,
  3. } from 'react'
  4. import { RiHistoryLine } from '@remixicon/react'
  5. import { useTranslation } from 'react-i18next'
  6. import {
  7. useStore,
  8. useWorkflowStore,
  9. } from '../store'
  10. import {
  11. WorkflowVersion,
  12. } from '../types'
  13. import {
  14. useNodesSyncDraft,
  15. useWorkflowRun,
  16. } from '../hooks'
  17. import Toast from '../../base/toast'
  18. import RestoringTitle from './restoring-title'
  19. import Button from '@/app/components/base/button'
  20. import { useStore as useAppStore } from '@/app/components/app/store'
  21. import { useInvalidAllLastRun } from '@/service/use-workflow'
  22. import useTheme from '@/hooks/use-theme'
  23. import cn from '@/utils/classnames'
  24. export type HeaderInRestoringProps = {
  25. onRestoreSettled?: () => void
  26. }
  27. const HeaderInRestoring = ({
  28. onRestoreSettled,
  29. }: HeaderInRestoringProps) => {
  30. const { t } = useTranslation()
  31. const { theme } = useTheme()
  32. const workflowStore = useWorkflowStore()
  33. const appDetail = useAppStore.getState().appDetail
  34. const invalidAllLastRun = useInvalidAllLastRun(appDetail!.id)
  35. const {
  36. deleteAllInspectVars,
  37. } = workflowStore.getState()
  38. const currentVersion = useStore(s => s.currentVersion)
  39. const setShowWorkflowVersionHistoryPanel = useStore(s => s.setShowWorkflowVersionHistoryPanel)
  40. const {
  41. handleLoadBackupDraft,
  42. } = useWorkflowRun()
  43. const { handleSyncWorkflowDraft } = useNodesSyncDraft()
  44. const handleCancelRestore = useCallback(() => {
  45. handleLoadBackupDraft()
  46. workflowStore.setState({ isRestoring: false })
  47. setShowWorkflowVersionHistoryPanel(false)
  48. }, [workflowStore, handleLoadBackupDraft, setShowWorkflowVersionHistoryPanel])
  49. const handleRestore = useCallback(() => {
  50. setShowWorkflowVersionHistoryPanel(false)
  51. workflowStore.setState({ isRestoring: false })
  52. workflowStore.setState({ backupDraft: undefined })
  53. handleSyncWorkflowDraft(true, false, {
  54. onSuccess: () => {
  55. Toast.notify({
  56. type: 'success',
  57. message: t('workflow.versionHistory.action.restoreSuccess'),
  58. })
  59. },
  60. onError: () => {
  61. Toast.notify({
  62. type: 'error',
  63. message: t('workflow.versionHistory.action.restoreFailure'),
  64. })
  65. },
  66. onSettled: () => {
  67. onRestoreSettled?.()
  68. },
  69. })
  70. deleteAllInspectVars()
  71. invalidAllLastRun()
  72. }, [setShowWorkflowVersionHistoryPanel, workflowStore, handleSyncWorkflowDraft, deleteAllInspectVars, invalidAllLastRun, t, onRestoreSettled])
  73. return (
  74. <>
  75. <div>
  76. <RestoringTitle />
  77. </div>
  78. <div className=' flex items-center justify-end gap-x-2'>
  79. <Button
  80. onClick={handleRestore}
  81. disabled={!currentVersion || currentVersion.version === WorkflowVersion.Draft}
  82. variant='primary'
  83. className={cn(
  84. theme === 'dark' && 'rounded-lg border border-black/5 bg-white/10 backdrop-blur-sm',
  85. )}
  86. >
  87. {t('workflow.common.restore')}
  88. </Button>
  89. <Button
  90. onClick={handleCancelRestore}
  91. className={cn(
  92. 'text-components-button-secondary-accent-text',
  93. theme === 'dark' && 'rounded-lg border border-black/5 bg-white/10 backdrop-blur-sm',
  94. )}
  95. >
  96. <div className='flex items-center gap-x-0.5'>
  97. <RiHistoryLine className='h-4 w-4' />
  98. <span className='px-0.5'>{t('workflow.common.exitVersions')}</span>
  99. </div>
  100. </Button>
  101. </div>
  102. </>
  103. )
  104. }
  105. export default HeaderInRestoring