2025-05-12 15:46:22 +08:00

80 lines
2.7 KiB
TypeScript

import { useState, useEffect } from 'react';
import { useRefresh } from '@flowgram.ai/free-layout-editor';
import { useClientContext } from '@flowgram.ai/free-layout-editor';
import { Tooltip, IconButton, Divider } from '@douyinfe/semi-ui';
import { IconUndo, IconRedo } from '@douyinfe/semi-icons';
import { AddNode } from '../add-node';
import { ZoomSelect } from './zoom-select';
import { SwitchLine } from './switch-line';
import { ToolContainer, ToolSection } from './styles';
import { Save } from './save';
import { Run } from './run';
import { Readonly } from './readonly';
import { MinimapSwitch } from './minimap-switch';
import { Minimap } from './minimap';
import { Interactive } from './interactive';
import { FitView } from './fit-view';
import { Comment } from './comment';
import { AutoLayout } from './auto-layout';
export const DemoTools = () => {
const { history, playground } = useClientContext();
const [canUndo, setCanUndo] = useState(false);
const [canRedo, setCanRedo] = useState(false);
const [minimapVisible, setMinimapVisible] = useState(true);
useEffect(() => {
const disposable = history.undoRedoService.onChange(() => {
setCanUndo(history.canUndo());
setCanRedo(history.canRedo());
});
return () => disposable.dispose();
}, [history]);
const refresh = useRefresh();
useEffect(() => {
const disposable = playground.config.onReadonlyOrDisabledChange(() => refresh());
return () => disposable.dispose();
}, [playground]);
return (
<ToolContainer className="demo-free-layout-tools">
<ToolSection>
<Interactive />
<AutoLayout />
<SwitchLine />
<ZoomSelect />
<FitView />
<MinimapSwitch minimapVisible={minimapVisible} setMinimapVisible={setMinimapVisible} />
<Minimap visible={minimapVisible} />
<Readonly />
<Comment />
<Tooltip content="Undo">
<IconButton
type="tertiary"
theme="borderless"
icon={<IconUndo />}
disabled={!canUndo || playground.config.readonly}
onClick={() => history.undo()}
/>
</Tooltip>
<Tooltip content="Redo">
<IconButton
type="tertiary"
theme="borderless"
icon={<IconRedo />}
disabled={!canRedo || playground.config.readonly}
onClick={() => history.redo()}
/>
</Tooltip>
<Divider layout="vertical" style={{ height: '16px' }} margin={3} />
<AddNode disabled={playground.config.readonly} />
<Divider layout="vertical" style={{ height: '16px' }} margin={3} />
<Save disabled={playground.config.readonly} />
<Run />
</ToolSection>
</ToolContainer>
);
};