diff --git a/apps/web/src/components/pullRequest/PullRequestListFilters.tsx b/apps/web/src/components/pullRequest/PullRequestListFilters.tsx index 912e4c6d7ac4d..afa55f1e8fa8b 100644 --- a/apps/web/src/components/pullRequest/PullRequestListFilters.tsx +++ b/apps/web/src/components/pullRequest/PullRequestListFilters.tsx @@ -138,6 +138,9 @@ const ALL_PROJECTS_VALUE = "all"; const ALL_HOSTS_VALUE = ""; const ALL_SERVERS_VALUE = ""; const UNFILTERED_VALUE = "all"; +const VIEWER_AUTHOR_VALUE = "me"; +/** Same aliases `resolvePullRequestAuthorFilter` accepts for the signed-in viewer. */ +const isViewerAuthorFilter = (value: string | undefined) => /^@?me$/i.test(value?.trim() ?? ""); /** Project ids are unique only within an environment. */ export const pullRequestProjectKey = (project: { readonly id: ProjectId; @@ -282,8 +285,11 @@ function PullRequestAuthorChoices({ }) { const [query, setQuery] = useState(""); const hosted = useHostedFilterOptions(scope, "authors", query); + const isViewerAuthor = isViewerAuthorFilter(value); const login = value?.toLowerCase() ?? ""; - const selected = selectedPullRequestAuthor(options, hosted.authors, value); + const selected = isViewerAuthor + ? undefined + : selectedPullRequestAuthor(options, hosted.authors, value); const visible = [ ...(selected ? [selected] : []), ...pullRequestAuthorChoices(options, hosted.authors, query).filter( @@ -301,13 +307,22 @@ function PullRequestAuthorChoices({ placeholder="Search authors" aria-label="Search authors" /> - + Anyone + + + + Me + + {visible.map((option) => ( @@ -348,7 +363,7 @@ function PullRequestAuthorFilter({ Author - {value ?? "Anyone"} + {isViewerAuthorFilter(value) ? "Me" : (value ?? "Anyone")}