Jelajahi Sumber

fix(demo): fixed layout demo node delete check (#162)

xiamidaxia 8 bulan lalu
induk
melakukan
0bd90c2fce

+ 8 - 5
apps/demo-fixed-layout/src/form-components/form-header/index.tsx

@@ -1,4 +1,4 @@
-import { useContext, useCallback } from 'react';
+import { useContext, useCallback, useMemo } from 'react';
 
 import { Field, FieldRenderProps, useClientContext } from '@flowgram.ai/fixed-layout-editor';
 import { IconButton, Dropdown, Typography, Button } from '@douyinfe/semi-ui';
@@ -34,16 +34,19 @@ function DropdownContent() {
     },
     [clientContext, node]
   );
+  const deleteDisabled = useMemo(() => {
+    if (registry.canDelete) {
+      return !registry.canDelete(clientContext, node);
+    }
+    return registry.meta!.deleteDisable;
+  }, [registry, node]);
 
   return (
     <Dropdown.Menu>
       <Dropdown.Item onClick={handleCopy} disabled={registry.meta!.copyDisable === true}>
         Copy
       </Dropdown.Item>
-      <Dropdown.Item
-        onClick={handleDelete}
-        disabled={!!(registry.canDelete?.(clientContext, node) || registry.meta!.deleteDisable)}
-      >
+      <Dropdown.Item onClick={handleDelete} disabled={deleteDisabled}>
         Delete
       </Dropdown.Item>
     </Dropdown.Menu>

+ 6 - 0
apps/demo-fixed-layout/src/nodes/block/index.ts

@@ -15,6 +15,12 @@ export const BlockNodeRegistry: FlowNodeRegistry = {
     description: 'Execute the branch when the condition is met.',
   },
   canAdd: () => false,
+  canDelete: (ctx, node) => {
+    if (node.originParent!.flowNodeType === 'tryCatch') {
+      return node.parent!.blocks.length >= 2;
+    }
+    return node.parent!.blocks.length >= 3;
+  },
   onAdd(ctx, from) {
     const isTryCatch = from.flowNodeType === 'tryCatch';
     return {

+ 1 - 1
apps/demo-fixed-layout/src/nodes/end/index.ts

@@ -54,7 +54,7 @@ export const EndNodeRegistry: FlowNodeRegistry = {
     return true;
   },
   canDelete(ctx, node) {
-    return node.parent === ctx.document.root;
+    return node.parent !== ctx.document.root;
   },
   onAdd(ctx, from) {
     return {