diff --git a/packages/plugins/@nocobase/plugin-block-grid-card/src/client/models/GridCardItemModel.tsx b/packages/plugins/@nocobase/plugin-block-grid-card/src/client/models/GridCardItemModel.tsx index 3a69edeca9a..b59d3a6a893 100644 --- a/packages/plugins/@nocobase/plugin-block-grid-card/src/client/models/GridCardItemModel.tsx +++ b/packages/plugins/@nocobase/plugin-block-grid-card/src/client/models/GridCardItemModel.tsx @@ -10,6 +10,7 @@ import { PropertyMetaFactory, createRecordMetaFactory, + ForkFlowModel, DndProvider, Droppable, FlowModelRenderer, @@ -31,6 +32,8 @@ type GridItemModelStructure = { }; }; +const recordIdentityByFork = new WeakMap, string>(); + export class GridCardItemModel extends FlowModel { onInit(options: any): void { super.onInit(options); @@ -125,7 +128,18 @@ export class GridCardItemModel extends FlowModel { wrap > {this.mapSubModels('actions', (action, i) => { - const fork = action.createFork({}, `${index}`); + const slotKey = `${index}`; + const recordIdentity = + this.context.collection?.getFilterByTK?.(record) || `${record?.id ?? ''}-${slotKey}`; + const cachedFork = action.getFork(slotKey); + if (cachedFork && recordIdentityByFork.get(cachedFork as any) !== recordIdentity) { + cachedFork.dispose(); + } + + const fork = action.createFork({}, slotKey); + recordIdentityByFork.set(fork as any, recordIdentity); + fork.invalidateFlowCache('beforeRender'); + if (fork.hidden && !isConfigMode) { return; } @@ -161,6 +175,7 @@ export class GridCardItemModel extends FlowModel { >