diff --git a/apps/client/public/locales/en-US/translation.json b/apps/client/public/locales/en-US/translation.json index 472c4ea46..14bb06d85 100644 --- a/apps/client/public/locales/en-US/translation.json +++ b/apps/client/public/locales/en-US/translation.json @@ -1309,5 +1309,6 @@ "Read-only mode": "Read-only mode", "AI Chat can search and read workspace content, but cannot create or edit pages.": "AI Chat can search and read workspace content, but cannot create or edit pages.", "Toggle AI Chat read-only mode": "Toggle AI Chat read-only mode", - "Title only": "Title only" + "Title only": "Title only", + "you": "you" } diff --git a/apps/client/src/features/search/components/creator-filter-menu.tsx b/apps/client/src/features/search/components/creator-filter-menu.tsx index fba152d9b..c36c3d5d0 100644 --- a/apps/client/src/features/search/components/creator-filter-menu.tsx +++ b/apps/client/src/features/search/components/creator-filter-menu.tsx @@ -1,4 +1,4 @@ -import { ReactNode, useState } from "react"; +import { ReactNode, useMemo, useState } from "react"; import { Divider, Group, Menu, ScrollArea, Text, TextInput } from "@mantine/core"; import { useDebouncedValue } from "@mantine/hooks"; import { IconCheck, IconSearch } from "@tabler/icons-react"; @@ -7,6 +7,8 @@ import { useSearchSuggestionsQuery } from "@/features/search/queries/search-quer import { RadioMenuItem } from "@/components/ui/radio-menu-item"; import { CustomAvatar } from "@/components/ui/custom-avatar.tsx"; import { IUser } from "@/features/user/types/user.types.ts"; +import { useAtomValue } from "jotai"; +import { userAtom } from "@/features/user/atoms/current-user-atom.ts"; type CreatorFilterMenuProps = { value: string | null; @@ -48,6 +50,19 @@ export function CreatorFilterMenu({ }); const users: IUser[] = (suggestion?.users as IUser[]) ?? []; + const currentUser = useAtomValue(userAtom); + + // pin the signed-in user on top so they never have to search themselves + const displayUsers = useMemo(() => { + if (!currentUser) return users; + const others = users.filter((user) => user.id !== currentUser.id); + const q = debouncedQuery.trim().toLowerCase(); + const matchesQuery = + !q || + currentUser.name?.toLowerCase().includes(q) || + currentUser.email?.toLowerCase().includes(q); + return matchesQuery ? [currentUser as IUser, ...others] : users; + }, [users, currentUser, debouncedQuery]); return ( - {users.length === 0 && ( + {displayUsers.length === 0 && ( {isLoading ? t("Loading...") : t("No users found")} )} - {users.map((user) => ( + {displayUsers.map((user) => (
- {user.name} + {user.id === currentUser?.id + ? `${user.name} (${t("you")})` + : user.name} {user.email && (