forgeplus-react/node_modules/ahooks/lib/useAntdTable/index.js

264 lines
7.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
var __assign = this && this.__assign || function () {
__assign = Object.assign || function (t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) {
if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
}
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = this && this.__rest || function (s, e) {
var t = {};
for (var p in s) {
if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
}
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
}
return t;
};
var __read = this && this.__read || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o),
r,
ar = [],
e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
ar.push(r.value);
}
} catch (error) {
e = {
error: error
};
} finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
} finally {
if (e) throw e.error;
}
}
return ar;
};
var __spread = this && this.__spread || function () {
for (var ar = [], i = 0; i < arguments.length; i++) {
ar = ar.concat(__read(arguments[i]));
}
return ar;
};
var __importDefault = this && this.__importDefault || function (mod) {
return mod && mod.__esModule ? mod : {
"default": mod
};
};
Object.defineProperty(exports, "__esModule", {
value: true
});
var use_request_1 = __importDefault(require("@ahooksjs/use-request"));
var react_1 = require("react");
var useUpdateEffect_1 = __importDefault(require("../useUpdateEffect"));
var usePersistFn_1 = __importDefault(require("../usePersistFn"));
function useAntdTable(service, options) {
var form = options.form,
_a = options.refreshDeps,
refreshDeps = _a === void 0 ? [] : _a,
manual = options.manual,
_b = options.defaultType,
defaultType = _b === void 0 ? 'simple' : _b,
defaultParams = options.defaultParams,
restOptions = __rest(options, ["form", "refreshDeps", "manual", "defaultType", "defaultParams"]);
var result = use_request_1["default"](service, __assign(__assign({}, restOptions), {
paginated: true,
manual: true
}));
var params = result.params,
run = result.run;
var cacheFormTableData = params[2] || {}; // 优先从缓存中读
var _c = __read(react_1.useState(cacheFormTableData.type || defaultType), 2),
type = _c[0],
setType = _c[1]; // 全量 form 数据,包括 simple 和 advance
var _d = __read(react_1.useState(cacheFormTableData.allFormData || defaultParams && defaultParams[1] || {}), 2),
allFormData = _d[0],
setAllFormData = _d[1]; // 获取当前展示的 form 字段值
var getActivetFieldValues = react_1.useCallback(function () {
if (!form) {
return {};
} // antd 3
if (form.getFieldInstance) {
var tempAllFiledsValue_1 = form.getFieldsValue();
var filterFiledsValue_1 = {};
Object.keys(tempAllFiledsValue_1).forEach(function (key) {
if (form.getFieldInstance ? form.getFieldInstance(key) : true) {
filterFiledsValue_1[key] = tempAllFiledsValue_1[key];
}
});
return filterFiledsValue_1;
} // antd 4
return form.getFieldsValue(null, function () {
return true;
});
}, [form]);
var formRef = react_1.useRef(form);
formRef.current = form;
/* 初始化,或改变了 searchType, 恢复表单数据 */
react_1.useEffect(function () {
if (!formRef.current) {
return;
} // antd 3
if (formRef.current.getFieldInstance) {
// antd 3 需要判断字段是否存在,否则会抛警告
var filterFiledsValue_2 = {};
Object.keys(allFormData).forEach(function (key) {
if (formRef.current.getFieldInstance ? formRef.current.getFieldInstance(key) : true) {
filterFiledsValue_2[key] = allFormData[key];
}
});
formRef.current.setFieldsValue(filterFiledsValue_2);
} else {
// antd 4
formRef.current.setFieldsValue(allFormData);
}
}, [type]); // 首次加载,手动提交。为了拿到 form 的 initial values
react_1.useEffect(function () {
// 如果有缓存,则使用缓存,重新请求
if (params.length > 0) {
run.apply(void 0, __spread(params));
return;
} // 如果没有缓存,触发 submit
if (!manual) {
_submit(defaultParams);
}
}, []);
var changeType = react_1.useCallback(function () {
var currentFormData = getActivetFieldValues();
setAllFormData(__assign(__assign({}, allFormData), currentFormData));
var targetType = type === 'simple' ? 'advance' : 'simple';
setType(targetType);
}, [type, allFormData, getActivetFieldValues]);
var validateFields = react_1.useCallback(function () {
var fieldValues = getActivetFieldValues();
if (!form) {
return Promise.resolve();
}
var fields = Object.keys(fieldValues);
if (!form.getInternalHooks) {
return new Promise(function (resolve, reject) {
form.validateFields(fields, function (errors, values) {
if (errors) {
reject(errors);
} else {
resolve(values);
}
});
});
}
return form.validateFields(fields);
}, [form]);
var _submit = react_1.useCallback(function (initParams) {
setTimeout(function () {
validateFields().then(function () {
var activeFormData = getActivetFieldValues(); // 记录全量数据
var _allFormData = __assign(__assign({}, allFormData), activeFormData);
setAllFormData(_allFormData); // has defaultParams
if (initParams) {
run(initParams[0], activeFormData, {
allFormData: _allFormData,
type: type
});
return;
}
run(__assign(__assign({
pageSize: options.defaultPageSize || 10
}, params[0] || {}), {
current: 1
}), activeFormData, {
allFormData: _allFormData,
type: type
});
})["catch"](function (err) {
return err;
});
});
}, [getActivetFieldValues, run, params, allFormData, type]);
var reset = react_1.useCallback(function () {
if (form) {
form.resetFields();
}
_submit();
}, [form, _submit]);
var resetPersistFn = usePersistFn_1["default"](reset); // refreshDeps 变化reset。
useUpdateEffect_1["default"](function () {
if (!manual) {
resetPersistFn();
}
}, __spread(refreshDeps));
var submit = usePersistFn_1["default"](function (e) {
if (e && e.preventDefault) {
e.preventDefault();
}
_submit();
});
return __assign(__assign({}, result), {
search: {
submit: submit,
type: type,
changeType: changeType,
reset: reset
}
});
}
exports["default"] = useAntdTable;