12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import type { FC } from 'react'
- import { memo, useEffect, useState } from 'react'
- import { useTranslation } from 'react-i18next'
- import {
- RiArrowGoBackLine,
- RiArrowGoForwardFill,
- } from '@remixicon/react'
- import TipPopup from '../operator/tip-popup'
- import { useWorkflowHistoryStore } from '../workflow-history-store'
- import Divider from '../../base/divider'
- import { useNodesReadOnly } from '@/app/components/workflow/hooks'
- import ViewWorkflowHistory from '@/app/components/workflow/header/view-workflow-history'
- import classNames from '@/utils/classnames'
- export type UndoRedoProps = { handleUndo: () => void; handleRedo: () => void }
- const UndoRedo: FC<UndoRedoProps> = ({ handleUndo, handleRedo }) => {
- const { t } = useTranslation()
- const { store } = useWorkflowHistoryStore()
- const [buttonsDisabled, setButtonsDisabled] = useState({ undo: true, redo: true })
- useEffect(() => {
- const unsubscribe = store.temporal.subscribe((state) => {
- setButtonsDisabled({
- undo: state.pastStates.length === 0,
- redo: state.futureStates.length === 0,
- })
- })
- return () => unsubscribe()
- }, [store])
- const { nodesReadOnly } = useNodesReadOnly()
- return (
- <div className='flex items-center space-x-0.5 p-0.5 backdrop-blur-[5px] rounded-lg border-[0.5px] border-components-actionbar-border bg-components-actionbar-bg shadow-lg'>
- <TipPopup title={t('workflow.common.undo')!} shortcuts={['ctrl', 'z']}>
- <div
- data-tooltip-id='workflow.undo'
- className={
- classNames('flex items-center px-1.5 w-8 h-8 rounded-md system-sm-medium text-text-tertiary hover:bg-state-base-hover hover:text-text-secondary cursor-pointer select-none',
- (nodesReadOnly || buttonsDisabled.undo)
- && 'hover:bg-transparent text-text-disabled hover:text-text-disabled cursor-not-allowed')}
- onClick={() => !nodesReadOnly && !buttonsDisabled.undo && handleUndo()}
- >
- <RiArrowGoBackLine className='h-4 w-4' />
- </div>
- </TipPopup >
- <TipPopup title={t('workflow.common.redo')!} shortcuts={['ctrl', 'y']}>
- <div
- data-tooltip-id='workflow.redo'
- className={
- classNames('flex items-center px-1.5 w-8 h-8 rounded-md system-sm-medium text-text-tertiary hover:bg-state-base-hover hover:text-text-secondary cursor-pointer select-none',
- (nodesReadOnly || buttonsDisabled.redo)
- && 'hover:bg-transparent text-text-disabled hover:text-text-disabled cursor-not-allowed',
- )}
- onClick={() => !nodesReadOnly && !buttonsDisabled.redo && handleRedo()}
- >
- <RiArrowGoForwardFill className='h-4 w-4' />
- </div>
- </TipPopup>
- <Divider type='vertical' className="h-3.5 mx-0.5" />
- <ViewWorkflowHistory />
- </div >
- )
- }
- export default memo(UndoRedo)
|