Skip to content

Commit 25110af

Browse files
authored
Merge pull request #55 from FrostCord/FROS-Search-Impl
Filtering server/dm lists
2 parents 4a32379 + 5aa4b3d commit 25110af

2 files changed

Lines changed: 41 additions & 7 deletions

File tree

components/home/DMessageList.tsx

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { Channel, DMChannelWithRecipient } from '@/types/dbtypes';
22
import UserIcon from '../icons/UserIcon';
33
import styles from '@/styles/Chat.module.css';
44
import { useDMChannels, useSetChannel } from '@/lib/store';
5+
import { SearchBar } from '@/components/forms/Styles';
6+
import { useState } from 'react';
57

68
function mapToComponentArray(
79
_map: Map<string, DMChannelWithRecipient>,
@@ -36,7 +38,7 @@ function mapToComponentArray(
3638
export default function DMessageList() {
3739
const setChannel = useSetChannel();
3840
const dmChannels = useDMChannels();
39-
console.table(dmChannels);
41+
const [ filteredDMs, setFilteredDMs ] = useState(dmChannels);
4042

4143
return (
4244
<>
@@ -48,7 +50,29 @@ export default function DMessageList() {
4850
</div>
4951
</div>
5052
<div className="border-t-2 mx-5 border-grey-700 flex flex-col pt-3">
51-
{ mapToComponentArray(dmChannels, setChannel) }
53+
<div className="pt-4 pb-4">
54+
<input
55+
type="text"
56+
className={`${SearchBar()}`}
57+
placeholder="Search"
58+
onKeyUp={(e) => {
59+
const value = (e.target as HTMLInputElement).value;
60+
61+
// Filter DMs
62+
63+
setFilteredDMs(
64+
new Map(
65+
[...dmChannels].filter(([_, dmChannel]) => {
66+
return dmChannel.recipient.username
67+
.toLowerCase()
68+
.includes(value.toLowerCase());
69+
})
70+
)
71+
);
72+
}}
73+
/>
74+
</div>
75+
{ mapToComponentArray(filteredDMs, setChannel) }
5276
</div>
5377
</>
5478
);

components/home/ServerList.tsx

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { SearchBar } from '@/components/forms/Styles';
33
import { useEffect, useState } from 'react';
44
import Server from '@/components/home/Server';
55
import { useSupabaseClient, useUser } from '@supabase/auth-helpers-react';
6-
import styles from '@/styles/Servers.module.css';
76
import AddServerModal from '@/components/home/AddServerModal';
87
import AddChannelModal from '@/components/home/AddChannelModal';
98
import {
@@ -14,7 +13,7 @@ import {
1413
} from '@/lib/store';
1514
import { Tooltip } from 'react-tooltip';
1615
import PlusIcon from '@/components/icons/PlusIcon';
17-
import { ChannelPermissions, ServerPermissions } from '@/types/permissions';
16+
import { ServerPermissions } from '@/types/permissions';
1817

1918
export default function ServerList() {
2019
//TODO: Display default page (when user belongs to and has no servers)
@@ -27,6 +26,7 @@ export default function ServerList() {
2726
const supabase = useSupabaseClient();
2827

2928
const servers = useServers();
29+
const [ filteredServers, setFilteredServers ] = useState(servers);
3030
const getServers = useGetServers();
3131

3232
const getUserServerPerms = useGetUserPermsForServer();
@@ -87,12 +87,22 @@ export default function ServerList() {
8787
type="text"
8888
className={`${SearchBar()}`}
8989
placeholder="Search"
90-
></input>
90+
onKeyUp={(e) => {
91+
const value = (e.target as HTMLInputElement).value;
92+
93+
// Filter servers
94+
const filteredServers = servers.filter((server) => {
95+
return server.servers.name.toLowerCase().includes(value.toLowerCase());
96+
});
97+
98+
setFilteredServers(filteredServers);
99+
}}
100+
/>
91101
</div>
92102

93103
<div className="overflow-y-auto ">
94-
{servers &&
95-
servers
104+
{filteredServers &&
105+
filteredServers
96106
.sort(function (a, b) {
97107
var textA = a.servers.name.toUpperCase();
98108
var textB = b.servers.name.toUpperCase();

0 commit comments

Comments
 (0)