|
1 | 1 | "use client"; |
2 | | -import { useMemo } from "react"; |
| 2 | +import { useMemo, useState } from "react"; |
3 | 3 | import request from "~/api/request"; |
4 | 4 | import { useAll, useMatched, useMyID, usePendingFromMe } from "~/api/user"; |
5 | 5 | import { useModal } from "../common/modal/ModalProvider"; |
@@ -30,14 +30,29 @@ export default function UserTable({ query }: { query: string }) { |
30 | 30 | state: { data: pending }, |
31 | 31 | } = usePendingFromMe(); |
32 | 32 |
|
33 | | - // ユーザーがリクエストを送ってない人だけリストアップする |
| 33 | + // リクエストを送ってない人のみリクエスト送信可能 |
| 34 | + // FIXME: O(n^2) | n = count(users) なのでめっちゃ計算コストかかる。なんとかして。 |
34 | 35 | const canRequest = (userId: number) => |
35 | 36 | !matches?.some((match) => match.id === userId) && |
36 | 37 | !pending?.some((pending) => pending.id === userId); |
37 | 38 |
|
| 39 | + const [searchQuery__interest, setSearchQuery__interest] = useState< |
| 40 | + string | null |
| 41 | + >(null); |
| 42 | + setSearchQuery__interest; // TODO: use this in some UI |
| 43 | + |
| 44 | + const filteredUsers = users |
| 45 | + // this is O(count(users) * count(avg(count(interests))) * count(avg(len(interests.name)))). very bad. |
| 46 | + ?.filter( |
| 47 | + (u) => |
| 48 | + searchQuery__interest === null || |
| 49 | + u.interestSubjects.some((i) => i.name.includes(searchQuery__interest)), |
| 50 | + ); |
| 51 | + console.log(searchQuery__interest); |
| 52 | + |
38 | 53 | return ( |
39 | 54 | <div> |
40 | | - {users?.map((user) => ( |
| 55 | + {filteredUsers?.map((user) => ( |
41 | 56 | <HumanListItem |
42 | 57 | key={user.id} |
43 | 58 | id={user.id} |
|
0 commit comments