Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit ef68650

Browse files
authored
Implement MSC3973: Search users in the user directory with the Widget API (#10269)
* Add an action to search for users in the user directory according to MSC3973 Signed-off-by: Dominik Henneke <[email protected]> * Fix linter errors Signed-off-by: Dominik Henneke <[email protected]> * Update the matrix-widget-api package to version 1.3.0 Signed-off-by: Dominik Henneke <[email protected]> * Improve the test Signed-off-by: Dominik Henneke <[email protected]> --------- Signed-off-by: Dominik Henneke <[email protected]>
1 parent aee4aeb commit ef68650

File tree

4 files changed

+55
-9
lines changed

4 files changed

+55
-9
lines changed

src/stores/widgets/StopGapWidgetDriver.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {
3131
WidgetDriver,
3232
WidgetEventCapability,
3333
WidgetKind,
34+
ISearchUserDirectoryResult,
3435
} from "matrix-widget-api";
3536
import { ClientEvent, ITurnServer as IClientTurnServer } from "matrix-js-sdk/src/client";
3637
import { EventType } from "matrix-js-sdk/src/@types/event";
@@ -486,4 +487,19 @@ export class StopGapWidgetDriver extends WidgetDriver {
486487
prevBatch: prevBatch ?? undefined,
487488
};
488489
}
490+
491+
public async searchUserDirectory(searchTerm: string, limit?: number): Promise<ISearchUserDirectoryResult> {
492+
const client = MatrixClientPeg.get();
493+
494+
const { limited, results } = await client.searchUserDirectory({ term: searchTerm, limit });
495+
496+
return {
497+
limited,
498+
results: results.map((r) => ({
499+
userId: r.user_id,
500+
displayName: r.display_name,
501+
avatarUrl: r.avatar_url,
502+
})),
503+
};
504+
}
489505
}

test/stores/widgets/StopGapWidgetDriver-test.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,4 +394,40 @@ describe("StopGapWidgetDriver", () => {
394394
expect(client.getVisibleRooms).toHaveBeenCalledWith(true);
395395
});
396396
});
397+
398+
describe("searchUserDirectory", () => {
399+
let driver: WidgetDriver;
400+
401+
beforeEach(() => {
402+
driver = mkDefaultDriver();
403+
});
404+
405+
it("searches for users in the user directory", async () => {
406+
client.searchUserDirectory.mockResolvedValue({
407+
limited: false,
408+
results: [{ user_id: "@user", display_name: "Name", avatar_url: "mxc://" }],
409+
});
410+
411+
await expect(driver.searchUserDirectory("foo")).resolves.toEqual({
412+
limited: false,
413+
results: [{ userId: "@user", displayName: "Name", avatarUrl: "mxc://" }],
414+
});
415+
416+
expect(client.searchUserDirectory).toHaveBeenCalledWith({ term: "foo", limit: undefined });
417+
});
418+
419+
it("searches for users with a custom limit", async () => {
420+
client.searchUserDirectory.mockResolvedValue({
421+
limited: true,
422+
results: [],
423+
});
424+
425+
await expect(driver.searchUserDirectory("foo", 25)).resolves.toEqual({
426+
limited: true,
427+
results: [],
428+
});
429+
430+
expect(client.searchUserDirectory).toHaveBeenCalledWith({ term: "foo", limit: 25 });
431+
});
432+
});
397433
});

test/test-utils/test-utils.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ export function createTestClient(): MatrixClient {
231231
room_id: roomId,
232232
});
233233
}),
234+
235+
searchUserDirectory: jest.fn().mockResolvedValue({ limited: false, results: [] }),
234236
} as unknown as MatrixClient;
235237

236238
client.reEmitter = new ReEmitter(client);

yarn.lock

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6510,15 +6510,7 @@ matrix-web-i18n@^1.3.0:
65106510
"@babel/traverse" "^7.18.5"
65116511
walk "^2.3.15"
65126512

6513-
matrix-widget-api@^1.0.0:
6514-
version "1.1.1"
6515-
resolved "https://registry.yarnpkg.com/matrix-widget-api/-/matrix-widget-api-1.1.1.tgz#d3fec45033d0cbc14387a38ba92dac4dbb1be962"
6516-
integrity sha512-gNSgmgSwvOsOcWK9k2+tOhEMYBiIMwX95vMZu0JqY7apkM02xrOzUBuPRProzN8CnbIALH7e3GAhatF6QCNvtA==
6517-
dependencies:
6518-
"@types/events" "^3.0.0"
6519-
events "^3.2.0"
6520-
6521-
matrix-widget-api@^1.3.1:
6513+
matrix-widget-api@^1.0.0, matrix-widget-api@^1.3.1:
65226514
version "1.3.1"
65236515
resolved "https://registry.yarnpkg.com/matrix-widget-api/-/matrix-widget-api-1.3.1.tgz#e38f404c76bb15c113909505c1c1a5b4d781c2f5"
65246516
integrity sha512-+rN6vGvnXm+fn0uq9r2KWSL/aPtehD6ObC50jYmUcEfgo8CUpf9eUurmjbRlwZkWq3XHXFuKQBUCI9UzqWg37Q==

0 commit comments

Comments
 (0)