From 58f2b9aa2bcaa3e0fcbb4686e9fe9ddcffaf35a3 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Tue, 7 Mar 2023 20:44:41 -0500 Subject: [PATCH] fix: Invited users should not appear as option in @mention, closes #5006 --- app/editor/components/MentionMenu.tsx | 5 ++++- server/routes/api/users.test.ts | 27 ++++++++++++++++++++++++++- server/routes/api/users.ts | 13 +++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/app/editor/components/MentionMenu.tsx b/app/editor/components/MentionMenu.tsx index 9ae3b5f7a..681659e2c 100644 --- a/app/editor/components/MentionMenu.tsx +++ b/app/editor/components/MentionMenu.tsx @@ -34,7 +34,10 @@ function MentionMenu({ search, ...rest }: MentionMenuProps) { const { t } = useTranslation(); const { users, auth } = useStores(); const { data, request } = useRequest( - React.useCallback(() => users.fetchPage({ query: search }), [users, search]) + React.useCallback( + () => users.fetchPage({ query: search, filter: "active" }), + [users, search] + ) ); React.useEffect(() => { diff --git a/server/routes/api/users.test.ts b/server/routes/api/users.test.ts index e5cb30374..8800e33cd 100644 --- a/server/routes/api/users.test.ts +++ b/server/routes/api/users.test.ts @@ -1,4 +1,9 @@ -import { buildTeam, buildAdmin, buildUser } from "@server/test/factories"; +import { + buildTeam, + buildAdmin, + buildUser, + buildInvite, +} from "@server/test/factories"; import { seed, getTestServer } from "@server/test/support"; const server = getTestServer(); @@ -70,6 +75,26 @@ describe("#users.list", () => { expect(body.data.length).toEqual(0); }); + it("should allow filtering to active", async () => { + const user = await buildUser({ + name: "Tester", + }); + await buildInvite({ + name: "Tester", + teamId: user.teamId, + }); + const res = await server.post("/api/users.list", { + body: { + query: "test", + filter: "active", + token: user.getJwtToken(), + }, + }); + const body = await res.json(); + expect(res.status).toEqual(200); + expect(body.data.length).toEqual(1); + }); + it("should allow filtering to invited", async () => { const user = await buildUser({ name: "Tester", diff --git a/server/routes/api/users.ts b/server/routes/api/users.ts index 1c58065e1..c35952dda 100644 --- a/server/routes/api/users.ts +++ b/server/routes/api/users.ts @@ -101,6 +101,19 @@ router.post("users.list", auth(), pagination(), async (ctx: APIContext) => { break; } + case "active": { + where = { + ...where, + lastActiveAt: { + [Op.ne]: null, + }, + suspendedAt: { + [Op.is]: null, + }, + }; + break; + } + case "all": { break; }