79516747

Date: 2025-03-18 08:21:05
Score: 0.5
Natty:
Report link

We can fix this by keeping track of the operator for each rule.

const [ruleOperators, setRuleOperators] = useState({});

We can do that by using afterUpdateRuleOperator.queryBuilder

   $('#builder').on('afterUpdateRuleOperator.queryBuilder', (e, rule) => {
       setRuleOperators(prev => ({
          ...prev,
          [rule.id]: rule.operator,
       }));
    });

Then update the rule with previous operator immediately after changing the field using afterUpdateRuleFilter.queryBuilder

   $('#builder').on('afterUpdateRuleFilter.queryBuilder', (e, rule) => {
      const prevOp = ruleOperators[rule.id];

      if (prevOp) {
        rule.operator = prevOp;
        $('#builder').queryBuilder('trigger', 'afterUpdateRuleOperator', rule);
      }
    });
Reasons:
  • Long answer (-0.5):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: Abhignya B