mirror of
https://github.com/nocobase/nocobase.git
synced 2026-09-21 13:52:17 +08:00
fix: quick edit not working in some case (#10007)
This commit is contained in:
@@ -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
|
||||
|
||||
+30
-1
@@ -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;
|
||||
|
||||
+1
@@ -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];
|
||||
// 仅重渲染单元格
|
||||
|
||||
Reference in New Issue
Block a user