use-editor-props.tsx 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import '@flowgram.ai/fixed-layout-editor/index.css';
  2. import { useMemo } from 'react';
  3. import { createMinimapPlugin } from '@flowgram.ai/minimap-plugin';
  4. import { defaultFixedSemiMaterials } from '@flowgram.ai/fixed-semi-materials';
  5. import { FlowRendererKey, FixedLayoutProps, Field } from '@flowgram.ai/fixed-layout-editor';
  6. import { NodeRender } from './node-render';
  7. import { nodeRegistries } from './node-registries';
  8. import { initialData } from './initial-data';
  9. import { Adder } from './adder';
  10. export function useEditorProps(): FixedLayoutProps {
  11. return useMemo<FixedLayoutProps>(
  12. () => ({
  13. plugins: () => [
  14. createMinimapPlugin({
  15. disableLayer: true,
  16. enableDisplayAllNodes: true,
  17. canvasStyle: {
  18. canvasWidth: 100,
  19. canvasHeight: 50,
  20. canvasPadding: 50,
  21. },
  22. }),
  23. ],
  24. nodeRegistries,
  25. initialData,
  26. materials: {
  27. renderDefaultNode: NodeRender,
  28. components: {
  29. ...defaultFixedSemiMaterials,
  30. [FlowRendererKey.ADDER]: Adder,
  31. },
  32. },
  33. onAllLayersRendered: (ctx) => {
  34. setTimeout(() => {
  35. ctx.playground.config.fitView(ctx.document.root.bounds.pad(30));
  36. }, 10);
  37. },
  38. /**
  39. * Get the default node registry, which will be merged with the 'nodeRegistries'
  40. * 提供默认的节点注册,这个会和 nodeRegistries 做合并
  41. */
  42. getNodeDefaultRegistry(type) {
  43. return {
  44. type,
  45. meta: {
  46. defaultExpanded: true,
  47. },
  48. formMeta: {
  49. /**
  50. * Render form
  51. */
  52. render: () => (
  53. <>
  54. <Field<string> name="title">{({ field }) => <div>{field.value}</div>}</Field>
  55. <Field<string> name="content">
  56. <input />
  57. </Field>
  58. </>
  59. ),
  60. },
  61. };
  62. },
  63. /**
  64. * Redo/Undo enable
  65. */
  66. history: {
  67. enable: true,
  68. enableChangeNode: true, // Listen Node engine data change
  69. onApply: (ctx) => {
  70. if (ctx.document.disposed) return;
  71. // Listen change to trigger auto save
  72. console.log('auto save: ', ctx.document.toJSON());
  73. },
  74. },
  75. /**
  76. * Node engine enable, you can configure formMeta in the FlowNodeRegistry
  77. */ nodeEngine: {
  78. enable: true,
  79. },
  80. }),
  81. []
  82. );
  83. }