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.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. export type HeaderInRestoringProps = {
  23. onRestoreSettled?: () => void
  24. }
  25. const HeaderInRestoring = ({
  26. onRestoreSettled,
  27. }: HeaderInRestoringProps) => {
  28. const { t } = useTranslation()
  29. const workflowStore = useWorkflowStore()
  30. const appDetail = useAppStore.getState().appDetail
  31. const invalidAllLastRun = useInvalidAllLastRun(appDetail!.id)
  32. const {
  33. deleteAllInspectVars,
  34. } = workflowStore.getState()
  35. const currentVersion = useStore(s => s.currentVersion)
  36. const setShowWorkflowVersionHistoryPanel = useStore(s => s.setShowWorkflowVersionHistoryPanel)
  37. const {
  38. handleLoadBackupDraft,
  39. } = useWorkflowRun()
  40. const { handleSyncWorkflowDraft } = useNodesSyncDraft()
  41. const handleCancelRestore = useCallback(() => {
  42. handleLoadBackupDraft()
  43. workflowStore.setState({ isRestoring: false })
  44. setShowWorkflowVersionHistoryPanel(false)
  45. }, [workflowStore, handleLoadBackupDraft, setShowWorkflowVersionHistoryPanel])
  46. const handleRestore = useCallback(() => {
  47. setShowWorkflowVersionHistoryPanel(false)
  48. workflowStore.setState({ isRestoring: false })
  49. workflowStore.setState({ backupDraft: undefined })
  50. handleSyncWorkflowDraft(true, false, {
  51. onSuccess: () => {
  52. Toast.notify({
  53. type: 'success',
  54. message: t('workflow.versionHistory.action.restoreSuccess'),
  55. })
  56. },
  57. onError: () => {
  58. Toast.notify({
  59. type: 'error',
  60. message: t('workflow.versionHistory.action.restoreFailure'),
  61. })
  62. },
  63. onSettled: () => {
  64. onRestoreSettled?.()
  65. },
  66. })
  67. deleteAllInspectVars()
  68. invalidAllLastRun()
  69. }, [setShowWorkflowVersionHistoryPanel, workflowStore, handleSyncWorkflowDraft, deleteAllInspectVars, invalidAllLastRun, t, onRestoreSettled])
  70. return (
  71. <>
  72. <div>
  73. <RestoringTitle />
  74. </div>
  75. <div className='flex items-center justify-end gap-x-2'>
  76. <Button
  77. onClick={handleRestore}
  78. disabled={!currentVersion || currentVersion.version === WorkflowVersion.Draft}
  79. variant='primary'
  80. >
  81. {t('workflow.common.restore')}
  82. </Button>
  83. <Button
  84. className='text-components-button-secondary-accent-text'
  85. onClick={handleCancelRestore}
  86. >
  87. <div className='flex items-center gap-x-0.5'>
  88. <RiHistoryLine className='h-4 w-4' />
  89. <span className='px-0.5'>{t('workflow.common.exitVersions')}</span>
  90. </div>
  91. </Button>
  92. </div>
  93. </>
  94. )
  95. }
  96. export default HeaderInRestoring