@hitachivantara/uikit-react-core
Version:
UI Kit Core React components.
47 lines (46 loc) • 1.79 kB
JavaScript
import { isEqual, uniqueId } from "../../utils/helpers.js";
//#region src/QueryBuilder/utils/index.tsx
var isBigList = (values) => values != null && values?.length > 10;
var ID_PREFIX = "@hv_";
var createId = () => uniqueId(ID_PREFIX);
var emptyRule = () => ({ id: createId() });
var emptyGroup = (createEmptyRule = false) => ({
id: createId(),
combinator: "and",
rules: createEmptyRule ? [emptyRule()] : []
});
var clearNodeIds = (original, full = false) => {
const rule = { ...original };
if (!full && rule.id?.toString().startsWith(ID_PREFIX) || full) delete rule.id;
if ("rules" in rule) rule.rules = rule.rules.map((r) => clearNodeIds(r, full));
return rule;
};
var isQueryGroup = (value) => "rules" in value;
var setNodeIds = (query, prevQuery) => {
if (!query.id) query.id = prevQuery?.id && isEqual(clearNodeIds(structuredClone(query)), clearNodeIds(structuredClone(prevQuery))) ? prevQuery.id : createId();
if (isQueryGroup(query)) query.rules = query.rules.map((item, idx) => setNodeIds(item, prevQuery && isQueryGroup(prevQuery) ? prevQuery.rules[idx] : void 0));
return query;
};
var findNodeById = (id, node) => {
if (node.id === id) return node;
if ("rules" in node) for (let i = 0; i < node.rules.length; ++i) {
const rule = node.rules[i];
const found = findNodeById(id, rule);
if (found) return found;
}
return null;
};
var findParentById = (id, node, parent) => {
if (node.id === id) return parent ?? null;
if ("rules" in node) {
const group = node;
for (let i = 0; i < group.rules.length; ++i) {
const rule = group.rules[i];
const found = findParentById(id, rule, group);
if (found) return found;
}
}
return null;
};
//#endregion
export { clearNodeIds, emptyGroup, emptyRule, findNodeById, findParentById, isBigList, setNodeIds };