╭ changed ─╮ │src/ui.zig│ ╰──────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭──────────╮ │← previous│ ╰──────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1495 if (!params.only(&.{.start})) return null; │ │1496 return repoIssuesConflictsRoute(pair, params.values.get(.start) orelse ""); │ │1497 } │ │1456 - if (!params.only(&.{.tag})) return null; │ │1457 - if (std.meta.stringToEnum(evt.Issue.Status, w)) |status| return repoIssuesRoute(pair, status, tag_value, ""); │ │1458 - if (std.mem.eql(u8, w, "tags")) return repoThreadTagsRoute(.issue, pair, tag_value); │ │1459 - if (std.mem.eql(u8, w, "new")) return if (tag_value.len == 0) repoThreadNewRoute(.issue, pair) else null; │ │1498 + if (!params.only(&.{ .tag, .search })) return null; │ │1499 + const search_value = params.values.get(.search) orelse ""; │ │1500 + if (std.meta.stringToEnum(evt.Issue.Status, w)) |status| return withEncodedSearch(repoIssuesRoute(pair, status, tag_value, ""), search_value);│ │1501 + if (std.mem.eql(u8, w, "tags")) return withEncodedSearch(repoThreadTagsRoute(.issue, pair, tag_value), search_value); │ │1502 + if (std.mem.eql(u8, w, "new")) return if (tag_value.len == 0 and search_value.len == 0) repoThreadNewRoute(.issue, pair) else null; │ │1503 return null; │ │1504 } │ │1505 if (std.mem.eql(u8, tab, "patches")) { │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1510 if (!params.only(&.{.start})) return null; │ │1511 return repoPatchesConflictsRoute(pair, params.values.get(.start) orelse ""); │ │1512 } │ │1470 - if (!params.only(&.{.tag})) return null; │ │1471 - if (std.meta.stringToEnum(evt.Patch.StatusKind, view)) |status| return repoPatchesRoute(pair, status, tag_value, ""); │ │1472 - if (std.mem.eql(u8, view, "tags")) return repoThreadTagsRoute(.patch, pair, tag_value); │ │1473 - if (std.mem.eql(u8, view, "new")) return if (tag_value.len == 0) repoThreadNewRoute(.patch, pair) else null; │ │1474 - if (std.mem.eql(u8, view, "drafts")) return if (tag_value.len == 0) repoPatchesDraftsRoute(pair) else null; │ │1513 + if (!params.only(&.{ .tag, .search })) return null; │ │1514 + const search_value = params.values.get(.search) orelse ""; │ │1515 + if (std.meta.stringToEnum(evt.Patch.StatusKind, view)) |status| return withEncodedSearch(repoPatchesRoute(pair, status, tag_value, ""), search_value);│ │1516 + if (std.mem.eql(u8, view, "tags")) return withEncodedSearch(repoThreadTagsRoute(.patch, pair, tag_value), search_value); │ │1517 + if (std.mem.eql(u8, view, "new")) return if (tag_value.len == 0 and search_value.len == 0) repoThreadNewRoute(.patch, pair) else null; │ │1518 + if (std.mem.eql(u8, view, "drafts")) return if (tag_value.len == 0 and search_value.len == 0) repoPatchesDraftsRoute(pair) else null; │ │1519 return null; │ │1520 } │ │1521 if (std.mem.eql(u8, tab, "discussions")) { │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1522 const word = params.scanTail(&segments) catch return null; │ │1523 const tag_value = params.values.get(.tag) orelse ""; │ │1524 const view = word orelse return if (params.only(&.{})) repoDiscussionsRoute(pair, "", "") else null; │ │1481 - if (!params.only(&.{.tag})) return null; │ │1482 - if (std.mem.eql(u8, view, "recent")) return repoDiscussionsRoute(pair, tag_value, ""); │ │1483 - if (std.mem.eql(u8, view, "tags")) return repoThreadTagsRoute(.discuss, pair, tag_value); │ │1484 - if (std.mem.eql(u8, view, "new")) return if (tag_value.len == 0) repoThreadNewRoute(.discuss, pair) else null; │ │1525 + if (!params.only(&.{ .tag, .search })) return null; │ │1526 + const search_value = params.values.get(.search) orelse ""; │ │1527 + if (std.mem.eql(u8, view, "recent")) return withEncodedSearch(repoDiscussionsRoute(pair, tag_value, ""), search_value); │ │1528 + if (std.mem.eql(u8, view, "tags")) return withEncodedSearch(repoThreadTagsRoute(.discuss, pair, tag_value), search_value); │ │1529 + if (std.mem.eql(u8, view, "new")) return if (tag_value.len == 0 and search_value.len == 0) repoThreadNewRoute(.discuss, pair) else null;│ │1530 return null; │ │1531 } │ │1532 if (std.mem.eql(u8, tab, "events")) { │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1647 .repo_refs => |a_r| std.mem.eql(u8, a_r.name.slice(), b.repo_refs.name.slice()) and a_r.kind == b.repo_refs.kind and std.mem.eql(u8, a_r.from.slice(), b.repo_refs.from.slice()),│ │1648 .repo_issues => |a_i| std.mem.eql(u8, a_i.name.slice(), b.repo_issues.name.slice()) and │ │1649 std.mem.eql(u8, a_i.tag.slice(), b.repo_issues.tag.slice()) and │ │1650 + std.mem.eql(u8, a_i.search.slice(), b.repo_issues.search.slice()) and │ │1651 std.mem.eql(u8, a_i.selected.slice(), b.repo_issues.selected.slice()) and │ │1652 std.mem.eql(u8, a_i.theirs.slice(), b.repo_issues.theirs.slice()) and │ │1653 a_i.view == b.repo_issues.view and │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1655 std.mem.eql(u8, a_i.comment.slice(), b.repo_issues.comment.slice()), │ │1656 .repo_discussions => |a_t| std.mem.eql(u8, a_t.name.slice(), b.repo_discussions.name.slice()) and│ │1657 std.mem.eql(u8, a_t.tag.slice(), b.repo_discussions.tag.slice()) and │ │1658 + std.mem.eql(u8, a_t.search.slice(), b.repo_discussions.search.slice()) and │ │1659 std.mem.eql(u8, a_t.selected.slice(), b.repo_discussions.selected.slice()) and │ │1660 a_t.view == b.repo_discussions.view and │ │1661 a_t.comments_start == b.repo_discussions.comments_start and │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1662 std.mem.eql(u8, a_t.comment.slice(), b.repo_discussions.comment.slice()), │ │1663 .repo_patches => |a_p| std.mem.eql(u8, a_p.name.slice(), b.repo_patches.name.slice()) and│ │1664 std.mem.eql(u8, a_p.tag.slice(), b.repo_patches.tag.slice()) and │ │1665 + std.mem.eql(u8, a_p.search.slice(), b.repo_patches.search.slice()) and │ │1666 std.mem.eql(u8, a_p.selected.slice(), b.repo_patches.selected.slice()) and │ │1667 std.mem.eql(u8, a_p.theirs.slice(), b.repo_patches.theirs.slice()) and │ │1668 a_p.view == b.repo_patches.view and │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────╯