step-2.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import '@flowgram.ai/free-layout-editor/index.css';
  2. import {
  3. FreeLayoutEditorProvider,
  4. EditorRenderer,
  5. useNodeRender,
  6. WorkflowNodeProps,
  7. WorkflowNodeRenderer,
  8. } from '@flowgram.ai/free-layout-editor';
  9. const NodeRender = (props: WorkflowNodeProps) => {
  10. const { form, selected } = useNodeRender();
  11. return (
  12. <WorkflowNodeRenderer
  13. style={{
  14. width: 280,
  15. minHeight: 88,
  16. height: 'auto',
  17. background: '#fff',
  18. border: '1px solid rgba(6, 7, 9, 0.15)',
  19. borderColor: selected ? '#4e40e5' : 'rgba(6, 7, 9, 0.15)',
  20. borderRadius: 8,
  21. boxShadow: '0 2px 6px 0 rgba(0, 0, 0, 0.04), 0 4px 12px 0 rgba(0, 0, 0, 0.02)',
  22. display: 'flex',
  23. flexDirection: 'column',
  24. justifyContent: 'center',
  25. position: 'relative',
  26. padding: 12,
  27. cursor: 'move',
  28. }}
  29. node={props.node}
  30. >
  31. {form?.render()}
  32. </WorkflowNodeRenderer>
  33. );
  34. };
  35. const FlowGramApp = () => (
  36. <FreeLayoutEditorProvider
  37. materials={{
  38. renderDefaultNode: NodeRender,
  39. }}
  40. nodeRegistries={[
  41. {
  42. type: 'custom',
  43. },
  44. ]}
  45. initialData={{
  46. nodes: [
  47. {
  48. id: '1',
  49. type: 'custom',
  50. meta: {
  51. position: { x: 250, y: 100 },
  52. },
  53. },
  54. ],
  55. edges: [],
  56. }}
  57. >
  58. <EditorRenderer />
  59. </FreeLayoutEditorProvider>
  60. );
  61. export default FlowGramApp;