form-render.tsx 931 B

1234567891011121314151617181920212223242526272829303132333435
  1. /**
  2. * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
  3. * SPDX-License-Identifier: MIT
  4. */
  5. import { useEffect } from 'react';
  6. import { FlowNodeFormData, FormModel } from '@flowgram.ai/form-core';
  7. import { FlowNodeEntity } from '@flowgram.ai/document';
  8. import { PlaygroundContext, useRefresh } from '@flowgram.ai/core';
  9. interface FormRenderProps {
  10. node: FlowNodeEntity;
  11. playgroundContext?: PlaygroundContext;
  12. }
  13. function getFormModelFromNode(node: FlowNodeEntity) {
  14. return node.getData(FlowNodeFormData)?.getFormModel<FormModel>();
  15. }
  16. export function FormRender({ node }: FormRenderProps): any {
  17. const refresh = useRefresh();
  18. const formModel = getFormModelFromNode(node);
  19. useEffect(() => {
  20. const disposable = formModel?.onInitialized(() => {
  21. refresh();
  22. });
  23. return () => {
  24. disposable.dispose();
  25. };
  26. }, [formModel]);
  27. return formModel?.initialized ? formModel.render() : null;
  28. }