use-editor-props.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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: () => [createMinimapPlugin({}), createFreeSnapPlugin({})],
  12. onAllLayersRendered: (ctx) => {
  13. ctx.tools.fitView(false);
  14. },
  15. materials: {
  16. renderDefaultNode: NodeRender,
  17. },
  18. nodeRegistries,
  19. canDeleteNode: () => true,
  20. canDeleteLine: () => true,
  21. initialData,
  22. /**
  23. * Node engine enable, you can configure formMeta in the FlowNodeRegistry
  24. */
  25. nodeEngine: {
  26. enable: true,
  27. },
  28. /**
  29. * Redo/Undo enable
  30. */
  31. history: {
  32. enable: true,
  33. enableChangeNode: true, // Listen Node engine data change
  34. },
  35. getNodeDefaultRegistry(type) {
  36. return {
  37. type,
  38. meta: {
  39. defaultExpanded: true,
  40. },
  41. formMeta: {
  42. /**
  43. * Render form
  44. */
  45. render: () => (
  46. <>
  47. <Field<string> name="title">{({ field }) => <div>{field.value}</div>}</Field>
  48. </>
  49. ),
  50. },
  51. };
  52. },
  53. }),
  54. []
  55. );