You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

header-in-restoring.tsx 2.7KB

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