feat: server-side mentionable filter for @mentions

This commit is contained in:
Markov 2026-03-15 07:12:05 +01:00
parent f82a89c2f9
commit e7529306ac
2 changed files with 10 additions and 10 deletions

View File

@ -24,16 +24,13 @@ export default function MentionInput({ projectId, value, onChange, onSubmit, onM
// Load members once // Load members once
useEffect(() => { useEffect(() => {
if (!projectId) return; if (!projectId) return;
getProjectMembers(projectId).then(setMembers).catch(() => {}); getProjectMembers(projectId, { mentionable: true }).then(setMembers).catch(() => {});
}, [projectId]); }, [projectId]);
const filtered = members.filter((m) => { const filtered = members.filter((m) =>
// Скрываем не-mentionable (bridge, system agents) m.name.toLowerCase().includes(filter.toLowerCase()) ||
if (m.agent_config?.mentionable === false) return false; m.slug.toLowerCase().includes(filter.toLowerCase())
if (m.type === "bridge") return false; );
return m.name.toLowerCase().includes(filter.toLowerCase()) ||
m.slug.toLowerCase().includes(filter.toLowerCase());
});
const insertMention = useCallback((member: ProjectMember) => { const insertMention = useCallback((member: ProjectMember) => {
if (mentionStart < 0) return; if (mentionStart < 0) return;

View File

@ -430,8 +430,11 @@ export function getAttachmentUrl(attachmentId: string): string {
// --- Project Members --- // --- Project Members ---
export async function getProjectMembers(projectId: string): Promise<ProjectMember[]> { export async function getProjectMembers(projectId: string, opts?: { mentionable?: boolean }): Promise<ProjectMember[]> {
return request(`/api/v1/projects/${projectId}/members`); 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 }> { export async function addProjectMember(projectId: string, memberId: string): Promise<{ ok: boolean }> {