@sparklink-pro/apant
Version:
Apollo & Antd tools
47 lines • 2.11 kB
JavaScript
import { __awaiter } from "tslib";
import { isFunction, isArray, isEqual, last, toPairs, isPlainObject } from 'lodash-es';
const isFieldMapped = (_a) => __awaiter(void 0, [_a], void 0, function* ({ field, context }) {
const { item: { name }, mapped, } = field;
if (!name) {
return false;
}
return (isFunction(mapped) ? mapped(context) : mapped) !== false;
});
const filterValues = (value_1, path_1, _a) => __awaiter(void 0, [value_1, path_1, _a], void 0, function* (value, path, { fields, context }) {
const lastPath = last(path);
const field = fields.find((f) => isEqual(f.item.name, path));
if (isArray(value) && field && field.list) {
if (yield isFieldMapped({ field, context })) {
const values = [];
for (let i = 0; i < value.length; i += 1) {
if (!field.fields || field.fields.length === 0) {
values.push(value[i]);
}
else {
values.push(yield filterValues(value[i], [], { fields: field.fields, context }));
}
}
return lastPath ? { [lastPath]: values } : values;
}
return {};
}
if (isPlainObject(value) && !isArray(value) && !(field === null || field === void 0 ? void 0 : field.hasObjectValue)) {
let values = {};
const entries = toPairs(value);
for (let i = 0; i < entries.length; i += 1) {
const [key, val] = entries[i];
const newPath = [...path, key];
const filteredValues = yield filterValues(val, newPath, { fields, context });
values = Object.assign(Object.assign({}, values), filteredValues);
}
return lastPath ? { [lastPath]: values } : values;
}
if (field && (yield isFieldMapped({ field, context }))) {
const key = last(path);
return { [key]: value };
}
return {};
});
export const useFilterValues = ({ fields, context }) => (values) => filterValues(values, [], { fields, context });
export default useFilterValues;
//# sourceMappingURL=useFilterValues.js.map