fix: quick edit not working in some case (#10007)

This commit is contained in:
gchust
2026-07-07 09:01:23 +08:00
committed by GitHub
parent 92674fe2e5
commit 21960a8cd2
3 changed files with 44 additions and 19 deletions
@@ -22,7 +22,6 @@ import {
createRecordResolveOnServerWithLocal,
} from '@nocobase/flow-engine';
import { Button, Form, Skeleton, Space } from 'antd';
import _ from 'lodash';
import React from 'react';
import { FieldModel } from '../../base/FieldModel';
import { FormComponent } from './FormBlockModel';
@@ -46,8 +45,6 @@ export class QuickEditFormModel extends FlowModel {
declare resource: SingleRecordResource;
declare collection: Collection;
now: number = Date.now();
viewContainer: any;
__onSubmitSuccess;
_fieldProps: any;
@@ -89,21 +86,22 @@ export class QuickEditFormModel extends FlowModel {
onOk,
sourceFieldModelUid,
} = options;
const model = flowEngine.createModel({
use: 'QuickEditFormModel',
stepParams: {
quickEditFormSettings: {
init: {
dataSourceKey,
collectionName,
fieldPath,
const sourceFieldModel = sourceFieldModelUid ? flowEngine.getModel<FlowModel>(sourceFieldModelUid) : undefined;
const model = flowEngine.createModel(
{
use: 'QuickEditFormModel',
stepParams: {
quickEditFormSettings: {
init: {
dataSourceKey,
collectionName,
fieldPath,
},
},
},
},
}) as QuickEditFormModel;
console.log('QuickEditFormModel.open2', Date.now() - model.now);
model.now = Date.now();
sourceFieldModel ? { delegate: sourceFieldModel.context } : undefined,
) as QuickEditFormModel;
await flowEngine.context.viewer.open({
type: 'popover',
@@ -122,7 +120,6 @@ export class QuickEditFormModel extends FlowModel {
model.__onSubmitSuccess = onSuccess;
model._fieldProps = fieldProps;
model._onOk = onOk;
console.log('QuickEditFormModel.open3', Date.now() - model.now);
return (
<FlowModelRenderer
fallback={<Skeleton.Input size="small" />}
@@ -171,8 +168,6 @@ export class QuickEditFormModel extends FlowModel {
}
render() {
console.log('QuickEditFormModel.open4', Date.now() - this.now);
return (
<FormComponent model={this}>
<div
@@ -8,7 +8,7 @@
*/
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { FlowEngine, SingleRecordResource } from '@nocobase/flow-engine';
import { FlowEngine, FlowModel, SingleRecordResource } from '@nocobase/flow-engine';
import { QuickEditFormModel } from '../QuickEditFormModel';
describe('QuickEditFormModel - quick edit save triggers API (regression)', () => {
@@ -18,6 +18,35 @@ describe('QuickEditFormModel - quick edit save triggers API (regression)', () =>
engine = new FlowEngine();
});
it('uses source field context when opening quick edit', async () => {
engine.registerModels({ QuickEditFormModel });
engine.context.defineProperty('pageActive', { value: { value: false } });
engine.context.defineProperty('viewer', { value: { open: vi.fn(async () => undefined) } });
const page = engine.createModel<FlowModel>({ use: 'FlowModel', uid: 'page' });
page.context.defineProperty('pageActive', { value: { value: true } });
const source = engine.createModel<FlowModel>({ use: 'FlowModel', uid: 'source-field', parentId: page.uid });
await QuickEditFormModel.open({
flowEngine: engine,
target: document.createElement('div'),
dataSourceKey: 'main',
collectionName: 'users',
fieldPath: 'name',
record: {},
sourceFieldModelUid: source.uid,
});
let quickEditModel: QuickEditFormModel | undefined;
engine.forEachModel((model) => {
if (model instanceof QuickEditFormModel) {
quickEditModel = model;
}
});
expect(quickEditModel?.context.pageActive.value).toBe(true);
});
it('calls update with filterByTk and merges primary key from ctx.collection/record', async () => {
// 1) 准备数据源与集合(含主键字段)
const dsm = engine.context.dataSourceManager;
@@ -126,6 +126,7 @@ const RenderCell = observer<any>((props) => {
fieldPath: dataIndex,
record: record,
fieldProps: { ...columnModel.props, ...columnModel.subModels.field.props },
sourceFieldModelUid: columnModel.subModels.field.uid,
onOk: (values) => {
record[dataIndex] = values[dataIndex];
// 仅重渲染单元格