use-editor-props.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import { useMemo } from 'react';
  2. import { createMinimapPlugin } from '@flowgram.ai/minimap-plugin';
  3. import { createFreeSnapPlugin } from '@flowgram.ai/free-snap-plugin';
  4. import { Field, FreeLayoutProps } from '@flowgram.ai/free-layout-editor';
  5. import { NodeRender } from './node-render';
  6. import { nodeRegistries } from './node-registries';
  7. import { initialData } from './initial-data';
  8. export const useEditorProps = () =>
  9. useMemo<FreeLayoutProps>(
  10. () => ({
  11. plugins: () => [
  12. createMinimapPlugin({
  13. disableLayer: true,
  14. canvasStyle: {
  15. canvasWidth: 100,
  16. canvasHeight: 50,
  17. canvasPadding: 50,
  18. },
  19. }),
  20. createFreeSnapPlugin({}),
  21. ],
  22. onAllLayersRendered: (ctx) => {
  23. ctx.tools.fitView(false);
  24. },
  25. materials: {
  26. renderDefaultNode: NodeRender,
  27. },
  28. nodeRegistries,
  29. canDeleteNode: () => true,
  30. canDeleteLine: () => true,
  31. initialData,
  32. /**
  33. * Node engine enable, you can configure formMeta in the FlowNodeRegistry
  34. */
  35. nodeEngine: {
  36. enable: true,
  37. },
  38. /**
  39. * Redo/Undo enable
  40. */
  41. history: {
  42. enable: true,
  43. enableChangeNode: true, // Listen Node engine data change
  44. },
  45. getNodeDefaultRegistry(type) {
  46. return {
  47. type,
  48. meta: {
  49. defaultExpanded: true,
  50. },
  51. formMeta: {
  52. /**
  53. * Render form
  54. */
  55. render: () => (
  56. <>
  57. <Field<string> name="title">{({ field }) => <div>{field.value}</div>}</Field>
  58. </>
  59. ),
  60. },
  61. };
  62. },
  63. }),
  64. []
  65. );