form-render.tsx 831 B

123456789101112131415161718192021222324252627282930
  1. import { useEffect } from 'react';
  2. import { FlowNodeFormData, FormModel } from '@flowgram.ai/form-core';
  3. import { FlowNodeEntity } from '@flowgram.ai/document';
  4. import { PlaygroundContext, useRefresh } from '@flowgram.ai/core';
  5. interface FormRenderProps {
  6. node: FlowNodeEntity;
  7. playgroundContext?: PlaygroundContext;
  8. }
  9. function getFormModelFromNode(node: FlowNodeEntity) {
  10. return node.getData(FlowNodeFormData)?.getFormModel<FormModel>();
  11. }
  12. export function FormRender({ node }: FormRenderProps): any {
  13. const refresh = useRefresh();
  14. const formModel = getFormModelFromNode(node);
  15. useEffect(() => {
  16. const disposable = formModel?.onInitialized(() => {
  17. refresh();
  18. });
  19. return () => {
  20. disposable.dispose();
  21. };
  22. }, [formModel]);
  23. return formModel?.initialized ? formModel.render() : null;
  24. }