Skip to content

Commit bc04aed

Browse files
committed
【feature】
New `beforeStartCellEditing` callback method for cell editing function
1 parent 8f87bca commit bc04aed

File tree

2 files changed

+88
-1
lines changed

2 files changed

+88
-1
lines changed

Diff for: packages/ve-table/src/index.jsx

+15
Original file line numberDiff line numberDiff line change
@@ -3601,6 +3601,21 @@ export default {
36013601
return false;
36023602
}
36033603

3604+
const { beforeStartCellEditing } = editOption;
3605+
3606+
if (isFunction(beforeStartCellEditing)) {
3607+
const allowContinue = beforeStartCellEditing({
3608+
row: cloneDeep(currentRow),
3609+
column: currentColumn,
3610+
cellValue: isDefined(defaultValue)
3611+
? defaultValue
3612+
: currentRow[currentColumn.field],
3613+
});
3614+
if (isBoolean(allowContinue) && !allowContinue) {
3615+
return false;
3616+
}
3617+
}
3618+
36043619
// 给当前列赋默认值
36053620
if (isDefined(defaultValue)) {
36063621
this.editorInputStartValue = defaultValue;

Diff for: tests/unit/specs/ve-table-cell-edit.spec.js

+73-1
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,79 @@ describe("veTable cell edit", () => {
232232
).toBe(false);
233233
});
234234

235+
it("beforeStartCellEditing callback", async () => {
236+
const beforeStartCellEditingMockFn = jest.fn();
237+
const beforeCellValueChangeMockFn = jest.fn();
238+
239+
const wrapper = mount(veTable, {
240+
propsData: {
241+
columns: COLUMNS,
242+
tableData: cloneDeep(TABLE_DATA),
243+
editOption: {
244+
beforeStartCellEditing: ({ row, column, cellValue }) => {
245+
beforeStartCellEditingMockFn(row, column, cellValue);
246+
if (cellValue === "AAA") {
247+
return false;
248+
}
249+
},
250+
beforeCellValueChange: ({ row, column, changeValue }) => {
251+
beforeCellValueChangeMockFn(row, column, changeValue);
252+
},
253+
},
254+
rowKeyFieldName: "rowKey",
255+
},
256+
});
257+
258+
wrapper.vm.startEditingCell({
259+
rowKey: 0,
260+
colKey: "name",
261+
defaultValue: "AAA",
262+
});
263+
264+
await later();
265+
wrapper.vm.stopEditingCell();
266+
await later();
267+
268+
expect(beforeStartCellEditingMockFn).toHaveBeenCalledWith(
269+
{
270+
address: "No.1 Century Avenue, Shanghai",
271+
date: "1900-05-20",
272+
hobby: "coding and coding repeat",
273+
name: "John",
274+
rowKey: 0,
275+
},
276+
{
277+
_colspan: 1,
278+
_keys: "name",
279+
_level: 1,
280+
_realTimeWidth: "15%",
281+
_rowspan: 1,
282+
align: "left",
283+
edit: true,
284+
field: "name",
285+
key: "name",
286+
title: "Name",
287+
width: "15%",
288+
},
289+
"AAA",
290+
);
291+
expect(beforeStartCellEditingMockFn).toBeCalledTimes(1);
292+
expect(beforeCellValueChangeMockFn).toBeCalledTimes(0);
293+
294+
wrapper.vm.startEditingCell({
295+
rowKey: 0,
296+
colKey: "name",
297+
defaultValue: "BBB",
298+
});
299+
300+
await later();
301+
wrapper.vm.stopEditingCell();
302+
await later();
303+
304+
expect(beforeStartCellEditingMockFn).toBeCalledTimes(2);
305+
expect(beforeCellValueChangeMockFn).toBeCalledTimes(1);
306+
});
307+
235308
it("beforeCellValueChange and afterCellValueChange callback", async () => {
236309
const beforeCellValueChangeMockFn = jest.fn();
237310
const afterCellValueChangeMockFn = jest.fn();
@@ -303,7 +376,6 @@ describe("veTable cell edit", () => {
303376
await later();
304377

305378
wrapper.vm.stopEditingCell();
306-
307379
await later();
308380

309381
expect(beforeCellValueChangeMockFn).toHaveBeenCalledWith(

0 commit comments

Comments
 (0)