From 2c0ae14631df9aa55a5cdd3d57067f9ff087239e Mon Sep 17 00:00:00 2001 From: Carlos Martins Date: Wed, 13 Aug 2025 15:33:31 -0600 Subject: [PATCH 1/9] change groupby report syntax --- src/CONST/index.ts | 1 + src/libs/SearchParser/autocompleteParser.js | 277 +++++++++++--------- src/libs/SearchParser/baseRules.peggy | 1 + src/libs/SearchParser/searchParser.js | 277 +++++++++++--------- 4 files changed, 308 insertions(+), 248 deletions(-) diff --git a/src/CONST/index.ts b/src/CONST/index.ts index 8df74c350143..407f536ddaad 100755 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -6484,6 +6484,7 @@ const CONST = { get SEARCH_USER_FRIENDLY_VALUES_MAP() { return { [this.TRANSACTION_TYPE.PER_DIEM]: 'per-diem', + [this.GROUP_BY.REPORTS]: 'report', }; }, DATE_MODIFIERS: { diff --git a/src/libs/SearchParser/autocompleteParser.js b/src/libs/SearchParser/autocompleteParser.js index 5bc4cbb46dfd..2d38f1efe58e 100644 --- a/src/libs/SearchParser/autocompleteParser.js +++ b/src/libs/SearchParser/autocompleteParser.js @@ -232,14 +232,16 @@ function peg$parse(input, options) { var peg$c46 = "action"; var peg$c47 = "perdiem"; var peg$c48 = "per-diem"; - var peg$c49 = "!="; - var peg$c50 = ">="; - var peg$c51 = ">"; - var peg$c52 = "<="; - var peg$c53 = "<"; - var peg$c54 = "\u201C"; - var peg$c55 = "\u201D"; - var peg$c56 = "\""; + var peg$c49 = "reports"; + var peg$c50 = "report"; + var peg$c51 = "!="; + var peg$c52 = ">="; + var peg$c53 = ">"; + var peg$c54 = "<="; + var peg$c55 = "<"; + var peg$c56 = "\u201C"; + var peg$c57 = "\u201D"; + var peg$c58 = "\""; var peg$r0 = /^[:=]/; var peg$r1 = /^[^ ,\t\n\r\xA0]/; @@ -303,30 +305,32 @@ function peg$parse(input, options) { var peg$e47 = peg$literalExpectation("action", true); var peg$e48 = peg$literalExpectation("perDiem", true); var peg$e49 = peg$literalExpectation("per-diem", true); - var peg$e50 = peg$otherExpectation("operator"); - var peg$e51 = peg$classExpectation([":", "="], false, false); - var peg$e52 = peg$literalExpectation("!=", false); - var peg$e53 = peg$literalExpectation(">=", false); - var peg$e54 = peg$literalExpectation(">", false); - var peg$e55 = peg$literalExpectation("<=", false); - var peg$e56 = peg$literalExpectation("<", false); - var peg$e57 = peg$otherExpectation("word"); - var peg$e58 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e59 = peg$otherExpectation("whitespace"); - var peg$e60 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); - var peg$e61 = peg$otherExpectation("quote"); - var peg$e62 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e63 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); - var peg$e64 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); - var peg$e65 = peg$literalExpectation("\u201C", false); - var peg$e66 = peg$literalExpectation("\u201D", false); - var peg$e67 = peg$literalExpectation("\"", false); - var peg$e68 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e69 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e70 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); - var peg$e71 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); - var peg$e72 = peg$anyExpectation(); - var peg$e73 = peg$classExpectation([","], false, false); + var peg$e50 = peg$literalExpectation("reports", true); + var peg$e51 = peg$literalExpectation("report", true); + var peg$e52 = peg$otherExpectation("operator"); + var peg$e53 = peg$classExpectation([":", "="], false, false); + var peg$e54 = peg$literalExpectation("!=", false); + var peg$e55 = peg$literalExpectation(">=", false); + var peg$e56 = peg$literalExpectation(">", false); + var peg$e57 = peg$literalExpectation("<=", false); + var peg$e58 = peg$literalExpectation("<", false); + var peg$e59 = peg$otherExpectation("word"); + var peg$e60 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e61 = peg$otherExpectation("whitespace"); + var peg$e62 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); + var peg$e63 = peg$otherExpectation("quote"); + var peg$e64 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e65 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); + var peg$e66 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); + var peg$e67 = peg$literalExpectation("\u201C", false); + var peg$e68 = peg$literalExpectation("\u201D", false); + var peg$e69 = peg$literalExpectation("\"", false); + var peg$e70 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e71 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e72 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); + var peg$e73 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); + var peg$e74 = peg$anyExpectation(); + var peg$e75 = peg$classExpectation([","], false, false); var peg$f0 = function(ranges) { return { autocomplete, ranges }; }; var peg$f1 = function(filters) { return filters.filter(Boolean).flat(); }; @@ -419,28 +423,29 @@ function peg$parse(input, options) { var peg$f41 = function() { return "createdBy"; }; var peg$f42 = function() { return "action"; }; var peg$f43 = function() { return "perDiem"; }; - var peg$f44 = function() { return "eq"; }; - var peg$f45 = function() { return "neq"; }; - var peg$f46 = function() { return "gte"; }; - var peg$f47 = function() { return "gt"; }; - var peg$f48 = function() { return "lte"; }; - var peg$f49 = function() { return "lt"; }; - var peg$f50 = function(o) { + var peg$f44 = function() {return "reports"; }; + var peg$f45 = function() { return "eq"; }; + var peg$f46 = function() { return "neq"; }; + var peg$f47 = function() { return "gte"; }; + var peg$f48 = function() { return "gt"; }; + var peg$f49 = function() { return "lte"; }; + var peg$f50 = function() { return "lt"; }; + var peg$f51 = function(o) { if (nameOperator) { expectingNestedQuote = (o === "eq"); // Use simple parser if no valid operator is found } return o; }; - var peg$f51 = function(chars) { return chars.join("").trim(); }; - var peg$f52 = function() { return "and"; }; - var peg$f53 = function() { return expectingNestedQuote; }; - var peg$f54 = function(start, inner, end) { //handle no-breaking space + var peg$f52 = function(chars) { return chars.join("").trim(); }; + var peg$f53 = function() { return "and"; }; + var peg$f54 = function() { return expectingNestedQuote; }; + var peg$f55 = function(start, inner, end) { //handle no-breaking space return [...start, '"', ...inner, '"', ...end].join(""); }; - var peg$f55 = function(start) {return "“"}; - var peg$f56 = function(start) {return "”"}; - var peg$f57 = function(start) {return "\""}; - var peg$f58 = function(start, inner, end) { + var peg$f56 = function(start) {return "“"}; + var peg$f57 = function(start) {return "”"}; + var peg$f58 = function(start) {return "\""}; + var peg$f59 = function(start, inner, end) { return [...start, '"', ...inner, '"'].join(""); }; var peg$currPos = options.peg$currPos | 0; @@ -1731,6 +1736,30 @@ function peg$parse(input, options) { s1 = peg$f43(); } s0 = s1; + if (s0 === peg$FAILED) { + s0 = input.substr(peg$currPos, 7); + if (s0.toLowerCase() === peg$c49) { + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e50); } + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 6); + if (s1.toLowerCase() === peg$c50) { + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e51); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f44(); + } + s0 = s1; + } + } } return s0; @@ -1746,81 +1775,81 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e51); } + if (peg$silentFails === 0) { peg$fail(peg$e53); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f44(); + s1 = peg$f45(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c49) { - s1 = peg$c49; + if (input.substr(peg$currPos, 2) === peg$c51) { + s1 = peg$c51; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e52); } + if (peg$silentFails === 0) { peg$fail(peg$e54); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f45(); + s1 = peg$f46(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c50) { - s1 = peg$c50; + if (input.substr(peg$currPos, 2) === peg$c52) { + s1 = peg$c52; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e53); } + if (peg$silentFails === 0) { peg$fail(peg$e55); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f46(); + s1 = peg$f47(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 62) { - s1 = peg$c51; + s1 = peg$c53; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e54); } + if (peg$silentFails === 0) { peg$fail(peg$e56); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f47(); + s1 = peg$f48(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c52) { - s1 = peg$c52; + if (input.substr(peg$currPos, 2) === peg$c54) { + s1 = peg$c54; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e55); } + if (peg$silentFails === 0) { peg$fail(peg$e57); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f48(); + s1 = peg$f49(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 60) { - s1 = peg$c53; + s1 = peg$c55; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e56); } + if (peg$silentFails === 0) { peg$fail(peg$e58); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f49(); + s1 = peg$f50(); } s0 = s1; } @@ -1831,7 +1860,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e50); } + if (peg$silentFails === 0) { peg$fail(peg$e52); } } return s0; @@ -1844,7 +1873,7 @@ function peg$parse(input, options) { s1 = peg$parseoperator(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f50(s1); + s1 = peg$f51(s1); } s0 = s1; @@ -1862,7 +1891,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e58); } + if (peg$silentFails === 0) { peg$fail(peg$e60); } } if (s2 !== peg$FAILED) { while (s2 !== peg$FAILED) { @@ -1872,7 +1901,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e58); } + if (peg$silentFails === 0) { peg$fail(peg$e60); } } } } else { @@ -1880,13 +1909,13 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f51(s1); + s1 = peg$f52(s1); } s0 = s1; peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e57); } + if (peg$silentFails === 0) { peg$fail(peg$e59); } } return s0; @@ -1898,7 +1927,7 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = peg$parse_(); peg$savedPos = s0; - s1 = peg$f52(); + s1 = peg$f53(); s0 = s1; return s0; @@ -1914,7 +1943,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e60); } + if (peg$silentFails === 0) { peg$fail(peg$e62); } } while (s1 !== peg$FAILED) { s0.push(s1); @@ -1923,12 +1952,12 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e60); } + if (peg$silentFails === 0) { peg$fail(peg$e62); } } } peg$silentFails--; s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e59); } + if (peg$silentFails === 0) { peg$fail(peg$e61); } return s0; } @@ -1938,7 +1967,7 @@ function peg$parse(input, options) { s0 = peg$currPos; peg$savedPos = peg$currPos; - s1 = peg$f53(); + s1 = peg$f54(); if (s1) { s1 = undefined; } else { @@ -1975,7 +2004,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e62); } + if (peg$silentFails === 0) { peg$fail(peg$e64); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -1984,7 +2013,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e62); } + if (peg$silentFails === 0) { peg$fail(peg$e64); } } } s2 = input.charAt(peg$currPos); @@ -1992,7 +2021,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e63); } + if (peg$silentFails === 0) { peg$fail(peg$e65); } } if (s2 !== peg$FAILED) { s3 = []; @@ -2001,7 +2030,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e64); } + if (peg$silentFails === 0) { peg$fail(peg$e66); } } while (s4 !== peg$FAILED) { s3.push(s4); @@ -2010,7 +2039,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e64); } + if (peg$silentFails === 0) { peg$fail(peg$e66); } } } s4 = input.charAt(peg$currPos); @@ -2018,7 +2047,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e63); } + if (peg$silentFails === 0) { peg$fail(peg$e65); } } if (s4 !== peg$FAILED) { s5 = []; @@ -2027,7 +2056,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e58); } + if (peg$silentFails === 0) { peg$fail(peg$e60); } } while (s6 !== peg$FAILED) { s5.push(s6); @@ -2036,11 +2065,11 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e58); } + if (peg$silentFails === 0) { peg$fail(peg$e60); } } } peg$savedPos = s0; - s0 = peg$f54(s1, s3, s5); + s0 = peg$f55(s1, s3, s5); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2052,7 +2081,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e61); } + if (peg$silentFails === 0) { peg$fail(peg$e63); } } return s0; @@ -2069,7 +2098,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e62); } + if (peg$silentFails === 0) { peg$fail(peg$e64); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -2078,7 +2107,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e62); } + if (peg$silentFails === 0) { peg$fail(peg$e64); } } } s2 = input.charAt(peg$currPos); @@ -2086,7 +2115,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e63); } + if (peg$silentFails === 0) { peg$fail(peg$e65); } } if (s2 !== peg$FAILED) { s3 = []; @@ -2095,7 +2124,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e64); } + if (peg$silentFails === 0) { peg$fail(peg$e66); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -2111,15 +2140,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c54; + s6 = peg$c56; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e65); } + if (peg$silentFails === 0) { peg$fail(peg$e67); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f55(s1); + s4 = peg$f56(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -2142,15 +2171,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c55; + s6 = peg$c57; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e66); } + if (peg$silentFails === 0) { peg$fail(peg$e68); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f56(s1); + s4 = peg$f57(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -2173,15 +2202,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c56; + s6 = peg$c58; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e67); } + if (peg$silentFails === 0) { peg$fail(peg$e69); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f57(s1); + s4 = peg$f58(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -2200,7 +2229,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e64); } + if (peg$silentFails === 0) { peg$fail(peg$e66); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -2216,15 +2245,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c54; + s6 = peg$c56; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e65); } + if (peg$silentFails === 0) { peg$fail(peg$e67); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f55(s1); + s4 = peg$f56(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -2247,15 +2276,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c55; + s6 = peg$c57; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e66); } + if (peg$silentFails === 0) { peg$fail(peg$e68); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f56(s1); + s4 = peg$f57(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -2278,15 +2307,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c56; + s6 = peg$c58; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e67); } + if (peg$silentFails === 0) { peg$fail(peg$e69); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f57(s1); + s4 = peg$f58(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -2302,7 +2331,7 @@ function peg$parse(input, options) { s4 = peg$parseclosingQuote(); if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f58(s1, s3, s4); + s0 = peg$f59(s1, s3, s4); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2314,7 +2343,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e61); } + if (peg$silentFails === 0) { peg$fail(peg$e63); } } return s0; @@ -2329,7 +2358,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e63); } + if (peg$silentFails === 0) { peg$fail(peg$e65); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2367,7 +2396,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e68); } + if (peg$silentFails === 0) { peg$fail(peg$e70); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -2376,7 +2405,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e68); } + if (peg$silentFails === 0) { peg$fail(peg$e70); } } } s2 = []; @@ -2385,7 +2414,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e69); } + if (peg$silentFails === 0) { peg$fail(peg$e71); } } while (s3 !== peg$FAILED) { s2.push(s3); @@ -2394,7 +2423,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e69); } + if (peg$silentFails === 0) { peg$fail(peg$e71); } } } s3 = []; @@ -2403,7 +2432,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e70); } + if (peg$silentFails === 0) { peg$fail(peg$e72); } } while (s4 !== peg$FAILED) { s3.push(s4); @@ -2412,7 +2441,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e70); } + if (peg$silentFails === 0) { peg$fail(peg$e72); } } } s4 = peg$parseoperator(); @@ -2431,7 +2460,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e71); } + if (peg$silentFails === 0) { peg$fail(peg$e73); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -2440,7 +2469,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e71); } + if (peg$silentFails === 0) { peg$fail(peg$e73); } } } s2 = peg$currPos; @@ -2461,7 +2490,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e72); } + if (peg$silentFails === 0) { peg$fail(peg$e74); } } peg$silentFails--; if (s4 === peg$FAILED) { @@ -2487,7 +2516,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e73); } + if (peg$silentFails === 0) { peg$fail(peg$e75); } } } } diff --git a/src/libs/SearchParser/baseRules.peggy b/src/libs/SearchParser/baseRules.peggy index eaca32705565..af360930ae0e 100644 --- a/src/libs/SearchParser/baseRules.peggy +++ b/src/libs/SearchParser/baseRules.peggy @@ -73,6 +73,7 @@ values perDiem = "perDiem"i / "per-diem"i { return "perDiem"; } + / "reports"i / "report"i {return "reports"; } operator "operator" = (":" / "=") { return "eq"; } diff --git a/src/libs/SearchParser/searchParser.js b/src/libs/SearchParser/searchParser.js index 4a4283f9a33f..a9a4834a1bc7 100644 --- a/src/libs/SearchParser/searchParser.js +++ b/src/libs/SearchParser/searchParser.js @@ -233,14 +233,16 @@ function peg$parse(input, options) { var peg$c46 = "action"; var peg$c47 = "perdiem"; var peg$c48 = "per-diem"; - var peg$c49 = "!="; - var peg$c50 = ">="; - var peg$c51 = ">"; - var peg$c52 = "<="; - var peg$c53 = "<"; - var peg$c54 = "\u201C"; - var peg$c55 = "\u201D"; - var peg$c56 = "\""; + var peg$c49 = "reports"; + var peg$c50 = "report"; + var peg$c51 = "!="; + var peg$c52 = ">="; + var peg$c53 = ">"; + var peg$c54 = "<="; + var peg$c55 = "<"; + var peg$c56 = "\u201C"; + var peg$c57 = "\u201D"; + var peg$c58 = "\""; var peg$r0 = /^[^ \t\r\n\xA0]/; var peg$r1 = /^[:=]/; @@ -307,30 +309,32 @@ function peg$parse(input, options) { var peg$e49 = peg$literalExpectation("action", true); var peg$e50 = peg$literalExpectation("perDiem", true); var peg$e51 = peg$literalExpectation("per-diem", true); - var peg$e52 = peg$otherExpectation("operator"); - var peg$e53 = peg$classExpectation([":", "="], false, false); - var peg$e54 = peg$literalExpectation("!=", false); - var peg$e55 = peg$literalExpectation(">=", false); - var peg$e56 = peg$literalExpectation(">", false); - var peg$e57 = peg$literalExpectation("<=", false); - var peg$e58 = peg$literalExpectation("<", false); - var peg$e59 = peg$otherExpectation("word"); - var peg$e60 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e61 = peg$otherExpectation("whitespace"); - var peg$e62 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); - var peg$e63 = peg$otherExpectation("quote"); - var peg$e64 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e65 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); - var peg$e66 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); - var peg$e67 = peg$literalExpectation("\u201C", false); - var peg$e68 = peg$literalExpectation("\u201D", false); - var peg$e69 = peg$literalExpectation("\"", false); - var peg$e70 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e71 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e72 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); - var peg$e73 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); - var peg$e74 = peg$anyExpectation(); - var peg$e75 = peg$classExpectation([","], false, false); + var peg$e52 = peg$literalExpectation("reports", true); + var peg$e53 = peg$literalExpectation("report", true); + var peg$e54 = peg$otherExpectation("operator"); + var peg$e55 = peg$classExpectation([":", "="], false, false); + var peg$e56 = peg$literalExpectation("!=", false); + var peg$e57 = peg$literalExpectation(">=", false); + var peg$e58 = peg$literalExpectation(">", false); + var peg$e59 = peg$literalExpectation("<=", false); + var peg$e60 = peg$literalExpectation("<", false); + var peg$e61 = peg$otherExpectation("word"); + var peg$e62 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e63 = peg$otherExpectation("whitespace"); + var peg$e64 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); + var peg$e65 = peg$otherExpectation("quote"); + var peg$e66 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e67 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); + var peg$e68 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); + var peg$e69 = peg$literalExpectation("\u201C", false); + var peg$e70 = peg$literalExpectation("\u201D", false); + var peg$e71 = peg$literalExpectation("\"", false); + var peg$e72 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e73 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e74 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); + var peg$e75 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); + var peg$e76 = peg$anyExpectation(); + var peg$e77 = peg$classExpectation([","], false, false); var peg$f0 = function(filters) { return applyDefaults(filters); }; var peg$f1 = function(head, tail) { @@ -435,28 +439,29 @@ function peg$parse(input, options) { var peg$f42 = function() { return "createdBy"; }; var peg$f43 = function() { return "action"; }; var peg$f44 = function() { return "perDiem"; }; - var peg$f45 = function() { return "eq"; }; - var peg$f46 = function() { return "neq"; }; - var peg$f47 = function() { return "gte"; }; - var peg$f48 = function() { return "gt"; }; - var peg$f49 = function() { return "lte"; }; - var peg$f50 = function() { return "lt"; }; - var peg$f51 = function(o) { + var peg$f45 = function() {return "reports"; }; + var peg$f46 = function() { return "eq"; }; + var peg$f47 = function() { return "neq"; }; + var peg$f48 = function() { return "gte"; }; + var peg$f49 = function() { return "gt"; }; + var peg$f50 = function() { return "lte"; }; + var peg$f51 = function() { return "lt"; }; + var peg$f52 = function(o) { if (nameOperator) { expectingNestedQuote = (o === "eq"); // Use simple parser if no valid operator is found } return o; }; - var peg$f52 = function(chars) { return chars.join("").trim(); }; - var peg$f53 = function() { return "and"; }; - var peg$f54 = function() { return expectingNestedQuote; }; - var peg$f55 = function(start, inner, end) { //handle no-breaking space + var peg$f53 = function(chars) { return chars.join("").trim(); }; + var peg$f54 = function() { return "and"; }; + var peg$f55 = function() { return expectingNestedQuote; }; + var peg$f56 = function(start, inner, end) { //handle no-breaking space return [...start, '"', ...inner, '"', ...end].join(""); }; - var peg$f56 = function(start) {return "“"}; - var peg$f57 = function(start) {return "”"}; - var peg$f58 = function(start) {return "\""}; - var peg$f59 = function(start, inner, end) { + var peg$f57 = function(start) {return "“"}; + var peg$f58 = function(start) {return "”"}; + var peg$f59 = function(start) {return "\""}; + var peg$f60 = function(start, inner, end) { return [...start, '"', ...inner, '"'].join(""); }; var peg$currPos = options.peg$currPos | 0; @@ -1931,6 +1936,30 @@ function peg$parse(input, options) { s1 = peg$f44(); } s0 = s1; + if (s0 === peg$FAILED) { + s0 = input.substr(peg$currPos, 7); + if (s0.toLowerCase() === peg$c49) { + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e52); } + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 6); + if (s1.toLowerCase() === peg$c50) { + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e53); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f45(); + } + s0 = s1; + } + } } return s0; @@ -1946,81 +1975,81 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e53); } + if (peg$silentFails === 0) { peg$fail(peg$e55); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f45(); + s1 = peg$f46(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c49) { - s1 = peg$c49; + if (input.substr(peg$currPos, 2) === peg$c51) { + s1 = peg$c51; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e54); } + if (peg$silentFails === 0) { peg$fail(peg$e56); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f46(); + s1 = peg$f47(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c50) { - s1 = peg$c50; + if (input.substr(peg$currPos, 2) === peg$c52) { + s1 = peg$c52; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e55); } + if (peg$silentFails === 0) { peg$fail(peg$e57); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f47(); + s1 = peg$f48(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 62) { - s1 = peg$c51; + s1 = peg$c53; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e56); } + if (peg$silentFails === 0) { peg$fail(peg$e58); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f48(); + s1 = peg$f49(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c52) { - s1 = peg$c52; + if (input.substr(peg$currPos, 2) === peg$c54) { + s1 = peg$c54; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e57); } + if (peg$silentFails === 0) { peg$fail(peg$e59); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f49(); + s1 = peg$f50(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 60) { - s1 = peg$c53; + s1 = peg$c55; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e58); } + if (peg$silentFails === 0) { peg$fail(peg$e60); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f50(); + s1 = peg$f51(); } s0 = s1; } @@ -2031,7 +2060,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e52); } + if (peg$silentFails === 0) { peg$fail(peg$e54); } } return s0; @@ -2044,7 +2073,7 @@ function peg$parse(input, options) { s1 = peg$parseoperator(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f51(s1); + s1 = peg$f52(s1); } s0 = s1; @@ -2062,7 +2091,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e60); } + if (peg$silentFails === 0) { peg$fail(peg$e62); } } if (s2 !== peg$FAILED) { while (s2 !== peg$FAILED) { @@ -2072,7 +2101,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e60); } + if (peg$silentFails === 0) { peg$fail(peg$e62); } } } } else { @@ -2080,13 +2109,13 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f52(s1); + s1 = peg$f53(s1); } s0 = s1; peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e59); } + if (peg$silentFails === 0) { peg$fail(peg$e61); } } return s0; @@ -2098,7 +2127,7 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = peg$parse_(); peg$savedPos = s0; - s1 = peg$f53(); + s1 = peg$f54(); s0 = s1; return s0; @@ -2114,7 +2143,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e62); } + if (peg$silentFails === 0) { peg$fail(peg$e64); } } while (s1 !== peg$FAILED) { s0.push(s1); @@ -2123,12 +2152,12 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e62); } + if (peg$silentFails === 0) { peg$fail(peg$e64); } } } peg$silentFails--; s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e61); } + if (peg$silentFails === 0) { peg$fail(peg$e63); } return s0; } @@ -2138,7 +2167,7 @@ function peg$parse(input, options) { s0 = peg$currPos; peg$savedPos = peg$currPos; - s1 = peg$f54(); + s1 = peg$f55(); if (s1) { s1 = undefined; } else { @@ -2175,7 +2204,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e64); } + if (peg$silentFails === 0) { peg$fail(peg$e66); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -2184,7 +2213,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e64); } + if (peg$silentFails === 0) { peg$fail(peg$e66); } } } s2 = input.charAt(peg$currPos); @@ -2192,7 +2221,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e65); } + if (peg$silentFails === 0) { peg$fail(peg$e67); } } if (s2 !== peg$FAILED) { s3 = []; @@ -2201,7 +2230,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e66); } + if (peg$silentFails === 0) { peg$fail(peg$e68); } } while (s4 !== peg$FAILED) { s3.push(s4); @@ -2210,7 +2239,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e66); } + if (peg$silentFails === 0) { peg$fail(peg$e68); } } } s4 = input.charAt(peg$currPos); @@ -2218,7 +2247,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e65); } + if (peg$silentFails === 0) { peg$fail(peg$e67); } } if (s4 !== peg$FAILED) { s5 = []; @@ -2227,7 +2256,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e60); } + if (peg$silentFails === 0) { peg$fail(peg$e62); } } while (s6 !== peg$FAILED) { s5.push(s6); @@ -2236,11 +2265,11 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e60); } + if (peg$silentFails === 0) { peg$fail(peg$e62); } } } peg$savedPos = s0; - s0 = peg$f55(s1, s3, s5); + s0 = peg$f56(s1, s3, s5); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2252,7 +2281,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e63); } + if (peg$silentFails === 0) { peg$fail(peg$e65); } } return s0; @@ -2269,7 +2298,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e64); } + if (peg$silentFails === 0) { peg$fail(peg$e66); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -2278,7 +2307,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e64); } + if (peg$silentFails === 0) { peg$fail(peg$e66); } } } s2 = input.charAt(peg$currPos); @@ -2286,7 +2315,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e65); } + if (peg$silentFails === 0) { peg$fail(peg$e67); } } if (s2 !== peg$FAILED) { s3 = []; @@ -2295,7 +2324,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e66); } + if (peg$silentFails === 0) { peg$fail(peg$e68); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -2311,15 +2340,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c54; + s6 = peg$c56; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e67); } + if (peg$silentFails === 0) { peg$fail(peg$e69); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f56(s1); + s4 = peg$f57(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -2342,15 +2371,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c55; + s6 = peg$c57; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e68); } + if (peg$silentFails === 0) { peg$fail(peg$e70); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f57(s1); + s4 = peg$f58(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -2373,15 +2402,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c56; + s6 = peg$c58; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e69); } + if (peg$silentFails === 0) { peg$fail(peg$e71); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f58(s1); + s4 = peg$f59(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -2400,7 +2429,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e66); } + if (peg$silentFails === 0) { peg$fail(peg$e68); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -2416,15 +2445,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c54; + s6 = peg$c56; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e67); } + if (peg$silentFails === 0) { peg$fail(peg$e69); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f56(s1); + s4 = peg$f57(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -2447,15 +2476,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c55; + s6 = peg$c57; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e68); } + if (peg$silentFails === 0) { peg$fail(peg$e70); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f57(s1); + s4 = peg$f58(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -2478,15 +2507,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c56; + s6 = peg$c58; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e69); } + if (peg$silentFails === 0) { peg$fail(peg$e71); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f58(s1); + s4 = peg$f59(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -2502,7 +2531,7 @@ function peg$parse(input, options) { s4 = peg$parseclosingQuote(); if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f59(s1, s3, s4); + s0 = peg$f60(s1, s3, s4); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2514,7 +2543,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e63); } + if (peg$silentFails === 0) { peg$fail(peg$e65); } } return s0; @@ -2529,7 +2558,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e65); } + if (peg$silentFails === 0) { peg$fail(peg$e67); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2567,7 +2596,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e70); } + if (peg$silentFails === 0) { peg$fail(peg$e72); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -2576,7 +2605,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e70); } + if (peg$silentFails === 0) { peg$fail(peg$e72); } } } s2 = []; @@ -2585,7 +2614,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e71); } + if (peg$silentFails === 0) { peg$fail(peg$e73); } } while (s3 !== peg$FAILED) { s2.push(s3); @@ -2594,7 +2623,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e71); } + if (peg$silentFails === 0) { peg$fail(peg$e73); } } } s3 = []; @@ -2603,7 +2632,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e72); } + if (peg$silentFails === 0) { peg$fail(peg$e74); } } while (s4 !== peg$FAILED) { s3.push(s4); @@ -2612,7 +2641,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e72); } + if (peg$silentFails === 0) { peg$fail(peg$e74); } } } s4 = peg$parseoperator(); @@ -2631,7 +2660,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e73); } + if (peg$silentFails === 0) { peg$fail(peg$e75); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -2640,7 +2669,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e73); } + if (peg$silentFails === 0) { peg$fail(peg$e75); } } } s2 = peg$currPos; @@ -2661,7 +2690,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e74); } + if (peg$silentFails === 0) { peg$fail(peg$e76); } } peg$silentFails--; if (s4 === peg$FAILED) { @@ -2687,7 +2716,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e75); } + if (peg$silentFails === 0) { peg$fail(peg$e77); } } } } From 6901d3bdc1d7687366c48b11b7238e301a007934 Mon Sep 17 00:00:00 2001 From: Carlos Martins Date: Wed, 13 Aug 2025 15:46:58 -0600 Subject: [PATCH 2/9] refactor reports syntax --- .../Search/SearchAutocompleteList.tsx | 5 +- src/libs/SearchAutocompleteUtils.ts | 2 +- src/libs/SearchParser/autocompleteParser.js | 62 ++++++++++------- src/libs/SearchParser/baseRules.peggy | 6 +- src/libs/SearchParser/searchParser.js | 66 ++++++++++++------- src/libs/SearchQueryUtils.ts | 8 +-- 6 files changed, 90 insertions(+), 59 deletions(-) diff --git a/src/components/Search/SearchAutocompleteList.tsx b/src/components/Search/SearchAutocompleteList.tsx index 8d441c08eda7..9cff9dc1e7aa 100644 --- a/src/components/Search/SearchAutocompleteList.tsx +++ b/src/components/Search/SearchAutocompleteList.tsx @@ -181,7 +181,7 @@ function SearchAutocompleteList( const [isInitialRender, setIsInitialRender] = useState(true); const typeAutocompleteList = Object.values(CONST.SEARCH.DATA_TYPES); - const groupByAutocompleteList = Object.values(CONST.SEARCH.GROUP_BY); + const groupByAutocompleteList = Object.values(CONST.SEARCH.GROUP_BY).map((value) => getUserFriendlyValue(value)); const statusAutocompleteList = useMemo(() => { const parsedQuery = parseForAutocomplete(autocompleteQueryValue); @@ -204,7 +204,7 @@ function SearchAutocompleteList( } }, [autocompleteQueryValue]); - const expenseTypes = Object.values(CONST.SEARCH.TRANSACTION_TYPE); + const expenseTypes = Object.values(CONST.SEARCH.TRANSACTION_TYPE).map((value) => getUserFriendlyValue(value)); const withdrawalTypes = Object.values(CONST.SEARCH.WITHDRAWAL_TYPE); const booleanTypes = Object.values(CONST.SEARCH.BOOLEAN); @@ -381,7 +381,6 @@ function SearchAutocompleteList( } case CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPENSE_TYPE: { const filteredExpenseTypes = expenseTypes - .map((value) => getUserFriendlyValue(value)) .filter((expenseType) => expenseType.includes(autocompleteValue.toLowerCase()) && !alreadyAutocompletedKeys.includes(expenseType)) .sort(); diff --git a/src/libs/SearchAutocompleteUtils.ts b/src/libs/SearchAutocompleteUtils.ts index 53dc8a9c1626..28bd2ba592db 100644 --- a/src/libs/SearchAutocompleteUtils.ts +++ b/src/libs/SearchAutocompleteUtils.ts @@ -133,7 +133,7 @@ function filterOutRangesWithCorrectValue( ...CONST.SEARCH.STATUS.TRIP, ...CONST.SEARCH.STATUS.TASK, }) as string[]; - const groupByList = Object.values(CONST.SEARCH.GROUP_BY) as string[]; + const groupByList = Object.values(CONST.SEARCH.GROUP_BY).map((value) => getUserFriendlyValue(value)); const booleanList = Object.values(CONST.SEARCH.BOOLEAN) as string[]; const actionList = Object.values(CONST.SEARCH.ACTION_FILTERS) as string[]; const datePresetList = Object.values(CONST.SEARCH.DATE_PRESETS) as string[]; diff --git a/src/libs/SearchParser/autocompleteParser.js b/src/libs/SearchParser/autocompleteParser.js index 2d38f1efe58e..550f0718d6d9 100644 --- a/src/libs/SearchParser/autocompleteParser.js +++ b/src/libs/SearchParser/autocompleteParser.js @@ -1712,6 +1712,17 @@ function peg$parse(input, options) { return s0; } + function peg$parsevalues() { + var s0; + + s0 = peg$parseperDiem(); + if (s0 === peg$FAILED) { + s0 = peg$parsereport(); + } + + return s0; + } + function peg$parseperDiem() { var s0, s1; @@ -1736,30 +1747,35 @@ function peg$parse(input, options) { s1 = peg$f43(); } s0 = s1; - if (s0 === peg$FAILED) { - s0 = input.substr(peg$currPos, 7); - if (s0.toLowerCase() === peg$c49) { - peg$currPos += 7; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e50); } - } - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c50) { - peg$currPos += 6; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e51); } - } - if (s1 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$f44(); - } - s0 = s1; - } + } + + return s0; + } + + function peg$parsereport() { + var s0, s1; + + s0 = input.substr(peg$currPos, 7); + if (s0.toLowerCase() === peg$c49) { + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e50); } + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 6); + if (s1.toLowerCase() === peg$c50) { + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e51); } } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f44(); + } + s0 = s1; } return s0; diff --git a/src/libs/SearchParser/baseRules.peggy b/src/libs/SearchParser/baseRules.peggy index af360930ae0e..fb5754d1af29 100644 --- a/src/libs/SearchParser/baseRules.peggy +++ b/src/libs/SearchParser/baseRules.peggy @@ -70,10 +70,10 @@ action = "action"i { return "action"; } // Value transformation rules values = perDiem + / report -perDiem - = "perDiem"i / "per-diem"i { return "perDiem"; } - / "reports"i / "report"i {return "reports"; } +perDiem = "perDiem"i / "per-diem"i { return "perDiem"; } +report = "reports"i / "report"i {return "reports"; } operator "operator" = (":" / "=") { return "eq"; } diff --git a/src/libs/SearchParser/searchParser.js b/src/libs/SearchParser/searchParser.js index a9a4834a1bc7..20619cda3892 100644 --- a/src/libs/SearchParser/searchParser.js +++ b/src/libs/SearchParser/searchParser.js @@ -999,7 +999,7 @@ function peg$parse(input, options) { } s2 = peg$currPos; s3 = []; - s4 = peg$parseperDiem(); + s4 = peg$parsevalues(); if (s4 === peg$FAILED) { s4 = peg$parsequotedString(); if (s4 === peg$FAILED) { @@ -1032,7 +1032,7 @@ function peg$parse(input, options) { s5 = peg$FAILED; } if (s5 !== peg$FAILED) { - s5 = peg$parseperDiem(); + s5 = peg$parsevalues(); if (s5 === peg$FAILED) { s5 = peg$parsequotedString(); if (s5 === peg$FAILED) { @@ -1912,6 +1912,17 @@ function peg$parse(input, options) { return s0; } + function peg$parsevalues() { + var s0; + + s0 = peg$parseperDiem(); + if (s0 === peg$FAILED) { + s0 = peg$parsereport(); + } + + return s0; + } + function peg$parseperDiem() { var s0, s1; @@ -1936,30 +1947,35 @@ function peg$parse(input, options) { s1 = peg$f44(); } s0 = s1; - if (s0 === peg$FAILED) { - s0 = input.substr(peg$currPos, 7); - if (s0.toLowerCase() === peg$c49) { - peg$currPos += 7; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e52); } - } - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c50) { - peg$currPos += 6; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e53); } - } - if (s1 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$f45(); - } - s0 = s1; - } + } + + return s0; + } + + function peg$parsereport() { + var s0, s1; + + s0 = input.substr(peg$currPos, 7); + if (s0.toLowerCase() === peg$c49) { + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e52); } + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 6); + if (s1.toLowerCase() === peg$c50) { + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e53); } } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f45(); + } + s0 = s1; } return s0; diff --git a/src/libs/SearchQueryUtils.ts b/src/libs/SearchQueryUtils.ts index c355907f7629..df4499639a66 100644 --- a/src/libs/SearchQueryUtils.ts +++ b/src/libs/SearchQueryUtils.ts @@ -108,9 +108,9 @@ function getUserFriendlyKey(keyName: SearchFilterKey | typeof CONST.SEARCH.SYNTA * Lookup a value in the displayTextToValueMap and return the backend value. * * @example - * getUserFriendlyValueFromMap("per-diem") // returns "perDiem" + * getFilterValueFromText("per-diem") // returns "perDiem" */ -function getUserFriendlyValueFromMap(searchText: string): string { +function getFilterValueFromText(searchText: string): string { return displayTextToValueMap.get(searchText) ?? searchText; } @@ -235,13 +235,13 @@ function getFilters(queryJSON: SearchQueryJSON) { if (!Array.isArray(node.right)) { filterArray.push({ operator: node.operator, - value: getUserFriendlyValueFromMap(String(node.right)) as string | number, + value: getFilterValueFromText(String(node.right)) as string | number, }); } else { node.right.forEach((element) => { filterArray.push({ operator: node.operator, - value: getUserFriendlyValueFromMap(String(element)), + value: getFilterValueFromText(String(element)), }); }); } From afda04f152a4f9dd637217cb752ce194f92095f2 Mon Sep 17 00:00:00 2001 From: Carlos Martins Date: Wed, 13 Aug 2025 16:18:42 -0600 Subject: [PATCH 3/9] update report syntax --- src/libs/SearchQueryUtils.ts | 10 +++++----- tests/unit/Search/SearchUIUtilsTest.ts | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/libs/SearchQueryUtils.ts b/src/libs/SearchQueryUtils.ts index df4499639a66..53fb82aa9659 100644 --- a/src/libs/SearchQueryUtils.ts +++ b/src/libs/SearchQueryUtils.ts @@ -120,7 +120,7 @@ function getFilterValueFromText(searchText: string): string { * @example * getUserFriendlyValues("perDiem") // returns "per-diem" */ -function getUserFriendlyValue(value: string): UserFriendlyValue { +function getUserFriendlyValue(value: string | undefined): UserFriendlyValue { return CONST.SEARCH.SEARCH_USER_FRIENDLY_VALUES_MAP[value as keyof typeof CONST.SEARCH.SEARCH_USER_FRIENDLY_VALUES_MAP] ?? value; } @@ -402,9 +402,9 @@ function buildSearchQueryString(queryJSON?: SearchQueryJSON) { if (queryFieldValue) { if (Array.isArray(queryFieldValue)) { - queryParts.push(`${key}:${queryFieldValue.join(',')}`); + queryParts.push(`${key}:${getUserFriendlyValue(queryFieldValue.join(','))}`); } else { - queryParts.push(`${key}:${queryFieldValue}`); + queryParts.push(`${key}:${getUserFriendlyValue(queryFieldValue)}`); } } } @@ -460,7 +460,7 @@ function buildQueryStringFromFilterFormValues(filterValues: Partial 0) { diff --git a/tests/unit/Search/SearchUIUtilsTest.ts b/tests/unit/Search/SearchUIUtilsTest.ts index f5d1e14c2440..eeba23107424 100644 --- a/tests/unit/Search/SearchUIUtilsTest.ts +++ b/tests/unit/Search/SearchUIUtilsTest.ts @@ -1458,7 +1458,7 @@ describe('SearchUIUtils', () => { .map((section) => section.menuItems) .flat(); - const expectedQueries = ['type:expense sortBy:date sortOrder:desc', 'type:expense sortBy:date sortOrder:desc groupBy:reports', 'type:chat sortBy:date sortOrder:desc']; + const expectedQueries = ['type:expense sortBy:date sortOrder:desc', 'type:expense sortBy:date sortOrder:desc groupBy:report', 'type:chat sortBy:date sortOrder:desc']; menuItems.forEach((item, index) => { expect(item.searchQuery).toStrictEqual(expectedQueries.at(index)); From 2d3f50b8895642e88c4e43df04f1d24660f5ead0 Mon Sep 17 00:00:00 2001 From: Carlos Martins Date: Wed, 13 Aug 2025 16:20:58 -0600 Subject: [PATCH 4/9] update all isntances --- src/libs/SearchQueryUtils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/SearchQueryUtils.ts b/src/libs/SearchQueryUtils.ts index 53fb82aa9659..698588310c6f 100644 --- a/src/libs/SearchQueryUtils.ts +++ b/src/libs/SearchQueryUtils.ts @@ -798,7 +798,7 @@ function buildUserReadableQueryString( const {type, status, groupBy, policyID} = queryJSON; const filters = queryJSON.flatFilters; - let title = status ? `type:${type} status:${Array.isArray(status) ? status.join(',') : status}` : `type:${type}`; + let title = status ? `type:${getUserFriendlyValue(type)} status:${Array.isArray(status) ? status.join(',') : status}` : `type:${getUserFriendlyValue(type)}`; if (groupBy) { title += ` group-by:${getUserFriendlyValue(groupBy)}`; @@ -866,7 +866,7 @@ function buildUserReadableQueryString( } else { displayQueryFilters = queryFilter.map((filter) => ({ operator: filter.operator, - value: getFilterDisplayValue(key, filter.value.toString(), PersonalDetails, reports, cardList, cardFeeds, policies), + value: getFilterDisplayValue(key, getUserFriendlyValue(filter.value.toString()), PersonalDetails, reports, cardList, cardFeeds, policies), })); } title += buildFilterValuesString(getUserFriendlyKey(key), displayQueryFilters); From 2e6e67cb889b0ec5cb173ba1e5cc4b645b203e16 Mon Sep 17 00:00:00 2001 From: Carlos Martins Date: Tue, 19 Aug 2025 13:41:46 -0600 Subject: [PATCH 5/9] fix tests --- src/components/Search/SearchAutocompleteList.tsx | 10 +++++++++- tests/unit/SearchParserTest.ts | 4 ++-- tests/utils/fixtures/searchParsersCommonQueries.ts | 4 ++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/components/Search/SearchAutocompleteList.tsx b/src/components/Search/SearchAutocompleteList.tsx index 373f40d6a8be..54977b08f216 100644 --- a/src/components/Search/SearchAutocompleteList.tsx +++ b/src/components/Search/SearchAutocompleteList.tsx @@ -31,7 +31,15 @@ import { getQueryWithoutAutocompletedPart, parseForAutocomplete, } from '@libs/SearchAutocompleteUtils'; -import {buildSearchQueryJSON, buildUserReadableQueryString, getQueryWithoutFilters, getUserFriendlyKey, getUserFriendlyValue, sanitizeSearchValue, shouldHighlight} from '@libs/SearchQueryUtils'; +import { + buildSearchQueryJSON, + buildUserReadableQueryString, + getQueryWithoutFilters, + getUserFriendlyKey, + getUserFriendlyValue, + sanitizeSearchValue, + shouldHighlight, +} from '@libs/SearchQueryUtils'; import {getDatePresets} from '@libs/SearchUIUtils'; import StringUtils from '@libs/StringUtils'; import Timing from '@userActions/Timing'; diff --git a/tests/unit/SearchParserTest.ts b/tests/unit/SearchParserTest.ts index 34500adee0f7..13e3e214f54c 100644 --- a/tests/unit/SearchParserTest.ts +++ b/tests/unit/SearchParserTest.ts @@ -47,7 +47,7 @@ const tests = [ right: { operator: 'eq', left: 'reportID', - right: 'report', + right: '1234', }, }, }, @@ -85,7 +85,7 @@ const tests = [ right: { operator: 'eq', left: 'reportID', - right: 'report', + right: '1234', }, }, }, diff --git a/tests/utils/fixtures/searchParsersCommonQueries.ts b/tests/utils/fixtures/searchParsersCommonQueries.ts index d829db13018c..168edf3ddddb 100644 --- a/tests/utils/fixtures/searchParsersCommonQueries.ts +++ b/tests/utils/fixtures/searchParsersCommonQueries.ts @@ -3,8 +3,8 @@ */ const parserCommonTests = { simple: 'type:expense', - userFriendlyNames: 'tax-rate:rate1 expense-type:card card:"Big Bank" report-id:report', - oldNames: 'taxRate:rate1 expenseType:card cardID:"Big Bank" reportID:report', + userFriendlyNames: 'tax-rate:rate1 expense-type:card card:"Big Bank" report-id:1234', + oldNames: 'taxRate:rate1 expenseType:card cardID:"Big Bank" report-id:1234', complex: 'amount>200 expense-type:cash,card description:"Las Vegas party" date:2024-06-01 category:travel,hotel,"meal & entertainment"', quotesIOS: 'type:expense category:“a b”', }; From a6a9a91f99547062756375cd43013e482046d589 Mon Sep 17 00:00:00 2001 From: Carlos Martins Date: Tue, 19 Aug 2025 16:18:00 -0600 Subject: [PATCH 6/9] fix test --- tests/unit/Search/SearchQueryUtilsTest.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/Search/SearchQueryUtilsTest.ts b/tests/unit/Search/SearchQueryUtilsTest.ts index ac15be24d6bf..b63567691605 100644 --- a/tests/unit/Search/SearchQueryUtilsTest.ts +++ b/tests/unit/Search/SearchQueryUtilsTest.ts @@ -78,11 +78,11 @@ describe('SearchQueryUtils', () => { }); test('returns query with updated groupBy', () => { - const userQuery = 'from:johndoe@example.com groupBy:reports'; + const userQuery = 'from:johndoe@example.com groupBy:report'; const result = getQueryWithUpdatedValues(userQuery); - expect(result).toEqual(`${defaultQuery} groupBy:reports from:12345`); + expect(result).toEqual(`${defaultQuery} groupBy:report from:12345`); }); }); From 029a027e9683ef6199441f39a0074780f62485c2 Mon Sep 17 00:00:00 2001 From: Carlos Martins Date: Tue, 19 Aug 2025 16:23:39 -0600 Subject: [PATCH 7/9] rm submodule --- Mobile-Expensify | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mobile-Expensify b/Mobile-Expensify index 0f7cf2e6e876..9b52ac7b0ba2 160000 --- a/Mobile-Expensify +++ b/Mobile-Expensify @@ -1 +1 @@ -Subproject commit 0f7cf2e6e876e3c6ec5a217916bda0fea33eb4b9 +Subproject commit 9b52ac7b0ba20731fa8bd56a9b2f6b9f97199429 From aba9ffe4c40ddf8da8c4e744ed8df4cde0f20122 Mon Sep 17 00:00:00 2001 From: Carlos Martins Date: Tue, 19 Aug 2025 16:30:20 -0600 Subject: [PATCH 8/9] update logic --- src/libs/SearchAutocompleteUtils.ts | 3 ++- src/libs/SearchQueryUtils.ts | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/libs/SearchAutocompleteUtils.ts b/src/libs/SearchAutocompleteUtils.ts index 8587f9cf671c..e661670e305e 100644 --- a/src/libs/SearchAutocompleteUtils.ts +++ b/src/libs/SearchAutocompleteUtils.ts @@ -111,6 +111,7 @@ function getAutocompleteQueryWithComma(prevQuery: string, newQuery: string) { } const userFriendlyExpenseTypeList = Object.values(CONST.SEARCH.TRANSACTION_TYPE).map((value) => getUserFriendlyValue(value)); +const userFriendlyGroupByList = Object.values(CONST.SEARCH.GROUP_BY).map((value) => getUserFriendlyValue(value)); /** * @private @@ -135,7 +136,7 @@ function filterOutRangesWithCorrectValue( ...CONST.SEARCH.STATUS.TRIP, ...CONST.SEARCH.STATUS.TASK, }) as string[]; - const groupByList = Object.values(CONST.SEARCH.GROUP_BY).map((value) => getUserFriendlyValue(value)); + const groupByList = userFriendlyGroupByList; const booleanList = Object.values(CONST.SEARCH.BOOLEAN) as string[]; const actionList = Object.values(CONST.SEARCH.ACTION_FILTERS) as string[]; const datePresetList = Object.values(CONST.SEARCH.DATE_PRESETS) as string[]; diff --git a/src/libs/SearchQueryUtils.ts b/src/libs/SearchQueryUtils.ts index b6de3c19617b..75f25f0f0df8 100644 --- a/src/libs/SearchQueryUtils.ts +++ b/src/libs/SearchQueryUtils.ts @@ -386,9 +386,9 @@ function buildSearchQueryString(queryJSON?: SearchQueryJSON) { if (queryFieldValue) { if (Array.isArray(queryFieldValue)) { - queryParts.push(`${key}:${getUserFriendlyValue(queryFieldValue.join(','))}`); + queryParts.push(`${key}:${queryFieldValue.join(',')}`); } else { - queryParts.push(`${key}:${getUserFriendlyValue(queryFieldValue)}`); + queryParts.push(`${key}:${queryFieldValue}`); } } } @@ -444,7 +444,7 @@ function buildQueryStringFromFilterFormValues(filterValues: Partial Date: Tue, 19 Aug 2025 16:34:24 -0600 Subject: [PATCH 9/9] update tests --- tests/unit/Search/SearchQueryUtilsTest.ts | 4 ++-- tests/unit/Search/SearchUIUtilsTest.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/unit/Search/SearchQueryUtilsTest.ts b/tests/unit/Search/SearchQueryUtilsTest.ts index b63567691605..ac15be24d6bf 100644 --- a/tests/unit/Search/SearchQueryUtilsTest.ts +++ b/tests/unit/Search/SearchQueryUtilsTest.ts @@ -78,11 +78,11 @@ describe('SearchQueryUtils', () => { }); test('returns query with updated groupBy', () => { - const userQuery = 'from:johndoe@example.com groupBy:report'; + const userQuery = 'from:johndoe@example.com groupBy:reports'; const result = getQueryWithUpdatedValues(userQuery); - expect(result).toEqual(`${defaultQuery} groupBy:report from:12345`); + expect(result).toEqual(`${defaultQuery} groupBy:reports from:12345`); }); }); diff --git a/tests/unit/Search/SearchUIUtilsTest.ts b/tests/unit/Search/SearchUIUtilsTest.ts index 21c2f60f9ed3..08d44333a777 100644 --- a/tests/unit/Search/SearchUIUtilsTest.ts +++ b/tests/unit/Search/SearchUIUtilsTest.ts @@ -1683,7 +1683,7 @@ describe('SearchUIUtils', () => { .map((section) => section.menuItems) .flat(); - const expectedQueries = ['type:expense sortBy:date sortOrder:desc', 'type:expense sortBy:date sortOrder:desc groupBy:report', 'type:chat sortBy:date sortOrder:desc']; + const expectedQueries = ['type:expense sortBy:date sortOrder:desc', 'type:expense sortBy:date sortOrder:desc groupBy:reports', 'type:chat sortBy:date sortOrder:desc']; menuItems.forEach((item, index) => { expect(item.searchQuery).toStrictEqual(expectedQueries.at(index));