diff --git a/web/src/narrow_state.ts b/web/src/narrow_state.ts index 36d64d9250..0bb7273ef6 100644 --- a/web/src/narrow_state.ts +++ b/web/src/narrow_state.ts @@ -18,11 +18,15 @@ export function filter(): Filter | undefined { export function search_terms(current_filter: Filter | undefined = filter()): NarrowTerm[] { if (current_filter === undefined) { if (page_params.narrow !== undefined) { - return new Filter(page_params.narrow).terms(); + current_filter = new Filter(page_params.narrow); + } else { + current_filter = new Filter([]); } - return new Filter([]).terms(); } - return current_filter.terms(); + + const non_search_operators = new Set(["with"]); + + return current_filter.terms().filter((term) => !non_search_operators.has(term.operator)); } export function is_search_view(current_filter: Filter | undefined = filter()): boolean { diff --git a/web/tests/narrow_state.test.cjs b/web/tests/narrow_state.test.cjs index 2fdef261ed..13d0426290 100644 --- a/web/tests/narrow_state.test.cjs +++ b/web/tests/narrow_state.test.cjs @@ -151,6 +151,17 @@ test("terms", () => { assert.equal(result.length, 1); assert.equal(result[0].operator, "channel"); assert.equal(result[0].operand, foo_stream_id.toString()); + + // `with` terms are excluded from search terms. + page_params.narrow = [ + {operator: "stream", operand: foo_stream_id.toString()}, + {operator: "topic", operand: "Bar"}, + {operator: "with", operand: "12"}, + ]; + result = narrow_state.search_terms(); + assert.equal(result.length, 2); + assert.equal(result[0].operator, "channel"); + assert.equal(result[1].operator, "topic"); }); test("excludes_muted_topics", () => {