@antdv/pro-utils
Version:
@antdv/pro-utils
674 lines (673 loc) • 28.5 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
var __objRest = (source, exclude) => {
var target = {};
for (var prop in source)
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
target[prop] = source[prop];
if (source != null && __getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(source)) {
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
target[prop] = source[prop];
}
return target;
};
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var __async = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
var stdin_exports = {};
__export(stdin_exports, {
DeleteEditableAction: () => DeleteEditableAction,
SaveEditableAction: () => SaveEditableAction,
defaultActionRender: () => defaultActionRender,
editableRowByKey: () => editableRowByKey,
recordKeyToString: () => recordKeyToString,
useEditableArray: () => useEditableArray
});
module.exports = __toCommonJS(stdin_exports);
var import_vue = require("vue");
var import_icons_vue = require("@ant-design/icons-vue");
var import_pro_provider = require("@antdv/pro-provider");
var import_ant_design_vue = require("ant-design-vue");
var import_useLazyKVMap = __toESM(require("ant-design-vue/lib/table/hooks/useLazyKVMap"));
var import_vue2 = require("vue");
var import__ = require("..");
var import_useDeepCompareEffect = require("../hooks/useDeepCompareEffect");
var import_useMergedState = require("../hooks/useMergedState");
var import_usePrevious = require("../hooks/usePrevious");
function warning(messageStr) {
return (message.warn || message.warning)(messageStr);
}
function recordKeyToString(rowKey) {
if (Array.isArray(rowKey)) return rowKey.join(",");
return rowKey;
}
function editableRowByKey(keyProps, action) {
var _a;
const {
getRowKey,
row,
data,
childrenColumnName = "children"
} = keyProps;
const key = (_a = recordKeyToString(keyProps.key)) == null ? void 0 : _a.toString();
const kvMap = /* @__PURE__ */ new Map();
function dig(records, map_row_parentKey, map_row_index) {
records.forEach((record, index) => {
const eachIndex = (map_row_index || 0) * 10 + index;
const recordKey = getRowKey(record, eachIndex).toString();
if (record && typeof record === "object" && childrenColumnName in record) {
dig(record[childrenColumnName] || [], recordKey, eachIndex);
}
const newRecord = __spreadProps(__spreadValues({}, record), {
map_row_key: recordKey,
children: void 0,
map_row_parentKey
});
delete newRecord.children;
if (!map_row_parentKey) {
delete newRecord.map_row_parentKey;
}
kvMap.set(recordKey, newRecord);
});
}
if (action === "top") {
kvMap.set(key, __spreadValues(__spreadValues({}, kvMap.get(key)), row));
}
dig(data);
if (action === "update") {
kvMap.set(key, __spreadValues(__spreadValues({}, kvMap.get(key)), row));
}
if (action === "delete") {
kvMap.delete(key);
}
const fill = (map) => {
const kvArrayMap = /* @__PURE__ */ new Map();
const kvSource = [];
const fillNewRecord = (fillChildren = false) => {
map.forEach((value) => {
var _b;
if (value.map_row_parentKey && !value.map_row_key) {
const _a2 = value, {
map_row_parentKey
} = _a2, rest = __objRest(_a2, [
"map_row_parentKey"
]);
if (!kvArrayMap.has(map_row_parentKey)) {
kvArrayMap.set(map_row_parentKey, []);
}
if (fillChildren) {
(_b = kvArrayMap.get(map_row_parentKey)) == null ? void 0 : _b.push(rest);
}
}
});
};
fillNewRecord(action === "top");
map.forEach((value) => {
var _b;
if (value.map_row_parentKey && value.map_row_key) {
const _a2 = value, {
map_row_parentKey,
map_row_key
} = _a2, rest = __objRest(_a2, [
"map_row_parentKey",
"map_row_key"
]);
if (kvArrayMap.has(map_row_key)) {
rest[childrenColumnName] = kvArrayMap.get(map_row_key);
}
if (!kvArrayMap.has(map_row_parentKey)) {
kvArrayMap.set(map_row_parentKey, []);
}
(_b = kvArrayMap.get(map_row_parentKey)) == null ? void 0 : _b.push(rest);
}
});
fillNewRecord(action === "update");
map.forEach((value) => {
if (!value.map_row_parentKey) {
const _a2 = value, {
map_row_key
} = _a2, rest = __objRest(_a2, [
"map_row_key"
]);
if (map_row_key && kvArrayMap.has(map_row_key)) {
const item = __spreadProps(__spreadValues({}, rest), {
[childrenColumnName]: kvArrayMap.get(map_row_key)
});
kvSource.push(item);
return;
}
kvSource.push(rest);
}
});
return kvSource;
};
return fill(kvMap);
}
const SaveEditableAction = (0, import_vue2.defineComponent)((props, {
expose,
slots
}) => {
const context = (0, import__.useInjectProFormContext)();
const form = import_ant_design_vue.Form.useFormInstance();
const [loading, setLoading] = (0, import__.useMountMergeState)(false);
const save = () => __async(void 0, null, function* () {
var _a, _b, _c;
try {
const isMapEditor = props.editorType === "Map";
const namePath = [props.tableName, Array.isArray(props.recordKey) ? props.recordKey[0] : props.recordKey].map((key) => key == null ? void 0 : key.toString()).flat(1).filter(Boolean);
setLoading(true);
yield form.validateFields(namePath, {
recursive: true
});
const fields = ((_b = (_a = context == null ? void 0 : context.formMethods) == null ? void 0 : _a.getFieldFormatValue) == null ? void 0 : _b.call(_a, namePath)) || form.getFieldValue(namePath);
if (Array.isArray(props.recordKey) && props.recordKey.length > 1) {
const [, ...recordKeyPath] = props.recordKey;
const curValue = (0, import_pro_provider.get)(fields, recordKeyPath);
(0, import_pro_provider.set)(fields, recordKeyPath, curValue);
}
const data = isMapEditor ? (0, import_pro_provider.set)({}, namePath, fields) : fields;
const res = yield (_c = props.onSave) == null ? void 0 : _c.call(
props,
props.recordKey,
// 如果是 map 模式,fields 就是一个值,所以需要set 到对象中
// 数据模式 fields 是一个对象,所以不需要
(0, import_pro_provider.merge)({}, props.row, data),
props.row,
props.newLineConfig
);
setLoading(false);
return res;
} catch (error) {
console.log(error);
setLoading(false);
throw error;
}
});
expose({
save
});
return () => {
var _a;
const children = props.children || ((_a = slots.default) == null ? void 0 : _a.call(slots));
return (0, import_vue.createVNode)("a", {
"key": "save",
"onClick": (e) => __async(void 0, null, function* () {
e.stopPropagation();
e.preventDefault();
try {
yield save();
} catch (e2) {
}
})
}, [loading ? (0, import_vue.createVNode)(import_icons_vue.LoadingOutlined, {
"style": {
marginInlineEnd: `8px`
}
}, null) : null, children || "\u4FDD\u5B58"]);
};
}, {
props: ["editableKeys", "recordKey", "preEditRowRef", "index", "cancelEditable", "onSave", "onDelete", "deletePopconfirmMessage", "setEditableRowKeys", "newLineConfig", "tableName", "deleteText", "cancelText", "saveText", "editorType", "addEditRecord", "row", "children"]
});
const DeleteEditableAction = ({
recordKey,
onDelete,
preEditRowRef,
row,
children,
deletePopconfirmMessage
}) => {
const [loading, setLoading] = (0, import__.useMountMergeState)(() => false);
const onConfirm = () => __async(void 0, null, function* () {
try {
setLoading(true);
const res = yield onDelete == null ? void 0 : onDelete(recordKey, row);
setLoading(false);
return res;
} catch (e) {
console.log(e);
setLoading(false);
return null;
} finally {
if (preEditRowRef) preEditRowRef.value = null;
}
});
return children !== false ? (0, import_vue.createVNode)(import_ant_design_vue.Popconfirm, {
"key": "delete",
"title": deletePopconfirmMessage,
"onConfirm": () => onConfirm()
}, {
default: () => [(0, import_vue.createVNode)("a", null, [loading ? (0, import_vue.createVNode)(import_icons_vue.LoadingOutlined, {
"style": {
marginInlineEnd: `8px`
}
}, null) : null, children || "\u5220\u9664"])]
}) : null;
};
const CancelEditableAction = (props) => {
const {
recordKey,
tableName,
newLineConfig,
editorType,
onCancel,
cancelEditable,
row,
cancelText,
preEditRowRef
} = props;
const context = (0, import__.useInjectProFormContext)();
const form = import_ant_design_vue.Form.useFormInstance();
return (0, import_vue.createVNode)("a", {
"key": "cancel",
"onClick": (e) => __async(void 0, null, function* () {
var _a, _b, _c;
e.stopPropagation();
e.preventDefault();
const isMapEditor = editorType === "Map";
const namePath = [tableName, recordKey].flat(1).filter(Boolean);
const fields = ((_b = (_a = context == null ? void 0 : context.formMethods) == null ? void 0 : _a.getFieldFormatValue) == null ? void 0 : _b.call(_a, namePath)) || (form == null ? void 0 : form.getFieldValue(namePath));
const record = isMapEditor ? (0, import_pro_provider.set)({}, namePath, fields) : fields;
const res = yield onCancel == null ? void 0 : onCancel(recordKey, record, row, newLineConfig);
yield cancelEditable(recordKey);
if ((preEditRowRef == null ? void 0 : preEditRowRef.value) !== null) {
form.setFieldsValue((0, import_pro_provider.set)({}, namePath, preEditRowRef == null ? void 0 : preEditRowRef.value));
} else {
yield (_c = props.onDelete) == null ? void 0 : _c.call(props, recordKey, row);
}
if (preEditRowRef) preEditRowRef.value = null;
return res;
})
}, [cancelText || "\u53D6\u6D88"]);
};
function defaultActionRender(row, config) {
const {
recordKey,
newLineConfig,
saveText,
deleteText
} = config;
const saveRef = (0, import_vue2.ref)();
return {
save: (0, import_vue.createVNode)(SaveEditableAction, (0, import_vue.mergeProps)({
"key": `save${recordKey}`
}, config, {
"row": row,
"ref": saveRef
}), {
default: () => [saveText]
}),
saveRef,
delete: (newLineConfig == null ? void 0 : newLineConfig.options.recordKey) !== recordKey ? (0, import_vue.createVNode)(DeleteEditableAction, (0, import_vue.mergeProps)({
"key": `delete${recordKey}`
}, config, {
"row": row
}), {
default: () => [deleteText]
}) : void 0,
cancel: (0, import_vue.createVNode)(CancelEditableAction, (0, import_vue.mergeProps)({
"key": `cancel${recordKey}`
}, config, {
"row": row
}), null)
};
}
function useEditableArray(props) {
const intl = (0, import_pro_provider.useIntl)();
const preEditRowRef = (0, import_vue2.ref)(null);
const newLineRecordCache = (0, import_vue2.ref)(void 0);
const resetMapRef = () => {
const map = /* @__PURE__ */ new Map();
const loopGetKey = (dataSource, parentKey) => {
dataSource == null ? void 0 : dataSource.forEach((record, index) => {
var _a;
const key = parentKey === void 0 || parentKey === null ? index.toString() : `${parentKey}_${index.toString()}`;
map.set(key, recordKeyToString(props.getRowKey(record, -1)));
map.set((_a = recordKeyToString(props.getRowKey(record, -1))) == null ? void 0 : _a.toString(), key);
if (props.childrenColumnName && (record == null ? void 0 : record[props.childrenColumnName])) {
loopGetKey(record[props.childrenColumnName], key);
}
});
};
loopGetKey(props.dataSource);
return map;
};
const initDataSourceKeyIndexMap = (0, import_vue2.computed)(() => resetMapRef());
const dataSourceKeyIndexMapRef = (0, import_vue2.ref)(initDataSourceKeyIndexMap.value);
(0, import_useDeepCompareEffect.useDeepCompareEffectDebounce)(() => {
dataSourceKeyIndexMapRef.value = resetMapRef();
}, [props.dataSource]);
const newLineRecordRef = (0, import_vue2.computed)(() => newLineRecordCache.value);
const editableType = props.type || "single";
const [getRecordByKey] = (0, import_useLazyKVMap.default)((0, import_vue2.computed)(() => props.dataSource), (0, import_vue2.computed)(() => "children"), (0, import_vue2.computed)(() => props.getRowKey));
const [editableKeys, setEditableRowKeys] = (0, import_useMergedState.useMergedState)([], {
value: (0, import_vue2.ref)(props.editableKeys),
onChange: props.onChange ? (keys) => {
var _a, _b, _c;
(_c = props == null ? void 0 : props.onChange) == null ? void 0 : _c.call(
props,
// 计算编辑的key
(_a = keys == null ? void 0 : keys.filter((key) => key !== void 0)) != null ? _a : [],
// 计算编辑的行
(_b = keys == null ? void 0 : keys.map((key) => getRecordByKey(key)).filter((key) => key !== void 0)) != null ? _b : []
);
} : void 0
});
const editableKeysSet = (0, import_vue2.computed)(() => {
var _a;
const keys = editableType === "single" ? (_a = editableKeys.value) == null ? void 0 : _a.slice(0, 1) : editableKeys.value;
return new Set(keys);
});
const editableKeysRef = (0, import_usePrevious.usePrevious)(editableKeys);
const isEditable = (row) => {
var _a, _b, _c, _d, _e, _f;
const recordKeyOrIndex = (_b = (_a = props.getRowKey(row, row.index)) == null ? void 0 : _a.toString) == null ? void 0 : _b.call(_a);
const recordKey = (_d = (_c = props.getRowKey(row, -1)) == null ? void 0 : _c.toString) == null ? void 0 : _d.call(_c);
const stringEditableKeys = (_e = editableKeys.value) == null ? void 0 : _e.map((key) => key == null ? void 0 : key.toString());
const stringEditableKeysRef = ((_f = editableKeysRef.value) == null ? void 0 : _f.map((key) => key == null ? void 0 : key.toString())) || [];
const preIsEditable = props.tableName && !!(stringEditableKeysRef == null ? void 0 : stringEditableKeysRef.includes(recordKey)) || !!(stringEditableKeysRef == null ? void 0 : stringEditableKeysRef.includes(recordKeyOrIndex));
return {
recordKey,
isEditable: props.tableName && (stringEditableKeys == null ? void 0 : stringEditableKeys.includes(recordKey)) || (stringEditableKeys == null ? void 0 : stringEditableKeys.includes(recordKeyOrIndex)),
preIsEditable
};
};
const startEditable = (recordKey, record) => {
var _a, _b;
if (editableKeysSet.value.size > 0 && editableType === "single" && props.onlyOneLineEditorAlertMessage !== false) {
warning(props.onlyOneLineEditorAlertMessage || intl.getMessage("editableTable.onlyOneLineEditor", "\u53EA\u80FD\u540C\u65F6\u7F16\u8F91\u4E00\u884C"));
return false;
}
editableKeysSet.value.add(recordKey);
setEditableRowKeys(Array.from(editableKeysSet.value));
preEditRowRef.value = (_b = record != null ? record : (_a = props.dataSource) == null ? void 0 : _a.find((recordData, index) => {
return props.getRowKey(recordData, index) === recordKey;
})) != null ? _b : null;
return true;
};
const cancelEditable = (recordKey, needReTry) => __async(this, null, function* () {
var _a;
const relayKey = recordKeyToString(recordKey).toString();
const key = dataSourceKeyIndexMapRef.value.get(relayKey);
if (!editableKeysSet.value.has(relayKey) && key && (needReTry != null ? needReTry : true) && props.tableName) {
cancelEditable(key, false);
return;
}
if (newLineRecordCache.value && ((_a = newLineRecordCache.value) == null ? void 0 : _a.options.recordKey) === recordKey) {
newLineRecordCache.value = void 0;
}
editableKeysSet.value.delete(relayKey);
editableKeysSet.value.delete(recordKeyToString(recordKey));
setEditableRowKeys(Array.from(editableKeysSet.value));
return true;
});
const propsOnValuesChange = (0, import__.useDebounceFn)((...rest) => __async(this, null, function* () {
var _a;
(_a = props.onValuesChange) == null ? void 0 : _a.call(props, ...rest);
}), 64);
const onValuesChange = (value, values) => {
var _a, _b, _c;
if (!props.onValuesChange) {
return;
}
let {
dataSource
} = props;
(_a = editableKeys.value) == null ? void 0 : _a.forEach((eachRecordKey) => {
var _a2;
if (((_a2 = newLineRecordCache.value) == null ? void 0 : _a2.options.recordKey) === eachRecordKey) return;
const recordKey2 = eachRecordKey.toString();
const editRow2 = (0, import_pro_provider.get)(values, [props.tableName || "", recordKey2].flat(1).filter((key) => key || key === 0));
if (!editRow2) return;
dataSource = editableRowByKey({
data: dataSource,
getRowKey: props.getRowKey,
row: editRow2,
key: recordKey2,
childrenColumnName: props.childrenColumnName || "children"
}, "update");
});
const relayValue = value;
const recordKey = (_b = Object.keys(relayValue || {}).pop()) == null ? void 0 : _b.toString();
const newLineRecordData = __spreadValues(__spreadValues({}, ((_c = newLineRecordCache == null ? void 0 : newLineRecordCache.value) == null ? void 0 : _c.defaultValue) || {}), (0, import_pro_provider.get)(values, [props.tableName || "", recordKey.toString()].flat(1).filter((key) => key || key === 0)));
const editRow = dataSourceKeyIndexMapRef.value.has(recordKeyToString(recordKey)) ? dataSource.find((item, index) => {
var _a2;
const key = (_a2 = props.getRowKey(item, index)) == null ? void 0 : _a2.toString();
return key === recordKey;
}) : newLineRecordData;
propsOnValuesChange.run(editRow || newLineRecordData, dataSource);
};
const saveRefsMap = (0, import_vue2.ref)(/* @__PURE__ */ new Map());
(0, import__.useEffect)(() => {
saveRefsMap.value.forEach((_ref, key) => {
if (!editableKeysSet.value.has(key)) {
saveRefsMap.value.delete(key);
}
});
}, (0, import_vue2.computed)(() => [saveRefsMap.value, editableKeysSet.value]));
const saveEditable = (recordKey, needReTry) => __async(this, null, function* () {
var _a;
const relayKey = recordKeyToString(recordKey);
const key = dataSourceKeyIndexMapRef.value.get(recordKey.toString());
if (!editableKeysSet.value.has(relayKey) && key && (needReTry != null ? needReTry : true) && props.tableName) {
return yield saveEditable(key, false);
}
const saveRef = saveRefsMap.value.get(relayKey) || saveRefsMap.value.get(relayKey.toString());
try {
yield (_a = saveRef == null ? void 0 : saveRef.value) == null ? void 0 : _a.save();
} catch (e) {
return false;
}
editableKeysSet.value.delete(relayKey);
editableKeysSet.value.delete(relayKey.toString());
setEditableRowKeys(Array.from(editableKeysSet.value));
return true;
});
const addEditRecord = (row, options) => {
var _a;
if ((options == null ? void 0 : options.parentKey) && !dataSourceKeyIndexMapRef.value.has(recordKeyToString(options == null ? void 0 : options.parentKey).toString())) {
console.warn("can't find record by key", options == null ? void 0 : options.parentKey);
return false;
}
if (newLineRecordRef.value && props.onlyAddOneLineAlertMessage !== false) {
warning(props.onlyAddOneLineAlertMessage || intl.getMessage("editableTable.onlyAddOneLine", "\u53EA\u80FD\u65B0\u589E\u4E00\u884C"));
return false;
}
if (editableKeysSet.value.size > 0 && editableType === "single" && props.onlyOneLineEditorAlertMessage !== false) {
warning(props.onlyOneLineEditorAlertMessage || intl.getMessage("editableTable.onlyOneLineEditor", "\u53EA\u80FD\u540C\u65F6\u7F16\u8F91\u4E00\u884C"));
return false;
}
const recordKey = props.getRowKey(row, -1);
if (!recordKey && recordKey !== 0) {
(0, import__.noteOnce)(!!recordKey, "\u8BF7\u8BBE\u7F6E recordCreatorProps.record \u5E76\u8FD4\u56DE\u4E00\u4E2A\u552F\u4E00\u7684key \n https://procomponents.ant.design/components/editable-table#editable-%E6%96%B0%E5%BB%BA%E8%A1%8C");
throw new Error("\u8BF7\u8BBE\u7F6E recordCreatorProps.record \u5E76\u8FD4\u56DE\u4E00\u4E2A\u552F\u4E00\u7684key");
}
editableKeysSet.value.add(recordKey);
setEditableRowKeys(Array.from(editableKeysSet.value));
if ((options == null ? void 0 : options.newRecordType) === "dataSource" || props.tableName) {
const actionProps = {
data: props.dataSource,
getRowKey: props.getRowKey,
row: __spreadProps(__spreadValues({}, row), {
map_row_parentKey: (options == null ? void 0 : options.parentKey) ? (_a = recordKeyToString(options == null ? void 0 : options.parentKey)) == null ? void 0 : _a.toString() : void 0
}),
key: recordKey,
childrenColumnName: props.childrenColumnName || "children"
};
props.setDataSource(editableRowByKey(actionProps, (options == null ? void 0 : options.position) === "top" ? "top" : "update"));
} else {
newLineRecordCache.value = {
defaultValue: row,
options: __spreadProps(__spreadValues({}, options), {
recordKey
})
};
}
return true;
};
const saveText = (props == null ? void 0 : props.saveText) || intl.getMessage("editableTable.action.save", "\u4FDD\u5B58");
const deleteText = (props == null ? void 0 : props.deleteText) || intl.getMessage("editableTable.action.delete", "\u5220\u9664");
const cancelText = (props == null ? void 0 : props.cancelText) || intl.getMessage("editableTable.action.cancel", "\u53D6\u6D88");
const actionSaveRef = (recordKey, editRow, originRow, newLine) => __async(this, null, function* () {
var _a, _b, _c;
const res = yield (_a = props == null ? void 0 : props.onSave) == null ? void 0 : _a.call(props, recordKey, editRow, originRow, newLine);
yield cancelEditable(recordKey);
const {
options
} = newLine || newLineRecordRef.value || {};
if (!(options == null ? void 0 : options.parentKey) && (options == null ? void 0 : options.recordKey) === recordKey) {
if ((options == null ? void 0 : options.position) === "top") {
props.setDataSource([editRow, ...props.dataSource]);
} else {
props.setDataSource([...props.dataSource, editRow]);
}
return res;
}
const actionProps = {
data: props.dataSource,
getRowKey: props.getRowKey,
row: options ? __spreadProps(__spreadValues({}, editRow), {
map_row_parentKey: (_c = recordKeyToString((_b = options == null ? void 0 : options.parentKey) != null ? _b : "")) == null ? void 0 : _c.toString()
}) : editRow,
key: recordKey,
childrenColumnName: props.childrenColumnName || "children"
};
props.setDataSource(editableRowByKey(actionProps, (options == null ? void 0 : options.position) === "top" ? "top" : "update"));
yield cancelEditable(recordKey);
return res;
});
const actionDeleteRef = (recordKey, editRow) => __async(this, null, function* () {
var _a;
const actionProps = {
data: props.dataSource,
getRowKey: props.getRowKey,
row: editRow,
key: recordKey,
childrenColumnName: props.childrenColumnName || "children"
};
const res = yield (_a = props == null ? void 0 : props.onDelete) == null ? void 0 : _a.call(props, recordKey, editRow);
yield cancelEditable(recordKey, false);
props.setDataSource(editableRowByKey(actionProps, "delete"));
return res;
});
const actionCancelRef = (recordKey, editRow, originRow, newLine) => __async(this, null, function* () {
var _a;
const res = yield (_a = props == null ? void 0 : props.onCancel) == null ? void 0 : _a.call(props, recordKey, editRow, originRow, newLine);
return res;
});
const existCustomActionRender = props.actionRender && typeof props.actionRender === "function";
const customActionRender = existCustomActionRender ? props.actionRender : () => {
};
const actionRender = (row) => {
const key = props.getRowKey(row, row.index);
const config = {
saveText,
cancelText,
deleteText,
addEditRecord,
recordKey: key,
cancelEditable,
index: row.index,
tableName: props.tableName,
newLineConfig: newLineRecordCache.value,
onCancel: actionCancelRef,
onDelete: actionDeleteRef,
onSave: actionSaveRef,
editableKeys: editableKeys.value,
setEditableRowKeys,
preEditRowRef,
deletePopconfirmMessage: props.deletePopconfirmMessage || `${intl.getMessage("deleteThisLine", "\u5220\u9664\u6B64\u9879")}?`
};
const renderResult = defaultActionRender(row, config);
if (props.tableName) {
saveRefsMap.value.set(
dataSourceKeyIndexMapRef.value.get(recordKeyToString(key)) || recordKeyToString(key),
// @ts-expect-error
renderResult.saveRef
);
} else {
saveRefsMap.value.set(recordKeyToString(key), renderResult.saveRef);
}
if (existCustomActionRender) {
return customActionRender == null ? void 0 : customActionRender(row, config, {
save: renderResult.save,
delete: renderResult.delete,
cancel: renderResult.cancel
});
}
return [renderResult.save, renderResult.delete, renderResult.cancel];
};
return {
editableKeys,
setEditableRowKeys,
isEditable,
actionRender,
startEditable,
cancelEditable,
addEditRecord,
saveEditable,
newLineRecord: newLineRecordCache,
preEditableKeys: editableKeysRef,
onValuesChange,
getRealIndex: props.getRealIndex
};
}