UNPKG

@hitachivantara/uikit-react-core

Version:

Core React components for the NEXT Design System.

94 lines (93 loc) 2.53 kB
import { findNodeById, findParentById, emptyGroup, emptyRule } from "./index.js"; const reducer = (state, action) => { const query = structuredClone(state); switch (action.type) { case "reset-query": { return emptyGroup(); } case "set-query": return action.query; case "reset-group": { const group = findNodeById(action.id, query); if (group && "rules" in group) { group.rules = [emptyRule()]; return query; } break; } case "add-rule": { const group = findNodeById(action.id, query); if (group && "rules" in group) { const rule = emptyRule(); group.rules.push(rule); return query; } break; } case "add-group": { const group = findNodeById(action.id, query); if (group && "rules" in group) { group.rules.push(emptyGroup(true)); return query; } break; } case "remove-node": { const parent = findParentById(action.id, query); if (parent) { parent.rules = parent.rules.filter((rule) => rule.id !== action.id); return query; } return emptyGroup(); } case "set-combinator": { const node = findNodeById(action.id, query); if (node && "combinator" in node) { if (node.combinator !== action.combinator) { node.combinator = action.combinator; return query; } } break; } case "set-attribute": { const node = findNodeById(action.id, query); if (node && node.attribute !== action.attribute) { node.attribute = action.attribute ?? void 0; if (action.operator !== void 0) { node.operator = action.operator ?? void 0; node.value = action.value ?? void 0; } return query; } break; } case "set-operator": { const node = findNodeById(action.id, query); if (node && "attribute" in node) { if (node.operator !== action.operator) { node.operator = action.operator; if (action.value !== void 0) { node.value = action.value ?? void 0; } return query; } } break; } case "set-value": { const node = findNodeById(action.id, query); if (node && "operator" in node) { if ("value" in node) { node.value = action.value ?? void 0; } return query; } break; } } return query; }; export { reducer as default };