use-editor-props.tsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. enableDisplayAllNodes: true,
  16. }),
  17. ],
  18. nodeRegistries,
  19. initialData,
  20. materials: {
  21. renderDefaultNode: NodeRender,
  22. components: {
  23. ...defaultFixedSemiMaterials,
  24. [FlowRendererKey.ADDER]: Adder,
  25. },
  26. },
  27. onAllLayersRendered: (ctx) => {
  28. setTimeout(() => {
  29. ctx.playground.config.fitView(ctx.document.root.bounds.pad(30));
  30. }, 10);
  31. },
  32. /**
  33. * Get the default node registry, which will be merged with the 'nodeRegistries'
  34. * 提供默认的节点注册,这个会和 nodeRegistries 做合并
  35. */
  36. getNodeDefaultRegistry(type) {
  37. return {
  38. type,
  39. meta: {
  40. defaultExpanded: true,
  41. },
  42. formMeta: {
  43. /**
  44. * Render form
  45. */
  46. render: () => (
  47. <>
  48. <Field<string> name="title">{({ field }) => <div>{field.value}</div>}</Field>
  49. <Field<string> name="content">
  50. <input />
  51. </Field>
  52. </>
  53. ),
  54. },
  55. };
  56. },
  57. /**
  58. * Redo/Undo enable
  59. */
  60. history: {
  61. enable: true,
  62. enableChangeNode: true, // Listen Node engine data change
  63. onApply: (ctx) => {
  64. if (ctx.document.disposed) return;
  65. // Listen change to trigger auto save
  66. console.log('auto save: ', ctx.document.toJSON());
  67. },
  68. },
  69. /**
  70. * Node engine enable, you can configure formMeta in the FlowNodeRegistry
  71. */ nodeEngine: {
  72. enable: true,
  73. },
  74. }),
  75. []
  76. );
  77. }