From e7529306ac5c4575e7b852450076d108f37fceac Mon Sep 17 00:00:00 2001 From: Markov Date: Sun, 15 Mar 2026 07:12:05 +0100 Subject: [PATCH] feat: server-side mentionable filter for @mentions --- src/components/MentionInput.tsx | 13 +++++-------- src/lib/api.ts | 7 +++++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/components/MentionInput.tsx b/src/components/MentionInput.tsx index ebbe479..bf726e3 100644 --- a/src/components/MentionInput.tsx +++ b/src/components/MentionInput.tsx @@ -24,16 +24,13 @@ export default function MentionInput({ projectId, value, onChange, onSubmit, onM // Load members once useEffect(() => { if (!projectId) return; - getProjectMembers(projectId).then(setMembers).catch(() => {}); + getProjectMembers(projectId, { mentionable: true }).then(setMembers).catch(() => {}); }, [projectId]); - const filtered = members.filter((m) => { - // Скрываем не-mentionable (bridge, system agents) - if (m.agent_config?.mentionable === false) return false; - if (m.type === "bridge") return false; - return m.name.toLowerCase().includes(filter.toLowerCase()) || - m.slug.toLowerCase().includes(filter.toLowerCase()); - }); + const filtered = members.filter((m) => + m.name.toLowerCase().includes(filter.toLowerCase()) || + m.slug.toLowerCase().includes(filter.toLowerCase()) + ); const insertMention = useCallback((member: ProjectMember) => { if (mentionStart < 0) return; diff --git a/src/lib/api.ts b/src/lib/api.ts index 31578a1..ebf90b1 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -430,8 +430,11 @@ export function getAttachmentUrl(attachmentId: string): string { // --- Project Members --- -export async function getProjectMembers(projectId: string): Promise { - return request(`/api/v1/projects/${projectId}/members`); +export async function getProjectMembers(projectId: string, opts?: { mentionable?: boolean }): Promise { + const params = new URLSearchParams(); + if (opts?.mentionable !== undefined) params.set("mentionable", String(opts.mentionable)); + const qs = params.toString(); + return request(`/api/v1/projects/${projectId}/members${qs ? `?${qs}` : ""}`); } export async function addProjectMember(projectId: string, memberId: string): Promise<{ ok: boolean }> {